Blockwell

AppCoins

ERC20

This contract is an ERC20 token.

Name AppCoins
Symbol APPC
Decimals 18
Total Supply 246,203,093 APPC

About

Stats

Public Functions 22
Event Types 9
Code Size 23,895 bytes

Events (9) keyboard_arrow_up

Approval Event

Parameters help
owner
address help
spender
address help
value
uint256 help

Burned Event

Parameters help
burner
address help
burnedAmount
uint help

Minted Event

Parameters help
receiver
address help
amount
uint help

MintingAgentChanged Event

Parameters help
addr
address help
state
bool help

OwnerReclaim Event

Parameters help
fromWhom
address help
amount
uint help

Transfer Event

Parameters help
from
address help
to
address help
value
uint256 help

UpdatedTokenInformation Event

Parameters help
newName
string help
newSymbol
string help

Upgrade Event

Parameters help
_from
address help
_to
address help
_value
uint256 help

UpgradeAgentSet Event

Parameters help
agent
address help

BURN_ADDRESS Constant

address help
0

totalSupply Variable

uint256 help

name Variable

string help

symbol Variable

string help

decimals Variable

uint help

releaseAgent Variable

address help

released Variable

bool help

owner Variable

address help

mintingFinished Variable

bool help

upgradeMaster Variable

address help

upgradeAgent Variable

UpgradeAgent help

totalUpgraded Variable

uint256 help

transferAgents Variable

mapping(address => bool) help

mintAgents Variable

mapping(address => bool) help

allowed Variable

mapping(address => mapping(address => uint256)) help
Internal Variable

balances Variable

mapping(address => uint256) help
Internal Variable

Functions Expand All Collapse All

Parameters help

Name Type
_owner
address help

Properties

Visibility help public
Mutability help constant
Source Code
function balanceOf(address _owner) constant returns (uint256 balance) {
  return balances[_owner];
}

Parameters help

Name Type
_to
address help
_value
uint256 help

Properties

Visibility help public
Mutability help transaction
Source Code
function transfer(address _to, uint256 _value) returns (bool) {
  balances[msg.sender] = balances[msg.sender].sub(_value);
  balances[_to] = balances[_to].add(_value);
  Transfer(msg.sender, _to, _value);
  return true;
}

Parameters help

Name Type
_owner
address help
_spender
address help

Properties

Visibility help public
Mutability help constant
Source Code
function allowance(address _owner, address _spender)
  constant
  returns (uint256 remaining)
{
  return allowed[_owner][_spender];
}

Parameters help

Name Type
_from
address help
_to
address help
_value
uint256 help

Properties

Visibility help public
Mutability help transaction
Source Code
function transferFrom(
  address _from,
  address _to,
  uint256 _value
) returns (bool) {
  var _allowance = allowed[_from][msg.sender];

  // Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
  // require (_value <= _allowance);

  balances[_to] = balances[_to].add(_value);
  balances[_from] = balances[_from].sub(_value);
  allowed[_from][msg.sender] = _allowance.sub(_value);
  Transfer(_from, _to, _value);
  return true;
}

Parameters help

Name Type
_spender
address help
_value
uint256 help

Properties

Visibility help public
Mutability help transaction

Requirements help

One or more of the following:
Source Code
function approve(address _spender, uint256 _value) returns (bool) {
  // To change the approve amount you first have to reduce the addresses`
  //  allowance to zero by calling `approve(_spender, 0)` if it is not
  //  already 0 to mitigate the race condition described here:
  //  https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
  require((_value == 0) || (allowed[msg.sender][_spender] == 0));

  allowed[msg.sender][_spender] = _value;
  Approval(msg.sender, _spender, _value);
  return true;
}

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help constant
Source Code
function isToken() public constant returns (bool weAre) {
  return true;
}

Parameters help

Name Type
value
uint256 help

Properties

Visibility help public
Mutability help transaction

Requirements help

Source Code
function upgrade(uint256 value) public {
  UpgradeState state = getUpgradeState();
  if (
    !(state == UpgradeState.ReadyToUpgrade || state == UpgradeState.Upgrading)
  ) {
    // Called in a bad state
    throw;
  }

  // Validate input value.
  if (value == 0) throw;

  balances[msg.sender] = balances[msg.sender].sub(value);

  // Take tokens out from circulation
  totalSupply = totalSupply.sub(value);
  totalUpgraded = totalUpgraded.add(value);

  // Upgrade agent reissues the tokens
  upgradeAgent.upgradeFrom(msg.sender, value);
  Upgrade(msg.sender, upgradeAgent, value);
}

Parameters help

Name Type
agent
address help

Properties

Visibility help public
Mutability help transaction
Source Code
function setUpgradeAgent(address agent) external {
  if (!canUpgrade()) {
    // The token is not yet in a state that we could think upgrading
    throw;
  }

  if (agent == 0x0) throw;
  // Only a master can designate the next agent
  if (msg.sender != upgradeMaster) throw;
  // Upgrade has already begun for an agent
  if (getUpgradeState() == UpgradeState.Upgrading) throw;

  upgradeAgent = UpgradeAgent(agent);

  // Bad interface
  if (!upgradeAgent.isUpgradeAgent()) throw;
  // Make sure that token supplies match in source and target
  if (upgradeAgent.originalSupply() != totalSupply) throw;

  UpgradeAgentSet(upgradeAgent);
}

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help constant
Source Code
function getUpgradeState() public constant returns (UpgradeState) {
  if (!canUpgrade()) return UpgradeState.NotAllowed;
  else if (address(upgradeAgent) == 0x00) return UpgradeState.WaitingForAgent;
  else if (totalUpgraded == 0) return UpgradeState.ReadyToUpgrade;
  else return UpgradeState.Upgrading;
}

Parameters help

Name Type
master
address help

Properties

Visibility help public
Mutability help transaction
Source Code
function setUpgradeMaster(address master) public {
  if (master == 0x0) throw;
  if (msg.sender != upgradeMaster) throw;
  upgradeMaster = master;
}

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help constant
Source Code
function canUpgrade() public constant returns (bool) {
  return released && super.canUpgrade();
}

Parameters help

Name Type
newOwner
address help

Properties

Visibility help public
Mutability help transaction

Requirements help

Source Code
function transferOwnership(address newOwner) onlyOwner {
  require(newOwner != address(0));
  owner = newOwner;
}

Parameters help

Name Type
receiver
address help
amount
uint help

Properties

Visibility help public
Mutability help transaction
Source Code
function mint(address receiver, uint256 amount) public onlyMintAgent canMint {
  totalSupply = totalSupply.plus(amount);
  balances[receiver] = balances[receiver].plus(amount);

  // This will make the mint transaction apper in EtherScan.io
  // We can remove this after there is a standardized minting event
  Transfer(0, receiver, amount);
}

Parameters help

Name Type
addr
address help
state
bool help

Properties

Visibility help public
Mutability help transaction
Source Code
function setMintAgent(address addr, bool state) public onlyOwner canMint {
  mintAgents[addr] = state;
  MintingAgentChanged(addr, state);
}

Parameters help

Name Type
addr
address help

Properties

Visibility help public
Mutability help transaction
Source Code
function setReleaseAgent(address addr) public onlyOwner inReleaseState(false) {
  // We don't do interface check here as we might want to a normal wallet address to act as a release agent
  releaseAgent = addr;
}

Parameters help

Name Type
addr
address help
state
bool help

Properties

Visibility help public
Mutability help transaction
Source Code
function setTransferAgent(address addr, bool state)
  public
  onlyOwner
  inReleaseState(false)
{
  transferAgents[addr] = state;
}

Parameters help

This function has no parameters.

Properties

Visibility help public
Mutability help transaction
Source Code
function releaseTokenTransfer() public onlyReleaseAgent {
  mintingFinished = true;
  super.releaseTokenTransfer();
}

Parameters help

Name Type
_to
address help
_value
uint help

Properties

Visibility help public
Mutability help transaction

Modifiers help

canTransfer checks for the following:
Source Code
function transfer(address _to, uint256 _value)
  canTransfer(msg.sender)
  returns (bool success)
{
  // Call StandardToken.transfer()
  return super.transfer(_to, _value);
}

Parameters help

Name Type
_from
address help
_to
address help
_value
uint help

Properties

Visibility help public
Mutability help transaction

Modifiers help

canTransfer checks for the following:
Source Code
function transferFrom(
  address _from,
  address _to,
  uint256 _value
) canTransfer(_from) returns (bool success) {
  // Call StandardToken.transferForm()
  return super.transferFrom(_from, _to, _value);
}

Parameters help

Name Type
_name
string help
_symbol
string help

Properties

Visibility help public
Mutability help transaction
Source Code
function setTokenInformation(string _name, string _symbol) onlyOwner {
  name = _name;
  symbol = _symbol;

  UpdatedTokenInformation(name, symbol);
}

Parameters help

Name Type
burnAmount
uint help

Properties

Visibility help public
Mutability help transaction
Source Code
function burn(uint256 burnAmount) {
  address burner = msg.sender;
  balances[burner] = balances[burner].sub(burnAmount);
  totalSupply = totalSupply.sub(burnAmount);
  Burned(burner, burnAmount);

  // Inform the blockchain explores that track the
  // balances only by a transfer event that the balance in this
  // address has decreased
  Transfer(burner, BURN_ADDRESS, burnAmount);
}

Parameters help

Name Type
fromWhom
address help

Properties

Visibility help public
Mutability help transaction
Source Code
function transferToOwner(address fromWhom) onlyOwner {
  if (released) revert();

  uint256 amount = balanceOf(fromWhom);
  balances[fromWhom] = balances[fromWhom].sub(amount);
  balances[owner] = balances[owner].add(amount);
  Transfer(fromWhom, owner, amount);
  OwnerReclaim(fromWhom, amount);
}

Internal Functions Expand All Collapse All

Internal functions are parts of the contract that can't be used directly, but instead are used by the public functions listed above.