Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Token_BFA/test.sol
22 changes: 11 additions & 11 deletions Addresses.sol
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
pragma solidity ^0.4.0;

library Addresses {
function isContract(address _base) internal constant returns (bool) {
uint codeSize;
assembly {
codeSize := extcodesize(_base)
}
return codeSize > 0;
}
}
pragma solidity ^0.4.0;
library Addresses {
function isContract(address _base) internal constant returns (bool) {
uint codeSize;
assembly {
codeSize := extcodesize(_base)
}
return codeSize > 0;
}
}
180 changes: 90 additions & 90 deletions Crowdsale.sol
Original file line number Diff line number Diff line change
@@ -1,90 +1,90 @@
pragma solidity ^0.4.0;

import "./ERC223ReceivingContract.sol";
import "./SafeMath.sol";
import "./ERC20.sol";
import "./Token.sol";

contract Crowdsale is ERC223ReceivingContract {

using SafeMath for uint;

Token private _token;

uint private _start;
uint private _end;

uint private _price;
uint private _limit;
uint private _available;

mapping (address => uint) private _limits;

event Buy(address beneficiary, uint amount);

modifier available() {
require(_available > 0);
require(block.number >= _start && block.number < _end);
_;
}

modifier isToken() {
require(msg.sender == address(_token));
_;
}

modifier valid(address to, uint amount) {
assert(amount > 0);
amount = amount.div(_price);
assert(_limit >= amount);
assert(_limit >= _limits[to].add(amount));
_;
}

function Crowdsale(address token, uint start, uint end, uint price, uint limit)
public {
_token = Token(token);
_start = start;
_end = end;
_price = price;
_limit = limit;
}

function ()
public
payable {
// Not enough gas for the transaction so prevent users from sending ether
revert();
}

function buy()
public
payable {
return buyFor(msg.sender);
}

function buyFor(address beneficiary)
public
available
valid(beneficiary, msg.value)
payable {
uint amount = msg.value.div(_price);
_token.transfer(beneficiary, amount);
_available = _available.sub(amount);
_limits[beneficiary] = _limits[beneficiary].add(amount);
Buy(beneficiary, amount);
}

function tokenFallback(address, uint _value, bytes)
isToken
public {
_available = _available.add(_value);
}

function availableBalance()
view
public
returns (uint) {
return _available;
}
}
pragma solidity ^0.4.0;
import "./ERC223ReceivingContract.sol";
import "./SafeMath.sol";
import "./ERC20.sol";
import "./Token.sol";
contract Crowdsale is ERC223ReceivingContract {
using SafeMath for uint;
Token private _token;
uint private _start;
uint private _end;
uint private _price;
uint private _limit;
uint private _available;
mapping (address => uint) private _limits;
event Buy(address beneficiary, uint amount);
modifier available() {
require(_available > 0);
require(block.number >= _start && block.number < _end);
_;
}
modifier isToken() {
require(msg.sender == address(_token));
_;
}
modifier valid(address to, uint amount) {
assert(amount > 0);
amount = amount.div(_price);
assert(_limit >= amount);
assert(_limit >= _limits[to].add(amount));
_;
}
function Crowdsale(address token, uint start, uint end, uint price, uint limit)
public {
_token = Token(token);
_start = start;
_end = end;
_price = price;
_limit = limit;
}
function ()
public
payable {
// Not enough gas for the transaction so prevent users from sending ether
revert();
}
function buy()
public
payable {
return buyFor(msg.sender);
}
function buyFor(address beneficiary)
public
available
valid(beneficiary, msg.value)
payable {
uint amount = msg.value.div(_price);
_token.transfer(beneficiary, amount);
_available = _available.sub(amount);
_limits[beneficiary] = _limits[beneficiary].add(amount);
Buy(beneficiary, amount);
}
function tokenFallback(address, uint _value, bytes)
isToken
public {
_available = _available.add(_value);
}
function availableBalance()
view
public
returns (uint) {
return _available;
}
}
16 changes: 8 additions & 8 deletions ERC20.sol
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
pragma solidity ^0.4.0;

interface ERC20 {
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);
event Approval(address indexed _owner, address indexed _spender, uint _value);
}
pragma solidity ^0.4.0;
interface ERC20 {
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);
event Approval(address indexed _owner, address indexed _spender, uint _value);
}
12 changes: 6 additions & 6 deletions ERC223.sol
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
pragma solidity ^0.4.0;

interface ERC223 {
function transfer(address _to, uint _value, bytes _data) public returns (bool);
event Transfer(address indexed from, address indexed to, uint value, bytes indexed data);
}
pragma solidity ^0.4.0;
interface ERC223 {
function transfer(address _to, uint _value, bytes _data) public returns (bool);
event Transfer(address indexed from, address indexed to, uint value, bytes indexed data);
}
10 changes: 5 additions & 5 deletions ERC223ReceivingContract.sol
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
pragma solidity ^0.4.0;

contract ERC223ReceivingContract {
function tokenFallback(address _from, uint _value, bytes _data) public;
}
pragma solidity ^0.4.0;
contract ERC223ReceivingContract {
function tokenFallback(address _from, uint _value, bytes _data) public;
}
Loading