Solidity

Solidity

Lubimov Kirill

pragma solidity ^0.4.18;


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) {

   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 BasicToken is ERC20 {

 using SafeMath for uint256;

 

 struct FIO{


      string firstName;


      string lastName;

      

      string surName;

      

      string eMail;

}


 mapping(address => uint256) balances;

 mapping(address => FIO) fios;

 mapping(address => mapping (address => uint256) ) allowed;

 

 function showFIObyAddress(address _who) public constant returns(string)

 {

     FIO memory f = fios[_who];

     string memory text = strConcat(strConcat(f.lastName, "  " ,f.firstName ,"  "),f.surName, "   ", f.eMail);

     return text;

 }

 

 

 function setFIO(string _lastName, string _firstName, string _surName, string _eMail)public {

      

      fios[msg.sender] = FIO({firstName: _firstName, surName: _surName, lastName: _lastName, eMail: _eMail});


  }


 function balanceOf(address who) public constant returns (uint256) {

   return balances[who];

 }

 

 function transfer(address _to, uint256 _value) public returns (bool) {

   require(_to != address(0));

   require(_value <= balances[msg.sender]);

   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) {

   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 constant returns (uint256 remaining) {

   return allowed[_owner][_spender];

 }

  

 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();

 }

 

 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, "", "", "");

   }


}


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 MintableToken is BasicToken, Ownable {

   

 event Mint(address indexed to, uint256 amount);


 function mint(address _to, uint256 _amount) public returns (bool) {

   totalSupply = totalSupply.add(_amount);

   balances[_to] = balances[_to].add(_amount);

   Mint(_to, _amount);

   return true;

 }

 

}


contract SimpleTokenCoin is MintableToken {

   

   string public constant name = "Simple Coin Token";

   

   string public constant symbol = "SCT";

   

   uint32 public constant decimals = 18;

   

}


contract Crowdsale {

   

   address owner;

   

   SimpleTokenCoin public token = new SimpleTokenCoin();

   

   uint start = 1555003800;

   

   uint period = 300;

   

   function Crowdsale() {

       owner = msg.sender;

   }

   

   function() external payable {

       require(now > start && now < start + period*24*60*60);

       owner.transfer(msg.value);

       token.mint(msg.sender, msg.value);

   }

   

}


Report Page