Address Contract Partially Verified
Address
0x5732046A883704404F284Ce41FfADd5b007FD668
Balance
0 ETH
Nonce
1
Code Size
3808 bytes
Creator
0x004A1e27...18Ff at tx 0x124c7bf7...71ef8d
Indexed Transactions
2 (24,443,580 → 24,443,597)
Gas Used (indexed)
92,738
Contract Bytecode
3808 bytes
0x60606040526004361061015e5763ffffffff7c010000000000000000000000000000000000000000000000000000000060003504166306fdde038114610163578063095ea7b3146101ed57806318160ddd14610223578063188214001461024857806323452b9c1461025b57806323b872dd1461026e5780632a905318146102965780632f54bf6e146102a9578063313ce567146102c85780633c54caa5146102f15780634bb278f3146103045780635b7f415c14610317578063707789c51461032a57806370a082311461034957806374c950fb146103685780638bc04eb71461037b5780638da5cb5b1461038e5780638ea64376146103bd57806395d89b41146103d0578063a9059cbb146103e3578063adcf59ee14610405578063b3f05b9714610424578063c0b6f56114610437578063d153b60c14610456578063dd62ed3e14610469578063e71a78111461048e578063ef326c6d146104a1575b600080fd5b341561016e57600080fd5b6101766104c0565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156101b257808201518382015260200161019a565b50505050905090810190601f1680156101df5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b34156101f857600080fd5b61020f600160a060020a0360043516602435610569565b604051901515815260200160405180910390f35b341561022e57600080fd5b6102366105d5565b60405190815260200160405180910390f35b341561025357600080fd5b6101766105db565b341561026657600080fd5b61020f610612565b341561027957600080fd5b61020f600160a060020a0360043581169060243516604435610694565b34156102a157600080fd5b6101766106b3565b34156102b457600080fd5b61020f600160a060020a03600435166106ea565b34156102d357600080fd5b6102db6106fe565b60405160ff909116815260200160405180910390f35b34156102fc57600080fd5b61020f610707565b341561030f57600080fd5b61020f61083e565b341561032257600080fd5b6102db6108c4565b341561033557600080fd5b61020f600160a060020a03600435166108c9565b341561035457600080fd5b610236600160a060020a0360043516610981565b341561037357600080fd5b61023661099c565b341561038657600080fd5b6102366109ac565b341561039957600080fd5b6103a16109b8565b604051600160a060020a03909116815260200160405180910390f35b34156103c857600080fd5b6103a16109c7565b34156103db57600080fd5b6101766109d6565b34156103ee57600080fd5b61020f600160a060020a0360043516602435610a49565b341561041057600080fd5b61020f600160a060020a0360043516610a66565b341561042f57600080fd5b61020f610a86565b341561044257600080fd5b61020f600160a060020a0360043516610a96565b341561046157600080fd5b6103a1610b63565b341561047457600080fd5b610236600160a060020a0360043581169060243516610b72565b341561049957600080fd5b61020f610b9d565b34156104ac57600080fd5b61020f600160a060020a0360043516610c25565b6104c8610ea2565b60008054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055e5780601f106105335761010080835404028352916020019161055e565b820191906000526020600020905b81548152906001019060200180831161054157829003601f168201915b505050505090505b90565b600160a060020a03338116600081815260056020908152604080832094871680845294909152808220859055909291907f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259085905190815260200160405180910390a350600192915050565b60035490565b60408051908101604052600e81527f426c757a656c6c6520546f6b656e000000000000000000000000000000000000602082015281565b600061061d336106ea565b151560011461062b57600080fd5b600754600160a060020a0316151561064557506001610566565b6007805473ffffffffffffffffffffffffffffffffffffffff191690557f670699162ea7ba4de638b5a57c2148aed9ee8bd69740a5e6a7db727e3886c88b60405160405180910390a150600190565b60006106a03384610c52565b6106ab848484610ca9565b949350505050565b60408051908101604052600381527f424c5a0000000000000000000000000000000000000000000000000000000000602082015281565b600654600160a060020a0390811691161490565b60025460ff1690565b6000806000610715336106ea565b151560011461072357600080fd5b30915061072f82610981565b90508015156107415760009250610839565b600160a060020a03821660009081526004602052604090205461076a908263ffffffff610dbc16565b600160a060020a0380841660009081526004602052604080822093909355600654909116815220546107a2908263ffffffff610dd116565b60068054600160a060020a0390811660009081526004602052604090819020939093559054811691908416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9084905190815260200160405180910390a37fbce3cc672456937708767d1642a17cacb1962753bd5cff46c8dbd377906a6b4b8160405190815260200160405180910390a1600192505b505090565b6000610849336106ea565b151560011461085757600080fd5b60085460a060020a900460ff161561086e57600080fd5b6008805474ff0000000000000000000000000000000000000000191660a060020a1790557f6823b073d48d6e3a7d385eeb601452d680e74bb46afe3255a7d778f3a9b1768160405160405180910390a150600190565b601281565b60006108d4336106ea565b15156001146108e257600080fd5b600654600160a060020a03838116911614156108fd57600080fd5b30600160a060020a031682600160a060020a03161415151561091e57600080fd5b6008805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038481169190911791829055167f06171a5d6c06d67b0cfa679c07db377a27d1170797663fd98d395229d8c3650860405160405180910390a2506001919050565b600160a060020a031660009081526004602052604090205490565b6b019d971e4fe8401e7400000081565b670de0b6b3a764000081565b600654600160a060020a031681565b600854600160a060020a031681565b6109de610ea2565b60018054600181600116156101000203166002900480601f01602080910402602001604051908101604052809291908181526020018280546001816001161561010002031660029004801561055e5780601f106105335761010080835404028352916020019161055e565b6000610a553384610c52565b610a5f8383610de3565b9392505050565b6000610a71826106ea565b80610a805750610a8082610c25565b92915050565b60085460a060020a900460ff1681565b6000610aa1336106ea565b1515600114610aaf57600080fd5b600160a060020a0382161515610ac457600080fd5b30600160a060020a031682600160a060020a031614151515610ae557600080fd5b600654600160a060020a0383811691161415610b0057600080fd5b6007805473ffffffffffffffffffffffffffffffffffffffff1916600160a060020a038481169190911791829055167f20f5afdf40bf7b43c89031a5d4369a30b159e512d164aa46124bcb706b4a1caf60405160405180910390a2506001919050565b600754600160a060020a031681565b600160a060020a03918216600090815260056020908152604080832093909416825291909152205490565b60075460009033600160a060020a03908116911614610bbb57600080fd5b60068054600160a060020a0333811673ffffffffffffffffffffffffffffffffffffffff19928316179283905560078054909216909155167f624adc4c72536289dd9d5439ccdeccd8923cb9af95fb626b21935447c77b840760405160405180910390a250600190565b600854600090600160a060020a031615801590610a80575050600854600160a060020a0390811691161490565b600160a060020a0381161515610c6757600080fd5b60085460a060020a900460ff1615610c7e57610ca5565b610c87816106ea565b15610c9157610ca5565b610c9a82610a66565b1515610ca557600080fd5b5050565b600160a060020a038316600090815260046020526040812054610cd2908363ffffffff610dbc16565b600160a060020a0380861660009081526004602090815260408083209490945560058152838220339093168252919091522054610d15908363ffffffff610dbc16565b600160a060020a0380861660009081526005602090815260408083203385168452825280832094909455918616815260049091522054610d5b908363ffffffff610dd116565b600160a060020a03808516600081815260046020526040908190209390935591908616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a35060019392505050565b600081831015610dcb57600080fd5b50900390565b600082820183811015610a5f57600080fd5b600160a060020a033316600090815260046020526040812054610e0c908363ffffffff610dbc16565b600160a060020a033381166000908152600460205260408082209390935590851681522054610e41908363ffffffff610dd116565b600160a060020a0380851660008181526004602052604090819020939093559133909116907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9085905190815260200160405180910390a350600192915050565b602060405190810160405260008152905600a165627a7a72305820bc8b6478ee59585031c79969344b9a113852e7a98d20f2fba1d29901ecd0d4e50029
Verified Source Code Partial Match
Compiler: v0.4.19+commit.c4cbbb05
Optimization: Yes (200 runs)
BluzelleToken.sol 472 lines
pragma solidity ^0.4.18;
// ----------------------------------------------------------------------------
// Owned - Ownership model with 2 phase transfers
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------
// Implements a simple ownership model with 2-phase transfer.
contract Owned {
address public owner;
address public proposedOwner;
event OwnershipTransferInitiated(address indexed _proposedOwner);
event OwnershipTransferCompleted(address indexed _newOwner);
event OwnershipTransferCanceled();
function Owned() public
{
owner = msg.sender;
}
modifier onlyOwner() {
require(isOwner(msg.sender) == true);
_;
}
function isOwner(address _address) public view returns (bool) {
return (_address == owner);
}
function initiateOwnershipTransfer(address _proposedOwner) public onlyOwner returns (bool) {
require(_proposedOwner != address(0));
require(_proposedOwner != address(this));
require(_proposedOwner != owner);
proposedOwner = _proposedOwner;
OwnershipTransferInitiated(proposedOwner);
return true;
}
function cancelOwnershipTransfer() public onlyOwner returns (bool) {
if (proposedOwner == address(0)) {
return true;
}
proposedOwner = address(0);
OwnershipTransferCanceled();
return true;
}
function completeOwnershipTransfer() public returns (bool) {
require(msg.sender == proposedOwner);
owner = msg.sender;
proposedOwner = address(0);
OwnershipTransferCompleted(owner);
return true;
}
}
// ----------------------------------------------------------------------------
// OpsManaged - Implements an Owner and Ops Permission Model
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------
//
// Implements a security model with owner and ops.
//
contract OpsManaged is Owned {
address public opsAddress;
event OpsAddressUpdated(address indexed _newAddress);
function OpsManaged() public
Owned()
{
}
modifier onlyOwnerOrOps() {
require(isOwnerOrOps(msg.sender));
_;
}
function isOps(address _address) public view returns (bool) {
return (opsAddress != address(0) && _address == opsAddress);
}
function isOwnerOrOps(address _address) public view returns (bool) {
return (isOwner(_address) || isOps(_address));
}
function setOpsAddress(address _newOpsAddress) public onlyOwner returns (bool) {
require(_newOpsAddress != owner);
require(_newOpsAddress != address(this));
opsAddress = _newOpsAddress;
OpsAddressUpdated(opsAddress);
return true;
}
}
// ----------------------------------------------------------------------------
// Math - General Math Utility Library
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------
library Math {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 r = a + b;
require(r >= a);
return r;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
require(a >= b);
return a - b;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 r = a * b;
require(a == 0 || r / a == b);
return r;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return a / b;
}
}
// ----------------------------------------------------------------------------
// ERC20Interface - Standard ERC20 Interface Definition
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// Based on the final ERC20 specification at:
// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-20-token-standard.md
// ----------------------------------------------------------------------------
contract ERC20Interface {
event Transfer(address indexed _from, address indexed _to, uint256 _value);
event Approval(address indexed _owner, address indexed _spender, uint256 _value);
function name() public view returns (string);
function symbol() public view returns (string);
function decimals() public view returns (uint8);
function totalSupply() public view returns (uint256);
function balanceOf(address _owner) public view returns (uint256 balance);
function allowance(address _owner, address _spender) public view returns (uint256 remaining);
function transfer(address _to, uint256 _value) public returns (bool success);
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success);
function approve(address _spender, uint256 _value) public returns (bool success);
}
// ----------------------------------------------------------------------------
// ERC20Token - Standard ERC20 Implementation
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------
contract ERC20Token is ERC20Interface {
using Math for uint256;
string private tokenName;
string private tokenSymbol;
uint8 private tokenDecimals;
uint256 internal tokenTotalSupply;
mapping(address => uint256) internal balances;
mapping(address => mapping (address => uint256)) allowed;
function ERC20Token(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply, address _initialTokenHolder) public {
tokenName = _name;
tokenSymbol = _symbol;
tokenDecimals = _decimals;
tokenTotalSupply = _totalSupply;
// The initial balance of tokens is assigned to the given token holder address.
balances[_initialTokenHolder] = _totalSupply;
// Per EIP20, the constructor should fire a Transfer event if tokens are assigned to an account.
Transfer(0x0, _initialTokenHolder, _totalSupply);
}
function name() public view returns (string) {
return tokenName;
}
function symbol() public view returns (string) {
return tokenSymbol;
}
function decimals() public view returns (uint8) {
return tokenDecimals;
}
function totalSupply() public view returns (uint256) {
return tokenTotalSupply;
}
function balanceOf(address _owner) public view returns (uint256 balance) {
return balances[_owner];
}
function allowance(address _owner, address _spender) public view returns (uint256 remaining) {
return allowed[_owner][_spender];
}
function transfer(address _to, uint256 _value) public returns (bool success) {
balances[msg.sender] = balances[msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
Transfer(msg.sender, _to, _value);
return true;
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
balances[_from] = balances[_from].sub(_value);
allowed[_from][msg.sender] = allowed[_from][msg.sender].sub(_value);
balances[_to] = balances[_to].add(_value);
Transfer(_from, _to, _value);
return true;
}
function approve(address _spender, uint256 _value) public returns (bool success) {
allowed[msg.sender][_spender] = _value;
Approval(msg.sender, _spender, _value);
return true;
}
}
// ----------------------------------------------------------------------------
// Finalizable - Basic implementation of the finalization pattern
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------
contract Finalizable is Owned {
bool public finalized;
event Finalized();
function Finalizable() public
Owned()
{
finalized = false;
}
function finalize() public onlyOwner returns (bool) {
require(!finalized);
finalized = true;
Finalized();
return true;
}
}
// ----------------------------------------------------------------------------
// FinalizableToken - Extension to ERC20Token with ops and finalization
// Enuma Blockchain Platform
//
// Copyright (c) 2017 Enuma Technologies.
// https://www.enuma.io/
// ----------------------------------------------------------------------------
//
// ERC20 token with the following additions:
// 1. Owner/Ops Ownership
// 2. Finalization
//
contract FinalizableToken is ERC20Token, OpsManaged, Finalizable {
using Math for uint256;
// The constructor will assign the initial token supply to the owner (msg.sender).
function FinalizableToken(string _name, string _symbol, uint8 _decimals, uint256 _totalSupply) public
ERC20Token(_name, _symbol, _decimals, _totalSupply, msg.sender)
OpsManaged()
Finalizable()
{
}
function transfer(address _to, uint256 _value) public returns (bool success) {
validateTransfer(msg.sender, _to);
return super.transfer(_to, _value);
}
function transferFrom(address _from, address _to, uint256 _value) public returns (bool success) {
validateTransfer(msg.sender, _to);
return super.transferFrom(_from, _to, _value);
}
function validateTransfer(address _sender, address _to) private view {
require(_to != address(0));
// Once the token is finalized, everybody can transfer tokens.
if (finalized) {
return;
}
if (isOwner(_to)) {
return;
}
// Before the token is finalized, only owner and ops are allowed to initiate transfers.
// This allows them to move tokens while the sale is still ongoing for example.
require(isOwnerOrOps(_sender));
}
}
// ----------------------------------------------------------------------------
// BluzelleTokenConfig - Token Contract Configuration
//
// Copyright (c) 2017 Bluzelle Networks Pte Ltd.
// http://www.bluzelle.com/
//
// The MIT Licence.
// ----------------------------------------------------------------------------
contract BluzelleTokenConfig {
string public constant TOKEN_SYMBOL = "BLZ";
string public constant TOKEN_NAME = "Bluzelle Token";
uint8 public constant TOKEN_DECIMALS = 18;
uint256 public constant DECIMALSFACTOR = 10**uint256(TOKEN_DECIMALS);
uint256 public constant TOKEN_TOTALSUPPLY = 500000000 * DECIMALSFACTOR;
}
// ----------------------------------------------------------------------------
// BluzelleToken - ERC20 Compatible Token
//
// Copyright (c) 2017 Bluzelle Networks Pte Ltd.
// http://www.bluzelle.com/
//
// The MIT Licence.
// ----------------------------------------------------------------------------
// ----------------------------------------------------------------------------
// The Bluzelle token is a standard ERC20 token with the addition of a few
// concepts such as:
//
// 1. Finalization
// Tokens can only be transfered by contributors after the contract has
// been finalized.
//
// 2. Ops Managed Model
// In addition to owner, there is a ops role which is used during the sale,
// by the sale contract, in order to transfer tokens.
// ----------------------------------------------------------------------------
contract BluzelleToken is FinalizableToken, BluzelleTokenConfig {
event TokensReclaimed(uint256 _amount);
function BluzelleToken() public
FinalizableToken(TOKEN_NAME, TOKEN_SYMBOL, TOKEN_DECIMALS, TOKEN_TOTALSUPPLY)
{
}
// Allows the owner to reclaim tokens that have been sent to the token address itself.
function reclaimTokens() public onlyOwner returns (bool) {
address account = address(this);
uint256 amount = balanceOf(account);
if (amount == 0) {
return false;
}
balances[account] = balances[account].sub(amount);
balances[owner] = balances[owner].add(amount);
Transfer(account, owner, amount);
TokensReclaimed(amount);
return true;
}
}
Read Contract
DECIMALSFACTOR 0x8bc04eb7 → uint256
TOKEN_DECIMALS 0x5b7f415c → uint8
TOKEN_NAME 0x18821400 → string
TOKEN_SYMBOL 0x2a905318 → string
TOKEN_TOTALSUPPLY 0x74c950fb → uint256
allowance 0xdd62ed3e → uint256
balanceOf 0x70a08231 → uint256
decimals 0x313ce567 → uint8
finalized 0xb3f05b97 → bool
isOps 0xef326c6d → bool
isOwner 0x2f54bf6e → bool
isOwnerOrOps 0xadcf59ee → bool
name 0x06fdde03 → string
opsAddress 0x8ea64376 → address
owner 0x8da5cb5b → address
proposedOwner 0xd153b60c → address
symbol 0x95d89b41 → string
totalSupply 0x18160ddd → uint256
Write Contract 9 functions
These functions modify contract state and require a wallet transaction to execute.
approve 0x095ea7b3
address _spender
uint256 _value
returns: bool
cancelOwnershipTransfer 0x23452b9c
No parameters
returns: bool
completeOwnershipTransfer 0xe71a7811
No parameters
returns: bool
finalize 0x4bb278f3
No parameters
returns: bool
initiateOwnershipTransfer 0xc0b6f561
address _proposedOwner
returns: bool
reclaimTokens 0x3c54caa5
No parameters
returns: bool
setOpsAddress 0x707789c5
address _newOpsAddress
returns: bool
transfer 0xa9059cbb
address _to
uint256 _value
returns: bool
transferFrom 0x23b872dd
address _from
address _to
uint256 _value
returns: bool
Top Interactions
| Address | Txns | Sent | Received |
|---|---|---|---|
| 0xBa6Bd335...5272 | 1 | 1 | |
| 0x6afBB574...8e28 | 1 | 1 |
Token Balances (1)
View Transfers →Recent Transactions
|
| Hash | Block | Age | From/To | Value | |
|---|---|---|---|---|---|
| 0x94b7e666...60de0e | 24,443,597 | IN | 0x6afBB574...8e28 | 0 ETH | |
| 0xf872ea85...3c5c47 | 24,443,580 | IN | 0xBa6Bd335...5272 | 0 ETH |