diff --git a/contracts/Bounty.sol b/contracts/Bounty.sol index c37597f09..77e2e9e78 100644 --- a/contracts/Bounty.sol +++ b/contracts/Bounty.sol @@ -1,9 +1,10 @@ pragma solidity ^0.4.0; import './PullPayment.sol'; +import './examples/ExampleToken.sol'; /* * Bounty - * This bounty will pay out if you can cause a Token's balance + * This bounty will pay out if you can cause a ExampleToken's balance * to be lower than its totalSupply, which would mean that it doesn't * have sufficient ether for everyone to withdraw. */ @@ -16,16 +17,16 @@ contract Bounty is PullPayment { if (claimed) throw; } - function createTarget() returns(Token) { - Token target = new Token(0); + function createTarget() returns(ExampleToken) { + ExampleToken target = new ExampleToken(); researchers[target] = msg.sender; return target; } - function claim(Token target) { + function claim(ExampleToken target) { address researcher = researchers[target]; if (researcher == 0) throw; - // check Token contract invariants + // check ExampleToken contract invariants if (target.totalSupply() == target.balance) { throw; } diff --git a/contracts/ERC20.sol b/contracts/ERC20.sol index 157bd9077..42b65a617 100644 --- a/contracts/ERC20.sol +++ b/contracts/ERC20.sol @@ -4,14 +4,13 @@ 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); - function allowance(address owner, address spender) constant returns (uint); + 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); + 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); } diff --git a/contracts/StandardToken.sol b/contracts/StandardToken.sol index 63b277a83..69b8e186f 100644 --- a/contracts/StandardToken.sol +++ b/contracts/StandardToken.sol @@ -12,11 +12,10 @@ import './SafeMath.sol'; */ contract StandardToken is ERC20, SafeMath { - mapping(address => uint256) balances; - mapping (address => mapping (address => uint256)) allowed; - uint256 public totalSupply; + mapping(address => uint) balances; + mapping (address => mapping (address => uint)) allowed; - function transfer(address _to, uint256 _value) returns (bool success) { + function transfer(address _to, uint _value) returns (bool success) { if (balances[msg.sender] < _value) { throw; } @@ -26,7 +25,7 @@ contract StandardToken is ERC20, SafeMath { return true; } - function transferFrom(address _from, address _to, uint256 _value) returns (bool success) { + function transferFrom(address _from, address _to, uint _value) returns (bool success) { var _allowance = allowed[_from][msg.sender]; if (balances[_from] < _value || _allowance < _value) { @@ -40,17 +39,17 @@ contract StandardToken is ERC20, SafeMath { return true; } - function balanceOf(address _owner) constant returns (uint256 balance) { + function balanceOf(address _owner) constant returns (uint balance) { return balances[_owner]; } - function approve(address _spender, uint256 _value) returns (bool success) { + 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 (uint256 remaining) { + function allowance(address _owner, address _spender) constant returns (uint remaining) { return allowed[_owner][_spender]; } diff --git a/contracts/examples/ExampleToken.sol b/contracts/examples/ExampleToken.sol new file mode 100644 index 000000000..3bdbbf6a2 --- /dev/null +++ b/contracts/examples/ExampleToken.sol @@ -0,0 +1,32 @@ +pragma solidity ^0.4.0; + +import "../StandardToken.sol"; + +contract ExampleToken is StandardToken { + + string public name = "ExampleToken"; + string public symbol = "TOK"; + uint public decimals = 18; + + // 1 ether = 500 example tokens + uint PRICE = 500; + + + function () payable { + createTokens(msg.sender); + } + + function createTokens(address recipient) payable { + if (msg.value == 0) throw; + + uint tokens = safeMul(msg.value, getPrice()); + + totalSupply = safeAdd(totalSupply, tokens); + balances[recipient] = safeAdd(balances[recipient], tokens); + } + + // replace this with any other price function + function getPrice() constant returns (uint result){ + return PRICE; + } +} diff --git a/package.json b/package.json index 6e16647c4..26936004c 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "truffle.js", "devDependencies": {}, "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", + "test": "truffle test", "install": "scripts/install.sh" }, "repository": {