Transaction Hash:
Block:
5218905 at Mar-08-2018 02:09:18 PM +UTC
Transaction Fee:
0.000720063 ETH
$1.35
Gas Used:
80,007 Gas / 9 Gwei
Emitted Events:
64 |
WhiteListed.Whitelisted( addr=0xB81ce904...5Bcfe0b29, whitelistedCount=13029, isWhitelisted=True, batch=0, weiAllocation=1000000000000000000000000000000000000000 )
|
Account State Difference:
Address | Before | After | State Difference | ||
---|---|---|---|---|---|
0x52bc44d5...b7d7bE3b5
Miner
| (Nanopool) | 4,083.045149360415797478 Eth | 4,083.045869423415797478 Eth | 0.000720063 | |
0xe33fce83...7fDCD10DF |
1.90594543675 Eth
Nonce: 32
|
1.90522537375 Eth
Nonce: 33
| 0.000720063 | ||
0xf4a26409...befa34084 |
Execution Trace
WhiteListed.addWhiteListed( addrs=[0xB81ce9042ce15C8909dfd75207789255Bcfe0b29], batches=[0], weiAllocation=[1000000000000000000000000000000000000000] )
addWhiteListed[WhiteListed (ln:126)]
Whitelisted[WhiteListed (ln:136)]
pragma solidity ^0.4.18; // ---------------------------------------------------------------------------- // WhiteListed - SENC Token Sale Whitelisting Contract // // Copyright (c) 2018 InfoCorp Technologies Pte Ltd. // http://www.sentinel-chain.org/ // // The MIT Licence. // ---------------------------------------------------------------------------- // ---------------------------------------------------------------------------- // The SENC Token Sale Whitelist Contract is designed to facilitate the features: // // 1. Track whitelisted users and allocations // Each whitelisted user is tracked by its wallet address as well as the maximum // SENC allocation it can purchase. // // 2. Track batches // To prevent a gas war, each contributor will be assigned a batch number that // corresponds to the time that the contributor can start purchasing. // // 3. Whitelist Operators // A primary and a secondary operators can be assigned to facilitate the management // of the whiteList. // // ---------------------------------------------------------------------------- contract Ownable { address public owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev The Ownable constructor sets the original `owner` of the contract to the sender * account. */ function Ownable() public { owner = msg.sender; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(msg.sender == owner); _; } /** * @dev Allows the current owner to transfer control of the contract to a newOwner. * @param newOwner The address to transfer ownership to. */ function transferOwnership(address newOwner) public onlyOwner { require(newOwner != address(0)); OwnershipTransferred(owner, newOwner); owner = newOwner; } } contract OperatableBasic { function setPrimaryOperator (address addr) public; function setSecondaryOperator (address addr) public; function isPrimaryOperator(address addr) public view returns (bool); function isSecondaryOperator(address addr) public view returns (bool); } contract Operatable is Ownable, OperatableBasic { address public primaryOperator; address public secondaryOperator; modifier canOperate() { require(msg.sender == primaryOperator || msg.sender == secondaryOperator || msg.sender == owner); _; } function Operatable() public { primaryOperator = owner; secondaryOperator = owner; } function setPrimaryOperator (address addr) public onlyOwner { primaryOperator = addr; } function setSecondaryOperator (address addr) public onlyOwner { secondaryOperator = addr; } function isPrimaryOperator(address addr) public view returns (bool) { return (addr == primaryOperator); } function isSecondaryOperator(address addr) public view returns (bool) { return (addr == secondaryOperator); } } contract WhiteListedBasic is OperatableBasic { function addWhiteListed(address[] addrs, uint[] batches, uint[] weiAllocation) external; function getAllocated(address addr) public view returns (uint); function getBatchNumber(address addr) public view returns (uint); function getWhiteListCount() public view returns (uint); function isWhiteListed(address addr) public view returns (bool); function removeWhiteListed(address addr) public; function setAllocation(address[] addrs, uint[] allocation) public; function setBatchNumber(address[] addrs, uint[] batch) public; } contract WhiteListed is Operatable, WhiteListedBasic { struct Batch { bool isWhitelisted; uint weiAllocated; uint batchNumber; } uint public count; mapping (address => Batch) public batchMap; event Whitelisted(address indexed addr, uint whitelistedCount, bool isWhitelisted, uint indexed batch, uint weiAllocation); function addWhiteListed(address[] addrs, uint[] batches, uint[] weiAllocation) external canOperate { require(addrs.length == batches.length); require(addrs.length == weiAllocation.length); for (uint i = 0; i < addrs.length; i++) { Batch storage batch = batchMap[addrs[i]]; if (batch.isWhitelisted != true) { batch.isWhitelisted = true; batch.weiAllocated = weiAllocation[i]; batch.batchNumber = batches[i]; count++; Whitelisted(addrs[i], count, true, batches[i], weiAllocation[i]); } } } function getAllocated(address addr) public view returns (uint) { return batchMap[addr].weiAllocated; } function getBatchNumber(address addr) public view returns (uint) { return batchMap[addr].batchNumber; } function getWhiteListCount() public view returns (uint) { return count; } function isWhiteListed(address addr) public view returns (bool) { return batchMap[addr].isWhitelisted; } function removeWhiteListed(address addr) public canOperate { Batch storage batch = batchMap[addr]; require(batch.isWhitelisted == true); batch.isWhitelisted = false; count--; Whitelisted(addr, count, false, batch.batchNumber, batch.weiAllocated); } function setAllocation(address[] addrs, uint[] weiAllocation) public canOperate { require(addrs.length == weiAllocation.length); for (uint i = 0; i < addrs.length; i++) { if (batchMap[addrs[i]].isWhitelisted == true) { batchMap[addrs[i]].weiAllocated = weiAllocation[i]; } } } function setBatchNumber(address[] addrs, uint[] batch) public canOperate { require(addrs.length == batch.length); for (uint i = 0; i < addrs.length; i++) { if (batchMap[addrs[i]].isWhitelisted == true) { batchMap[addrs[i]].batchNumber = batch[i]; } } } }