Browse Source

new token base

Manuel Araoz 9 years ago
parent
commit
f53ec8613e
3 changed files with 58 additions and 73 deletions
  1. 54 0
      contracts/BaseToken.sol
  2. 4 0
      contracts/ERC20.sol
  3. 0 73
      contracts/Token.sol

+ 54 - 0
contracts/BaseToken.sol

@@ -0,0 +1,54 @@
+pragma solidity ^0.4.0;
+
+// Everything throws instead of returning false on failure.
+import './ERC20.sol';
+
+/**
+ * ERC 20 token
+ *
+ * https://github.com/ethereum/EIPs/issues/20
+ * Based on original code by FirstBlood:
+ * https://github.com/Firstbloodio/token/blob/master/smart_contract/FirstBloodToken.sol
+ */
+contract BaseToken is ERC20 {
+
+    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;
+
+}

+ 4 - 0
contracts/ERC20.sol

@@ -1,4 +1,8 @@
 pragma solidity ^0.4.0;
+
+
+// see https://github.com/ethereum/EIPs/issues/20
+
 contract ERC20 {
     function totalSupply() constant returns (uint);
     function balanceOf(address who) constant returns (uint);

+ 0 - 73
contracts/Token.sol

@@ -1,73 +0,0 @@
-pragma solidity ^0.4.0;
-// Source: https://github.com/nexusdev/erc20
-// Flat file implementation of `dappsys/token/base.sol::DSTokenBase`
-
-// Everything throws instead of returning false on failure.
-import './ERC20.sol';
-
-contract Token is ERC20 {
-
-  mapping( address => uint ) _balances;
-  mapping( address => mapping( address => uint ) ) _approvals;
-  uint _supply;
-
-  function Token( uint initial_balance ) {
-    _balances[msg.sender] = initial_balance;
-    _supply = initial_balance;
-  }
-
-  function totalSupply() constant returns (uint supply) {
-    return _supply;
-  }
-
-  function balanceOf( address who ) constant returns (uint value) {
-    return _balances[who];
-  }
-
-  function transfer( address to, uint value) returns (bool ok) {
-    if( _balances[msg.sender] < value ) {
-        throw;
-    }
-    if( !safeToAdd(_balances[to], value) ) {
-        throw;
-    }
-    _balances[msg.sender] -= value;
-    _balances[to] += value;
-    Transfer( msg.sender, to, value );
-    return true;
-  }
-
-  function transferFrom( address from, address to, uint value) returns (bool ok) {
-    // if you don't have enough balance, throw
-    if( _balances[from] < value ) {
-        throw;
-    }
-    // if you don't have approval, throw
-    if( _approvals[from][msg.sender] < value ) {
-        throw;
-    }
-    if( !safeToAdd(_balances[to], value) ) {
-        throw;
-    }
-    // transfer and return true
-    _approvals[from][msg.sender] -= value;
-    _balances[from] -= value;
-    _balances[to] += value;
-    Transfer( from, to, value );
-    return true;
-  }
-
-  function approve(address spender, uint value) returns (bool ok) {
-    _approvals[msg.sender][spender] = value;
-    Approval( msg.sender, spender, value );
-    return true;
-  }
-
-  function allowance(address owner, address spender) constant returns (uint _allowance) {
-    return _approvals[owner][spender];
-  }
-
-  function safeToAdd(uint a, uint b) internal returns (bool) {
-    return (a + b >= a);
-  }
-}