Skip to content

Instantly share code, notes, and snippets.

@habdelra
Last active April 7, 2018 13:12
Show Gist options
  • Save habdelra/9968a6dfee5b293a57f04d1389476253 to your computer and use it in GitHub Desktop.
Save habdelra/9968a6dfee5b293a57f04d1389476253 to your computer and use it in GitHub Desktop.
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