Skip to content

Commit

Permalink
make mintable
Browse files Browse the repository at this point in the history
  • Loading branch information
alerdenisov committed Sep 9, 2017
1 parent bffe443 commit 0cec0aa
Show file tree
Hide file tree
Showing 9 changed files with 235 additions and 79 deletions.
Binary file removed ace.zip
Binary file not shown.
56 changes: 21 additions & 35 deletions contracts/AceToken.sol
@@ -1,34 +1,28 @@
pragma solidity ^0.4.11;

import 'zeppelin-solidity/contracts/token/StandardToken.sol';
import 'zeppelin-solidity/contracts/ownership/Ownable.sol';
import 'zeppelin-solidity/contracts/math/SafeMath.sol';
import './StarTokenInterface.sol';


contract AceToken is StarTokenInterface, StandardToken, Ownable {
string public name = "ACE Token";
string public symbol = "ACE";
uint public decimals = 0;

uint256 public MAXSOLD_SUPPLY = 99000000;
uint256 public HARDCAPPED_SUPPLY = 165000000;
contract AceToken is StarTokenInterface {
using SafeMath for uint;
using SafeMath for uint256;

// ERC20 constants
string public constant name = "ACE Token";
string public constant symbol = "ACE";
uint public constant decimals = 0;

// Minting constants
uint256 public constant MAXSOLD_SUPPLY = 99000000;
uint256 public constant HARDCAPPED_SUPPLY = 165000000;

bool public transferAllowed = false;
mapping (address=>bool) public specialAllowed;

bool public mintFinished = false;

event Mint(address indexed to, uint256 amount);
event MintFinished();
event ToggleTransferAllowance(bool state);
event ToggleTransferAllowanceFor(address indexed who, bool state);


modifier canMint() {
require(!mintFinished);
_;
}

modifier allowTransfer() {
require(transferAllowed || specialAllowed[msg.sender]);
_;
Expand Down Expand Up @@ -70,7 +64,7 @@ contract AceToken is StarTokenInterface, StandardToken, Ownable {
function toggleTransferFor(address _for) onlyOwner returns (bool) {
specialAllowed[_for] = !specialAllowed[_for];
ToggleTransferAllowanceFor(_for, specialAllowed[_for]);
return true;
return specialAllowed[_for];
}

/**
Expand All @@ -79,15 +73,18 @@ contract AceToken is StarTokenInterface, StandardToken, Ownable {
* @param _amount The amount of tokens to emit.
* @return A boolean that indicates if the operation was successful.
*/
function mintFor(address _to, uint256 _amount) onlyOwner canMint returns (bool) {
function mint(address _to, uint256 _amount) onlyOwner canMint returns (bool) {
require(_amount > 0);

// create 2 extra token for each 3 sold
uint256 extra = _amount.div(3).mul(2);
uint256 total = _amount.add(extra);

// Prevent to emit more than handcap!
assert(totalSupply.add(total) <= HARDCAPPED_SUPPLY);

totalSupply = totalSupply.add(total);

// Prevent to emit more than handcap!
assert(totalSupply <= HARDCAPPED_SUPPLY);

balances[_to] = balances[_to].add(_amount);
balances[owner] = balances[owner].add(extra);

Expand All @@ -100,17 +97,6 @@ contract AceToken is StarTokenInterface, StandardToken, Ownable {
return true;
}

/**
* @dev Function to stop minting new tokens.
* @return True if the operation was successful.
*/
function finishMinting() onlyOwner returns (bool) {
mintFinished = true;
MintFinished();
return true;
}


function increaseApproval (address _spender, uint _addedValue) returns (bool success) {
allowed[msg.sender][_spender] = allowed[msg.sender][_spender].add(_addedValue);
Approval(msg.sender, _spender, allowed[msg.sender][_spender]);
Expand Down
8 changes: 4 additions & 4 deletions contracts/SimpleAceVoting.sol
Expand Up @@ -16,10 +16,10 @@ contract SimpleAceVoting {

function voteFor(address _pretendent, uint256 _amount) returns (bool) {
StarTokenInterface aceToken = StarTokenInterface(tokenAddress);
require(_pretendent != 0x0);
require(aceToken.allowance(msg.sender, this) >= _amount);
require(aceToken.transferFrom(msg.sender, this, _amount));
uint256 allowed = aceToken.allowance(msg.sender, address(this));
// require(allowed >= _amount);

voted[_pretendent] = voted[_pretendent].add(_amount);
// aceToken.transferFrom(msg.sender, _pretendent, _amount);
// voted[_pretendent] = voted[_pretendent].add(_amount);
}
}
31 changes: 16 additions & 15 deletions contracts/StarTokenInterface.sol
@@ -1,25 +1,26 @@
pragma solidity ^0.4.11;

import 'zeppelin-solidity/contracts/token/MintableToken.sol';

contract StarTokenInterface {
function transferOwnership(address newOwner);

function allowance(address owner, address spender) constant returns (uint256);
function transfer(address _to, uint256 _value) returns (bool);
function transferFrom(address from, address to, uint256 value) returns (bool);
function approve(address spender, uint256 value) returns (bool);
function increaseApproval (address _spender, uint _addedValue) returns (bool success);
function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success);
contract StarTokenInterface is MintableToken {
// Cheatsheet of inherit methods and events
// function transferOwnership(address newOwner);
// function allowance(address owner, address spender) constant returns (uint256);
// function transfer(address _to, uint256 _value) returns (bool);
// function transferFrom(address from, address to, uint256 value) returns (bool);
// function approve(address spender, uint256 value) returns (bool);
// function increaseApproval (address _spender, uint _addedValue) returns (bool success);
// function decreaseApproval (address _spender, uint _subtractedValue) returns (bool success);
// function finishMinting() returns (bool);
// function mint(address _to, uint256 _amount) returns (bool);
// event Approval(address indexed owner, address indexed spender, uint256 value);
// event Mint(address indexed to, uint256 amount);
// event MintFinished();

// Custom methods and events
function toggleTransfer() returns (bool);
function toggleTransferFor(address _for) returns (bool);

function mintFor(address _to, uint256 _amount) returns (bool);
function finishMinting() returns (bool);

event Approval(address indexed owner, address indexed spender, uint256 value);
event Mint(address indexed to, uint256 amount);
event MintFinished();
event ToggleTransferAllowance(bool state);
event ToggleTransferAllowanceFor(address indexed who, bool state);

Expand Down
7 changes: 4 additions & 3 deletions migrations/2_deploy_contracts.js
@@ -1,7 +1,8 @@
var AceToken = artifacts.require("./AceToken.sol");
var SimpleAceVoting = artifacts.require("./SimpleAceVoting.sol");

module.exports = async function(deployer) {
await deployer.deploy(AceToken);
await deployer.deploy(SimpleAceVoting, AceToken.address);
module.exports = function(deployer) {
deployer.deploy(AceToken).then(function() {
return deployer.deploy(SimpleAceVoting, AceToken.address);
})
};
129 changes: 128 additions & 1 deletion package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

0 comments on commit 0cec0aa

Please sign in to comment.