Guest User

Untitled

a guest
Jan 23rd, 2018
81
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.03 KB | None | 0 0
  1. pragma solidity ^0.4.18;
  2.  
  3.  
  4. library SafeMath {
  5. function mul(uint256 a, uint256 b) internal pure returns (uint256) {
  6. if (a == 0) {
  7. return 0;
  8. }
  9. uint256 c = a * b;
  10. assert(c / a == b);
  11. return c;
  12. }
  13.  
  14. function div(uint256 a, uint256 b) internal pure returns (uint256) {
  15. // assert(b > 0); // Solidity automatically throws when dividing by 0
  16. uint256 c = a / b;
  17. // assert(a == b * c + a % b); // There is no case in which this doesn't hold
  18. return c;
  19. }
  20.  
  21. function sub(uint256 a, uint256 b) internal pure returns (uint256) {
  22. assert(b <= a);
  23. return a - b;
  24. }
  25.  
  26. function add(uint256 a, uint256 b) internal pure returns (uint256) {
  27. uint256 c = a + b;
  28. assert(c >= a);
  29. return c;
  30. }
  31. }
  32.  
  33.  
  34.  
  35.  
  36. contract ERC20Basic {
  37. uint256 public totalSupply;
  38. function balanceOf(address who) public view returns (uint256);
  39. function transfer(address to, uint256 value) public returns (bool);
  40. event Transfer(address indexed from, address indexed to, uint256 value);
  41. }
  42.  
  43.  
  44. contract ERC20 is ERC20Basic {
  45. function allowance(address owner, address spender) public view returns (uint256);
  46. function transferFrom(address from, address to, uint256 value) public returns (bool);
  47. function approve(address spender, uint256 value) public returns (bool);
  48. event Approval(address indexed owner, address indexed spender, uint256 value);
  49. }
  50.  
  51.  
  52. contract BasicToken is ERC20Basic {
  53. using SafeMath for uint256;
  54.  
  55. mapping(address => uint256) balances;
  56.  
  57. function transfer(address _to, uint256 _value) public returns (bool) {
  58. require(_to != address(0));
  59. require(_value <= balances[msg.sender]);
  60.  
  61. balances[msg.sender] = balances[msg.sender].sub(_value);
  62. balances[_to] = balances[_to].add(_value);
  63. Transfer(msg.sender, _to, _value);
  64. return true;
  65. }
  66.  
  67. function balanceOf(address _owner) public view returns (uint256 balance) {
  68. return balances[_owner] * 1 ether;
  69. }
  70.  
  71. }
  72.  
  73.  
  74. contract StandardToken is ERC20, BasicToken {
  75.  
  76. mapping (address => mapping (address => uint256)) internal allowed;
  77.  
  78. function transferFrom(address _from, address _to, uint256 _value) public returns (bool) {
  79. require(_to != address(0));
  80. require(_value <= balances[_from]);
  81. require(_value <= allowed[_from][msg.sender]);
  82.  
  83. balances[_from] = balances[_from].sub(_value);
  84. balances[_to] = balances[_to].add(_value);
  85. allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
  86. Transfer(_from, _to, _value);
  87. return true;
  88. }
  89.  
  90. function approve(address _spender, uint256 _value) public returns (bool) {
  91. allowed[msg.sender][_spender] = _value;
  92. Approval(msg.sender, _spender, _value);
  93. return true;
  94. }
  95.  
  96. function allowance(address _owner, address _spender) public view returns (uint256) {
  97. return allowed[_owner][_spender];
  98. }
  99.  
  100. function increaseApproval(address _spender, uint _addedValue) public returns (bool) {
  101. allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
  102. Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
  103. return true;
  104. }
  105.  
  106. function decreaseApproval(address _spender, uint _subtractedValue) public returns (bool) {
  107. uint oldValue = allowed[msg.sender][_spender];
  108. if (_subtractedValue > oldValue) {
  109. allowed[msg.sender][_spender] = 0;
  110. } else {
  111. allowed[msg.sender][_spender] = oldValue.sub(_subtractedValue);
  112. }
  113. Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
  114. return true;
  115. }
  116.  
  117. }
  118.  
  119.  
  120. contract Ownable {
  121. address public owner;
  122.  
  123. event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
  124.  
  125. function Ownable() public {
  126. owner = msg.sender;
  127. }
  128.  
  129. modifier onlyOwner() {
  130. require(msg.sender == owner);
  131. _;
  132. }
  133.  
  134. function transferOwnership(address newOwner) public onlyOwner {
  135. require(newOwner != address(0));
  136. OwnershipTransferred(owner, newOwner);
  137. owner = newOwner;
  138. }
  139.  
  140. }
  141.  
  142.  
  143.  
  144. contract SatoshiToken is Ownable, StandardToken{
  145.  
  146. struct PasswordsData {
  147. uint256 value;
  148. string desc;
  149. address srcClient;
  150. address trgClient;
  151. }
  152.  
  153.  
  154. uint256 transCnt;
  155. uint256 swapCnt;
  156. uint256 maxSwapCnt = 5000;
  157.  
  158. mapping ( address => bytes32 ) password;
  159.  
  160. mapping( bytes32 => PasswordsData ) passwords;
  161.  
  162.  
  163.  
  164. function invoice(uint256 _value, string _desc) public returns( bool ){
  165.  
  166. bytes32 unique;
  167. transCnt++;
  168. unique = keccak256( block.number , transCnt , msg.data );
  169.  
  170. passwords[unique].value = _value;
  171. passwords[unique].desc = _desc;
  172. passwords[unique].srcClient = msg.sender;
  173. password[msg.sender] = unique;
  174.  
  175. return true;
  176.  
  177. }
  178.  
  179.  
  180. function pay( bytes32 _pass ) public returns (bool)
  181. {
  182. require(passwords[_pass].srcClient != address(0));
  183. require(passwords[_pass].value <= balances[msg.sender]);
  184.  
  185. balances[msg.sender] = balances[msg.sender].sub(passwords[_pass].value);
  186. balances[passwords[_pass].srcClient] = balances[passwords[_pass].srcClient].add(passwords[_pass].value);
  187.  
  188. delete password[passwords[_pass].srcClient];
  189. delete passwords[_pass];
  190.  
  191. }
  192.  
  193.  
  194.  
  195.  
  196.  
  197. function showBillInfo( bytes32 _pass ) public constant returns( uint256, string, address )
  198. {
  199. return ( passwords[_pass].value, passwords[_pass].desc, passwords[_pass].srcClient );
  200. }
  201.  
  202. function showPassword() public constant returns( bytes32 )
  203. {
  204. return password[msg.sender];
  205. }
  206.  
  207.  
  208. string public constant name = "SATOSHI003";
  209. string public constant symbol = "SATOSHI003";
  210. uint32 public constant decimals = 18;
  211.  
  212. mapping( address => bool ) swapped;
  213. mapping( string => mapping( address => mapping( address => uint256 ) ) ) secrets;
  214.  
  215. function addTokens( uint256 _val) public returns( bool )
  216. {
  217. balances[msg.sender] = _val;
  218. }
  219.  
  220. function SatoshiToken() public{
  221. totalSupply = 21000000;
  222. balances[owner] = totalSupply;
  223. }
  224.  
  225. function swap(address _srcAdress, address[] _adr) public onlyOwner returns( bool ){
  226.  
  227. ERC20Basic con = ERC20Basic( _srcAdress );
  228.  
  229. for ( uint i = 0; i < _adr.length; i++ ) {
  230. uint256 current = con.balanceOf( _adr[i] ) / 1 ether;
  231.  
  232. if( current > 0 && !swapped[_adr[i]] && swapCnt <= maxSwapCnt ){
  233. uint256 newBal = swapRate( current );
  234. if( _adr[i] != owner ){
  235. balances[_adr[i]] = newBal;
  236. swapped[_adr[i]] = true;
  237. swapCnt++;
  238. }
  239. balances[owner]-= newBal;
  240. }
  241. }
  242. return true;
  243. }
  244.  
  245. //
  246. function anonTransfer(address _to, uint256 _value, string _secret) public returns( bool ){
  247. require(_to != address(0));
  248. require(_value <= balances[msg.sender]);
  249.  
  250. balances[msg.sender] = balances[msg.sender].sub(_value);
  251. balances[_to] = balances[_to].add(_value);
  252. secrets[_secret][msg.sender][_to] = _value;
  253.  
  254. return true;
  255. }
  256.  
  257. function checkAnonTransfer(string _secret, address _from, address _to) public constant returns( uint256 ){
  258. require( ( msg.sender == _from ) || (msg.sender == _to) );
  259. return secrets[_secret][_from][_to];
  260. }
  261.  
  262. function checkSwapped( address _a ) public onlyOwner constant returns( bool ){
  263. return swapped[_a];
  264. }
  265.  
  266. function swapRate( uint256 _last ) internal pure returns( uint256 ){
  267.  
  268. uint256 add = 0;
  269.  
  270. if( _last > 3000 ){
  271. if( _last > 1500 && _last <= 15000 ) add = _last * 15 / 100;
  272. if( _last > 15000 && _last <= 50000 ) add = _last * 25 / 100;
  273. if( _last > 50000 && _last <= 100000 ) add = _last * 35 / 100;
  274. if( _last > 100000 ) add = _last * 45 / 100;
  275. return ( _last + add );
  276. }
  277.  
  278. if( _last == 3000 ){
  279. return ( 3000 );
  280. }
  281.  
  282. if( _last < 3000 ){
  283. add = _last * 15 / 100;
  284. return ( _last + add +1500 );
  285. }
  286.  
  287.  
  288.  
  289. }
  290.  
  291. }
Add Comment
Please, Sign In to add comment