Skip to content
This repository was archived by the owner on Jan 1, 2020. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
43 commits
Select commit Hold shift + click to select a range
0bf91c5
Pulled validated token
expede Apr 2, 2018
7439e56
This is starting to make more sense 😅
expede Apr 3, 2018
dd2d72e
Compiles
expede Apr 3, 2018
25d063e
Tweak
expede Apr 3, 2018
f93e551
Better types
expede Apr 3, 2018
dc48a0c
Better types
expede Apr 3, 2018
3335ac0
Better types
expede Apr 3, 2018
8ae6c57
Bump sol
expede Apr 3, 2018
313e555
Notes to self
expede Apr 3, 2018
fe2d71f
Refactoring
expede Apr 4, 2018
7d14bfc
Time locking in validator
expede Apr 4, 2018
1eed981
Charts
expede Apr 4, 2018
eb48464
Speed bump
expede Apr 4, 2018
7bcf3d3
Thought
expede Apr 4, 2018
81ce89e
Tweak
expede Apr 5, 2018
e7593ae
Tweak
expede Apr 5, 2018
ef8791a
Clarify with README
expede Apr 5, 2018
6c9b947
Clean up README
expede Apr 5, 2018
eb0de61
Rearrange
expede Apr 5, 2018
4715fd2
Typo
expede Apr 5, 2018
44e5d40
Note to self
expede Apr 5, 2018
9b6e454
Remove unused code
expede Apr 5, 2018
6fccc46
Crutial flaw
expede Apr 5, 2018
7687ff8
WIP
expede Apr 10, 2018
4e96a8f
WIP
expede Apr 12, 2018
09f084e
WIP
expede Apr 12, 2018
249b6ed
Wow it compiles
expede Apr 12, 2018
44bc28c
Happily compiling
expede Apr 12, 2018
c9ac427
yey
expede Apr 12, 2018
ea80535
just tests
expede Apr 12, 2018
d902188
Starting on tests
expede Apr 12, 2018
5c01f17
muahahhaa it compiles again
expede Apr 18, 2018
75935b3
Passing
expede Apr 19, 2018
e6f16a3
Compiles again
expede Apr 19, 2018
80df5e6
Tests pass agian
expede Apr 19, 2018
26109f3
Break out portions of functionality
expede Apr 19, 2018
f4bacf0
Sure why not
expede Apr 19, 2018
8a2fc8a
Starting tests for closable
expede Apr 19, 2018
babc37b
test closable
expede Apr 19, 2018
44c979f
WIP
expede Apr 20, 2018
829372b
Truffle! YUNO return value
expede Apr 21, 2018
34d51e9
ESLint
expede Apr 21, 2018
e87bbe4
Troubleshooting Could not find artifacts for truffle/Assert.sol
expede Apr 23, 2018
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
4 changes: 4 additions & 0 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,9 @@
],
"parserOptions": {
"ecmaVersion": 8
},
"rules": {
"arrow-parens": ["error", "always"],
"comma-dangle": ["error", "never"]
}
}
67 changes: 30 additions & 37 deletions contracts/Deal.sol
Original file line number Diff line number Diff line change
@@ -1,38 +1,31 @@
pragma solidity ^0.4.15;


import '../node_modules/zeppelin-solidity/contracts/crowdsale/Crowdsale.sol';
import './TxOwnable.sol';
import './DealToken.sol';


contract Deal is Crowdsale, TxOwnable {

DealToken dealToken;
mapping (address => bool) authorized;
event Authorizing(address sender, address investor);

function Deal(uint256 _startTime, uint256 _endTime, uint256 _rate, address _wallet)
Crowdsale(_startTime, _endTime, _rate, _wallet) TxOwnable {
}

// creates the token to be sold.
// override this method to have crowdsale of a specific MintableToken token.
function createTokenContract() internal returns (MintableToken) {
// address dealAddress = address(this);
// DealToken(dealAddress, address(token));
dealToken = new DealToken();
return dealToken;
}

function authorize(address investor) onlyOwner public {
Authorizing(msg.sender,investor);
dealToken.authorizeAddress(investor,true);
authorized[investor] = true;
}


function buyTokens(address beneficiary) public payable {
return super.buyTokens(beneficiary);
}
pragma solidity ^0.4.21;

import "validated-token/contracts/ReferenceToken.sol";
import "./Phase/PhasedToken.sol";

contract Deal is PhasedToken, ReferenceToken {
constructor(
string _name,
string _symbol,
uint256 _granularity,
uint256 _mintStartTime,
uint256 _holdStartTime,
uint256 _transferStartTime,
TokenValidator _validator
) ReferenceToken(_name, _symbol, _granularity, _validator)
PhasedToken(_mintStartTime, _holdStartTime, _transferStartTime)
public {}

function mint(address _tokenHolder, uint256 _amount) public onlyOwner {
require(isMintPhase());
return super.mint(_tokenHolder, _amount);
}

function canTransfer(
address _from,
address _to,
uint256 _amount
) internal returns (bool) {
return (isTransferPhase() && super.canTransfer(_from, _to, _amount));
}
}
17 changes: 0 additions & 17 deletions contracts/DealFactory.sol

This file was deleted.

13 changes: 0 additions & 13 deletions contracts/DealToken.sol

This file was deleted.

68 changes: 68 additions & 0 deletions contracts/DealValidator.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
pragma solidity ^0.4.21;

import "zeppelin-solidity/contracts/math/SafeMath.sol";
import "validated-token/contracts/TokenValidator.sol";
import "zeppelin-solidity/contracts/ownership/Ownable.sol";

/*
Deal DealValidator PhaseValidator
| | |
| check/4 | |
+---------------> | |
| | check/4 |
| +------------------> |
| | |
| | |
| | startTime/0 |
| <------------------------------------+
| | 12345 |
+------------------------------------> |
| | |
| | |
| | endTime/0 |
| <------------------------------------+
| | 67890 |
+------------------------------------> |
| | |
| | |
| | hex"41" |
| | <------------------+
| hex"41" | |
| <---------------+ |
| | |
| | |
*/
contract DealValidator is Ownable, TokenValidator {
using SafeMath for uint256;

mapping(address => bool) internal auths;

constructor() Ownable() public {}

function setAuth(address _address, bool _status) external onlyOwner {
auths[_address] = _status;
}

// TOKEN VALIDATOR //

function check(address /* _deal */, address _account) external returns (byte _status) {
if (auths[_account]) {
return hex"11";
} else {
return hex"10";
}
}

function check(
address /* _token */,
address _from,
address _to,
uint256 /* _amount */
) external returns (byte _validation) {
if (auths[_from] && auths[_to]) {
return hex"11";
} else {
return hex"10";
}
}
}
2 changes: 1 addition & 1 deletion contracts/Migrations.sol
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
pragma solidity ^0.4.17;
pragma solidity ^0.4.21;

contract Migrations {
address public owner;
Expand Down
27 changes: 27 additions & 0 deletions contracts/Phase/AdvanceableToken.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
pragma solidity ^0.4.21;

import "zeppelin-solidity/contracts/ownership/Ownable.sol";
import "./PhasedToken.sol";

contract AdvancableToken is Ownable, PhasedToken {
constructor(
uint256 _mintStartTime,
uint256 _holdStartTime,
uint256 _transferStartTime
) PhasedToken(_mintStartTime, _holdStartTime, _transferStartTime) public {}

function startMintPhase() external onlyOwner {
require(now < mintStartTime);
mintStartTime = now;
}

function startHoldPhase() external onlyOwner {
require(isMintPhase());
holdStartTime = now;
}

function startTransferPhase() external onlyOwner {
require(isHoldPhase());
transferStartTime = now;
}
}
14 changes: 14 additions & 0 deletions contracts/Phase/Closable.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
pragma solidity ^0.4.21;

contract Closable {
uint256 public closingTime;

constructor(uint256 _closingTime) public {
require(_closingTime >= now);
closingTime = _closingTime;
}

function isClosed() public view returns (bool) {
return now >= closingTime;
}
}
64 changes: 64 additions & 0 deletions contracts/Phase/PhasedToken.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
pragma solidity ^0.4.21;

import "../Range.sol";

/*
LIFECYCLE
=========

|-----------|--------------------|----------------|
Minting Hold Period Transfer
*/

contract PhasedToken {
using Range for uint256;

uint256 public mintStartTime;
uint256 public holdStartTime;
uint256 public transferStartTime;

enum Phase {
Before,
Mint,
Hold,
Transfer
}

constructor(
uint256 _mintStartTime,
uint256 _holdStartTime,
uint256 _transferStartTime
) public {
require(now <= _mintStartTime);
require(_mintStartTime <= _holdStartTime);
require(_holdStartTime <= _transferStartTime);

mintStartTime = _mintStartTime;
holdStartTime = _holdStartTime;
transferStartTime = _transferStartTime;
}

function isBeforeMintPhase() public view returns (bool) {
return now < mintStartTime;
}

function isMintPhase() public view returns (bool) {
return now.isBetween(mintStartTime, holdStartTime);
}

function isHoldPhase() public view returns (bool) {
return now.isBetween(holdStartTime, transferStartTime);
}

function isTransferPhase() public view returns (bool) {
return now >= transferStartTime;
}

function phase() public view returns (Phase) {
if (isBeforeMintPhase()) { return Phase.Before; }
if (isMintPhase()) { return Phase.Mint; }
if (isHoldPhase()) { return Phase.Hold; }
if (isTransferPhase()) { return Phase.Transfer; }
revert("Token is in unknown phase");
}
}
11 changes: 11 additions & 0 deletions contracts/Range.sol
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
pragma solidity ^0.4.21;

library Range {
function isBetween(
uint256 _subject,
uint256 _start,
uint256 _end
) internal pure returns (bool) {
return (_start <= _subject && _subject < _end);
}
}
48 changes: 0 additions & 48 deletions contracts/RegulatedToken.sol

This file was deleted.

17 changes: 0 additions & 17 deletions contracts/SimpleContract.sol

This file was deleted.

Loading