ERC20
This contract is an ERC20 token.
Name
PILLAR
Symbol
PLR
Decimals
18
Total Supply
800,000,000 PLR
About
link
description
Pillar describes itself as the personal data and asset management platform that allows users to control what, when, and with whom their funds and information are shared. The project's mission is to empower individuals through ownership of their personal data using decentralized technologies.
The Pillar Wallet is intended to be an intuitive and social cryptocurrency management tool. It aims to allow users to build a contact book -- rather than searching for blockchain addresses -- so that sending assets is as easy as sending a message. It stores users' entire transaction history, provides real-time notifications on all activity, offers 24/7 in-app support, and an end-to-end encrypted chat function. The next step is smart contract based, recoverable accounts, integrated with exchanges and token swap platforms. It aims to provide free, instant and private transactions via off-chain payment channels.
As a native token, PLR powers the platform and is used for payments, services, providing access to the Pillar Payment network, and serves as a usage fee benchmark. Pillar users will be able to operate the wallet platform, manage assets and identity, transact with other users, access enhanced functionality, open payment channels, exchange supported synthetic assets, and cover network fees using only the PLR token.
Stats
Public Functions
17
Event Types
5
Code Size
18,244 bytes
Library Use
Uses SafeMath for uint.
Events (5) keyboard_arrow_up
Functions
transferOwnership keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
Source Code
function transferOwnership(address newOwner) onlyOwner {
if (newOwner != address(0)) {
owner = newOwner;
}
}
balanceOf keyboard_arrow_up
transfer keyboard_arrow_up
Modifiers help
onlyPayloadSize checks for the following:
Source Code
function transfer(address _to, uint _value) onlyPayloadSize(2 * 32) {
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
Transfer(msg.sender, _to, _value);
}
allowance keyboard_arrow_up
transferFrom keyboard_arrow_up
Modifiers help
onlyPayloadSize checks for the following:
Source Code
function transferFrom(address _from, address _to, uint _value) onlyPayloadSize(3 * 32) {
var _allowance = allowed[_from][msg.sender];
// Check is not needed because sub(_allowance, _value) will already throw if this condition is not met
// if (_value > _allowance) throw;
balances[_to] = balances[_to].add(_value);
balances[_from] = balances[_from].sub(_value);
allowed[_from][msg.sender] = _allowance.sub(_value);
Transfer(_from, _to, _value);
}
approve keyboard_arrow_up
Requirements help
One or more of the following:
Source Code
function approve(address _spender, uint _value) {
// 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
if ((_value != 0) && (allowed[msg.sender][_spender] != 0)) throw;
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
}
constructor keyboard_arrow_up
purchase keyboard_arrow_up
Parameters help
This function has no parameters.
Modifiers help
isFundable checks for the following:
Requirements help
Source Code
function purchase() payable isFundable {
if(block.number < fundingStartBlock) throw;
if(block.number > fundingStopBlock) throw;
if(totalUsedTokens >= totalAvailableForSale) throw;
if (msg.value < tokenPrice) throw;
uint numTokens = msg.value.div(tokenPrice);
if(numTokens < 1) throw;
//transfer money to PillarTokenFactory MultisigWallet
pillarTokenFactory.transfer(msg.value);
uint tokens = numTokens.mul(1e18);
totalUsedTokens = totalUsedTokens.add(tokens);
if (totalUsedTokens > totalAvailableForSale) throw;
balances[msg.sender] = balances[msg.sender].add(tokens);
//fire the event notifying the transfer of tokens
Transfer(0, msg.sender, tokens);
}
numberOfTokensLeft keyboard_arrow_up
finalize keyboard_arrow_up
Parameters help
This function has no parameters.
Modifiers help
isFundable checks for the following:
onlyOwner checks for the following:
Requirements help
Source Code
function finalize() isFundable onlyOwner external {
if (block.number <= fundingStopBlock) throw;
if (totalUsedTokens < minTokensForSale) throw;
if(unsoldVault == address(0)) throw;
// switch funding mode off
fundingMode = false;
//Allot team tokens to a smart contract which will frozen for 9 months
teamAllocation = new TeamAllocation();
balances[address(teamAllocation)] = lockedTeamAllocationTokens;
//allocate unsold tokens to iced storage
uint totalUnSold = numberOfTokensLeft();
if(totalUnSold > 0) {
unsoldTokens = new UnsoldAllocation(coldStorageYears,unsoldVault,totalUnSold);
balances[address(unsoldTokens)] = totalUnSold;
}
//transfer any balance available to Pillar Multisig Wallet
pillarTokenFactory.transfer(this.balance);
}
refund keyboard_arrow_up
Parameters help
This function has no parameters.
Modifiers help
isFundable checks for the following:
Requirements help
Source Code
function refund() isFundable external {
if(block.number <= fundingStopBlock) throw;
if(totalUsedTokens >= minTokensForSale) throw;
uint plrValue = balances[msg.sender];
if(plrValue == 0) throw;
balances[msg.sender] = 0;
uint ethValue = plrValue.mul(tokenPrice).div(1e18);
msg.sender.transfer(ethValue);
Refund(msg.sender, ethValue);
}
allocateForRefund keyboard_arrow_up
Parameters help
This function has no parameters.
Modifiers help
onlyOwner checks for the following:
Source Code
function allocateForRefund() external payable onlyOwner returns (uint){
//does nothing just accepts and stores the ether
MoneyAddedForRefund(msg.sender,msg.value,this.balance);
return this.balance;
}
allocateTokens keyboard_arrow_up
Modifiers help
isNotFundable checks for the following:
onlyOwner checks for the following:
Requirements help
Source Code
function allocateTokens(address _to,uint _tokens) isNotFundable onlyOwner external {
uint numOfTokens = _tokens.mul(1e18);
totalPresale = totalPresale.add(numOfTokens);
if(totalPresale > maxPresaleTokens) throw;
balances[_to] = balances[_to].add(numOfTokens);
}
unPauseTokenSale keyboard_arrow_up
pauseTokenSale keyboard_arrow_up
startTokenSale keyboard_arrow_up
Modifiers help
onlyOwner checks for the following:
isNotFundable checks for the following:
Requirements help
Source Code
function startTokenSale(uint _fundingStartBlock, uint _fundingStopBlock) onlyOwner isNotFundable external returns (bool){
if(_fundingStopBlock <= _fundingStartBlock) throw;
fundingStartBlock = _fundingStartBlock;
fundingStopBlock = _fundingStopBlock;
fundingMode = true;
return fundingMode;
}