Last active
April 7, 2018 13:12
-
-
Save habdelra/9968a6dfee5b293a57f04d1389476253 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pragma solidity ^0.4.18; | |
import "zeppelin-solidity/contracts/ownership/Ownable.sol"; | |
import "zeppelin-solidity/contracts/math/SafeMath.sol"; | |
import "./ERC20.sol"; | |
import "./freezable.sol"; | |
import "./CstLedger.sol"; | |
import "./ExternalStorage.sol"; | |
import "./Registry.sol"; | |
import "./CstLibrary.sol"; | |
import "./displayable.sol"; | |
import "./upgradeable.sol"; | |
import "./configurable.sol"; | |
import "./storable.sol"; | |
contract CardstackToken is ERC20, | |
Ownable, | |
freezable, | |
displayable, | |
upgradeable, | |
configurable, | |
storable { | |
using SafeMath for uint256; | |
using CstLibrary for address; | |
ITokenLedger public tokenLedger; | |
address public externalStorage; | |
. | |
. | |
. | |
function totalSupply() public view unlessFrozen unlessUpgraded returns(uint256) { | |
return tokenLedger.totalTokens(); | |
} | |
function tokensAvailable() public view unlessFrozen unlessUpgraded returns(uint256) { | |
return totalSupply().sub(totalInCirculation()); | |
} | |
function balanceOf(address account) public view unlessUpgraded unlessFrozen returns (uint256) { | |
address thisAddress = this; | |
if (thisAddress == account) { | |
return tokensAvailable(); | |
} else { | |
return tokenLedger.balanceOf(account); | |
} | |
} | |
function transfer(address recipient, uint256 amount) public unlessFrozen unlessUpgraded returns (bool) { | |
require(amount > 0); | |
require(!frozenAccount[recipient]); | |
tokenLedger.transfer(msg.sender, recipient, amount); | |
Transfer(msg.sender, recipient, amount); | |
return true; | |
} | |
function mintTokens(uint256 mintedAmount) public onlySuperAdmins unlessFrozen unlessUpgraded returns (bool) { | |
tokenLedger.mintTokens(mintedAmount); | |
Mint(mintedAmount, tokenLedger.totalTokens(), circulationCap); | |
Transfer(address(0), this, mintedAmount); | |
return true; | |
} | |
function grantTokens(address recipient, uint256 amount) public onlySuperAdmins unlessFrozen unlessUpgraded returns (bool) { | |
require(!frozenAccount[recipient]); | |
tokenLedger.debitAccount(recipient, amount); | |
Transfer(this, recipient, amount); | |
return true; | |
} | |
. | |
. | |
. | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment