ERC-20
Others
Overview
Max Total Supply
848,788.16943 BTE
Holders
706 (0.00%)
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract (WITH 8 Decimals)
Balance
33.40578644 BTEValue
$0.00Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Bitcoineum
Compiler Version
v0.4.13+commit.fb4cb1a
Optimization Enabled:
Yes with 0 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2017-08-02 */ pragma solidity ^0.4.13; library SafeMath { function mul(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a * b; assert(a == 0 || c / a == b); return c; } function div(uint256 a, uint256 b) internal returns (uint256) { // assert(b > 0); // Solidity automatically throws when dividing by 0 uint256 c = a / b; // assert(a == b * c + a % b); // There is no case in which this doesn't hold return c; } function sub(uint256 a, uint256 b) internal returns (uint256) { assert(b <= a); return a - b; } function add(uint256 a, uint256 b) internal returns (uint256) { uint256 c = a + b; assert(c >= a); return c; } } contract ReentrancyGuard { /** * @dev We use a single lock for the whole contract. */ bool private rentrancy_lock = false; /** * @dev Prevents a contract from calling itself, directly or indirectly. * @notice If you mark a function `nonReentrant`, you should also * mark it `external`. Calling one nonReentrant function from * another is not supported. Instead, you can implement a * `private` function doing the actual work, and a `external` * wrapper marked as `nonReentrant`. */ modifier nonReentrant() { require(!rentrancy_lock); rentrancy_lock = true; _; rentrancy_lock = false; } } contract ERC20Basic { uint256 public totalSupply; function balanceOf(address who) constant returns (uint256); function transfer(address to, uint256 value); event Transfer(address indexed from, address indexed to, uint256 value); } contract ERC20 is ERC20Basic { function allowance(address owner, address spender) constant returns (uint256); function transferFrom(address from, address to, uint256 value); function approve(address spender, uint256 value); event Approval(address indexed owner, address indexed spender, uint256 value); } contract BasicToken is ERC20Basic { using SafeMath for uint256; mapping(address => uint256) balances; /** * @dev transfer token for a specified address * @param _to The address to transfer to. * @param _value The amount to be transferred. */ function transfer(address _to, uint256 _value) { balances[msg.sender] = balances[msg.sender].sub(_value); balances[_to] = balances[_to].add(_value); Transfer(msg.sender, _to, _value); } /** * @dev Gets the balance of the specified address. * @param _owner The address to query the the balance of. * @return An uint256 representing the amount owned by the passed address. */ function balanceOf(address _owner) constant returns (uint256 balance) { return balances[_owner]; } } contract StandardToken is ERC20, BasicToken { mapping (address => mapping (address => uint256)) allowed; /** * @dev Transfer tokens from one address to another * @param _from address The address which you want to send tokens from * @param _to address The address which you want to transfer to * @param _value uint256 the amout of tokens to be transfered */ function transferFrom(address _from, address _to, uint256 _value) { 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); } /** * @dev Aprove the passed address to spend the specified amount of tokens on behalf of msg.sender. * @param _spender The address which will spend the funds. * @param _value The amount of tokens to be spent. */ function approve(address _spender, uint256 _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) require(allowed[msg.sender][_spender] == 0); allowed[msg.sender][_spender] = _value; Approval(msg.sender, _spender, _value); } /** * @dev Function to check the amount of tokens that an owner allowed to a spender. * @param _owner address The address which owns the funds. * @param _spender address The address which will spend the funds. * @return A uint256 specifing the amount of tokens still avaible for the spender. */ function allowance(address _owner, address _spender) constant returns (uint256 remaining) { return allowed[_owner][_spender]; } } contract Transmutable { function transmute(address to, uint256 value) returns (bool, uint256); event Transmuted(address indexed who, address baseContract, address transmutedContract, uint256 sourceQuantity, uint256 destQuantity); } // Contracts that can be transmuted to should implement this contract TransmutableInterface { function transmuted(uint256 _value) returns (bool, uint256); } contract ERC20Mineable is StandardToken, ReentrancyGuard { uint256 public constant divisible_units = 10000000; uint256 public constant decimals = 8; uint256 public constant initial_reward = 100; /** totalSupply in StandardToken refers to currently available supply * maximumSupply refers to the cap on mining. * When mining is finished totalSupply == maximumSupply */ uint256 public maximumSupply; // Current mining difficulty in Wei uint256 public currentDifficultyWei; // Minimum difficulty uint256 public minimumDifficultyThresholdWei; /** Block creation rate as number of Ethereum blocks per mining cycle * 10 minutes at 12 seconds a block would be an internal block * generated every 50 Ethereum blocks */ uint256 public blockCreationRate; /* difficultyAdjustmentPeriod should be every two weeks, or * 2016 internal blocks. */ uint256 public difficultyAdjustmentPeriod; /* When was the last time we did a difficulty adjustment. * In case mining ceases for indeterminate duration */ uint256 public lastDifficultyAdjustmentEthereumBlock; // Scale multiplier limit for difficulty adjustment uint256 public constant difficultyScaleMultiplierLimit = 4; // Total blocks mined helps us calculate the current reward uint256 public totalBlocksMined; // Reward adjustment period in Bitcoineum native blocks uint256 public rewardAdjustmentPeriod; // Total amount of Wei put into mining during current period uint256 public totalWeiCommitted; // Total amount of Wei expected for this mining period uint256 public totalWeiExpected; // Where to burn Ether address public burnAddress; /** Each block is created on a mining attempt if * it does not already exist. * this keeps track of the target difficulty at the time of creation */ struct InternalBlock { uint256 targetDifficultyWei; uint256 blockNumber; uint256 totalMiningWei; uint256 totalMiningAttempts; uint256 currentAttemptOffset; bool payed; address payee; bool isCreated; } /** Mining attempts are given a projected offset to minimize * keyspace overlap to increase fairness by reducing the redemption * race condition * This does not remove the possibility that two or more miners will * be competing for the same award, especially if subsequent increases in * wei from a single miner increase overlap */ struct MiningAttempt { uint256 projectedOffset; uint256 value; bool isCreated; } // Each guess gets assigned to a block mapping (uint256 => InternalBlock) public blockData; mapping (uint256 => mapping (address => MiningAttempt)) public miningAttempts; // Utility related function resolve_block_hash(uint256 _blockNum) public constant returns (bytes32) { return block.blockhash(_blockNum); } function current_external_block() public constant returns (uint256) { return block.number; } function external_to_internal_block_number(uint256 _externalBlockNum) public constant returns (uint256) { // blockCreationRate is > 0 return _externalBlockNum / blockCreationRate; } // For the test harness verification function get_internal_block_number() public constant returns (uint256) { return external_to_internal_block_number(current_external_block()); } // Initial state related /** Dapps need to grab the initial state of the contract * in order to properly initialize mining or tracking * this is a single atomic function for getting state * rather than scattering it across multiple public calls * also returns the current blocks parameters * or default params if it hasn't been created yet * This is only called externally */ function getContractState() external constant returns (uint256, // currentDifficultyWei uint256, // minimumDifficultyThresholdWei uint256, // blockNumber uint256, // blockCreationRate uint256, // difficultyAdjustmentPeriod uint256, // rewardAdjustmentPeriod uint256, // lastDifficultyAdustmentEthereumBlock uint256, // totalBlocksMined uint256, // totalWeiCommitted uint256, // totalWeiExpected uint256, // b.targetDifficultyWei uint256, // b.totalMiningWei uint256 // b.currentAttemptOffset ) { InternalBlock memory b; uint256 _blockNumber = external_to_internal_block_number(current_external_block()); if (!blockData[_blockNumber].isCreated) { b = InternalBlock( {targetDifficultyWei: currentDifficultyWei, blockNumber: _blockNumber, totalMiningWei: 0, totalMiningAttempts: 0, currentAttemptOffset: 0, payed: false, payee: 0, isCreated: true }); } else { b = blockData[_blockNumber]; } return (currentDifficultyWei, minimumDifficultyThresholdWei, _blockNumber, blockCreationRate, difficultyAdjustmentPeriod, rewardAdjustmentPeriod, lastDifficultyAdjustmentEthereumBlock, totalBlocksMined, totalWeiCommitted, totalWeiExpected, b.targetDifficultyWei, b.totalMiningWei, b.currentAttemptOffset); } function getBlockData(uint256 _blockNum) public constant returns (uint256, uint256, uint256, uint256, uint256, bool, address, bool) { InternalBlock memory iBlock = blockData[_blockNum]; return (iBlock.targetDifficultyWei, iBlock.blockNumber, iBlock.totalMiningWei, iBlock.totalMiningAttempts, iBlock.currentAttemptOffset, iBlock.payed, iBlock.payee, iBlock.isCreated); } function getMiningAttempt(uint256 _blockNum, address _who) public constant returns (uint256, uint256, bool) { if (miningAttempts[_blockNum][_who].isCreated) { return (miningAttempts[_blockNum][_who].projectedOffset, miningAttempts[_blockNum][_who].value, miningAttempts[_blockNum][_who].isCreated); } else { return (0, 0, false); } } // Mining Related modifier blockCreated(uint256 _blockNum) { require(blockData[_blockNum].isCreated); _; } modifier blockRedeemed(uint256 _blockNum) { require(_blockNum != current_external_block()); /* Should capture if the blockdata is payed * or if it does not exist in the blockData mapping */ require(blockData[_blockNum].isCreated); require(!blockData[_blockNum].payed); _; } modifier initBlock(uint256 _blockNum) { require(_blockNum != current_external_block()); if (!blockData[_blockNum].isCreated) { // This is a new block, adjust difficulty adjust_difficulty(); // Create new block for tracking blockData[_blockNum] = InternalBlock( {targetDifficultyWei: currentDifficultyWei, blockNumber: _blockNum, totalMiningWei: 0, totalMiningAttempts: 0, currentAttemptOffset: 0, payed: false, payee: 0, isCreated: true }); } _; } modifier isValidAttempt() { /* If the Ether for this mining attempt is less than minimum * 0.0000001 % of total difficulty */ uint256 minimum_wei = currentDifficultyWei / divisible_units; require (msg.value >= minimum_wei); /* Let's bound the value to guard against potential overflow * i.e max int, or an underflow bug * This is a single attempt */ require(msg.value <= (1000000 ether)); _; } modifier alreadyMined(uint256 blockNumber, address sender) { require(blockNumber != current_external_block()); /* We are only going to allow one mining attempt per block per account * This prevents stuffing and make it easier for us to track boundaries */ // This user already made a mining attempt for this block require(!checkMiningAttempt(blockNumber, sender)); _; } function checkMiningActive() public constant returns (bool) { return (totalSupply < maximumSupply); } modifier isMiningActive() { require(checkMiningActive()); _; } function burn(uint256 value) internal { /* We don't really care if the burn fails for some * weird reason. */ bool ret = burnAddress.send(value); /* If we cannot burn this ether, than the contract might * be under some kind of stack attack. * Even though it shouldn't matter, let's err on the side of * caution and throw in case there is some invalid state. */ require (ret); } event MiningAttemptEvent( address indexed _from, uint256 _value, uint256 indexed _blockNumber, uint256 _totalMinedWei, uint256 _targetDifficultyWei ); event LogEvent( string _info ); /** * @dev Add a mining attempt for the current internal block * Initialize an empty block if not created * Invalidate this mining attempt if the block has been paid out */ function mine() external payable nonReentrant isValidAttempt isMiningActive initBlock(external_to_internal_block_number(current_external_block())) blockRedeemed(external_to_internal_block_number(current_external_block())) alreadyMined(external_to_internal_block_number(current_external_block()), msg.sender) returns (bool) { /* Let's immediately adjust the difficulty * In case an abnormal period of time has elapsed * nobody has been mining etc. * Will let us recover the network even if the * difficulty spikes to some absurd amount * this should only happen on the first attempt on a block */ uint256 internalBlockNum = external_to_internal_block_number(current_external_block()); miningAttempts[internalBlockNum][msg.sender] = MiningAttempt({projectedOffset: blockData[internalBlockNum].currentAttemptOffset, value: msg.value, isCreated: true}); // Increment the mining attempts for this block blockData[internalBlockNum].totalMiningAttempts += 1; blockData[internalBlockNum].totalMiningWei += msg.value; totalWeiCommitted += msg.value; /* We are trying to stack mining attempts into their relative * positions in the key space. */ blockData[internalBlockNum].currentAttemptOffset += msg.value; MiningAttemptEvent(msg.sender, msg.value, internalBlockNum, blockData[internalBlockNum].totalMiningWei, blockData[internalBlockNum].targetDifficultyWei ); // All mining attempt Ether is burned burn(msg.value); return true; } // Redemption Related modifier userMineAttempted(uint256 _blockNum, address _user) { require(checkMiningAttempt(_blockNum, _user)); _; } modifier isBlockMature(uint256 _blockNumber) { require(_blockNumber != current_external_block()); require(checkBlockMature(_blockNumber, current_external_block())); require(checkRedemptionWindow(_blockNumber, current_external_block())); _; } // Just in case this block falls outside of the available // block range, possibly because of a change in network params modifier isBlockReadable(uint256 _blockNumber) { InternalBlock memory iBlock = blockData[_blockNumber]; uint256 targetBlockNum = targetBlockNumber(_blockNumber); require(resolve_block_hash(targetBlockNum) != 0); _; } function calculate_difficulty_attempt(uint256 targetDifficultyWei, uint256 totalMiningWei, uint256 value) public constant returns (uint256) { // The total amount of Wei sent for this mining attempt exceeds the difficulty level // So the calculation of percentage keyspace should be done on the total wei. uint256 selectedDifficultyWei = 0; if (totalMiningWei > targetDifficultyWei) { selectedDifficultyWei = totalMiningWei; } else { selectedDifficultyWei = targetDifficultyWei; } /* normalize the value against the entire key space * Multiply it out because we do not have floating point * 10000000 is .0000001 % increments */ uint256 intermediate = ((value * divisible_units) / selectedDifficultyWei); uint256 max_int = 0; // Underflow to maxint max_int = max_int - 1; if (intermediate >= divisible_units) { return max_int; } else { return intermediate * (max_int / divisible_units); } } function calculate_range_attempt(uint256 difficulty, uint256 offset) public constant returns (uint256, uint256) { /* Both the difficulty and offset should be normalized * against the difficulty scale. * If they are not we might have an integer overflow */ require(offset + difficulty >= offset); return (offset, offset+difficulty); } // Total allocated reward is proportional to burn contribution to limit incentive for // hash grinding attacks function calculate_proportional_reward(uint256 _baseReward, uint256 _userContributionWei, uint256 _totalCommittedWei) public constant returns (uint256) { require(_userContributionWei <= _totalCommittedWei); require(_userContributionWei > 0); require(_totalCommittedWei > 0); uint256 intermediate = ((_userContributionWei * divisible_units) / _totalCommittedWei); if (intermediate >= divisible_units) { return _baseReward; } else { return intermediate * (_baseReward / divisible_units); } } function calculate_base_mining_reward(uint256 _totalBlocksMined) public constant returns (uint256) { /* Block rewards starts at initial_reward * Every 10 minutes * Block reward decreases by 50% every 210000 blocks */ uint256 mined_block_period = 0; if (_totalBlocksMined < 210000) { mined_block_period = 210000; } else { mined_block_period = _totalBlocksMined; } // Again we have to do this iteratively because of floating // point limitations in solidity. uint256 total_reward = initial_reward * (10 ** decimals); uint256 i = 1; uint256 rewardperiods = mined_block_period / 210000; if (mined_block_period % 210000 > 0) { rewardperiods += 1; } for (i=1; i < rewardperiods; i++) { total_reward = total_reward / 2; } return total_reward; } // Break out the expected wei calculation // for easy external testing function calculate_next_expected_wei(uint256 _totalWeiCommitted, uint256 _totalWeiExpected, uint256 _minimumDifficultyThresholdWei, uint256 _difficultyScaleMultiplierLimit) public constant returns (uint256) { /* The adjustment window has been fulfilled * The new difficulty should be bounded by the total wei actually spent * capped at difficultyScaleMultiplierLimit times */ uint256 lowerBound = _totalWeiExpected / _difficultyScaleMultiplierLimit; uint256 upperBound = _totalWeiExpected * _difficultyScaleMultiplierLimit; if (_totalWeiCommitted < lowerBound) { _totalWeiExpected = lowerBound; } else if (_totalWeiCommitted > upperBound) { _totalWeiExpected = upperBound; } else { _totalWeiExpected = _totalWeiCommitted; } /* If difficulty drops too low lets set it to our minimum. * This may halt coin creation, but obviously does not affect * token transactions. */ if (_totalWeiExpected < _minimumDifficultyThresholdWei) { _totalWeiExpected = _minimumDifficultyThresholdWei; } return _totalWeiExpected; } function adjust_difficulty() internal { /* Total blocks mined might not be increasing if the * difficulty is too high. So we should instead base the adjustment * on the progression of the Ethereum network. * So that the difficulty can increase/deflate regardless of sparse * mining attempts */ if ((current_external_block() - lastDifficultyAdjustmentEthereumBlock) > (difficultyAdjustmentPeriod * blockCreationRate)) { // Get the new total wei expected via static function totalWeiExpected = calculate_next_expected_wei(totalWeiCommitted, totalWeiExpected, minimumDifficultyThresholdWei * difficultyAdjustmentPeriod, difficultyScaleMultiplierLimit); currentDifficultyWei = totalWeiExpected / difficultyAdjustmentPeriod; // Regardless of difficulty adjustment, let us zero totalWeiCommited totalWeiCommitted = 0; // Lets reset the difficulty adjustment block target lastDifficultyAdjustmentEthereumBlock = current_external_block(); } } event BlockClaimedEvent( address indexed _from, address indexed _forCreditTo, uint256 _reward, uint256 indexed _blockNumber ); modifier onlyWinner(uint256 _blockNumber) { require(checkWinning(_blockNumber)); _; } // Helper function to avoid stack issues function calculate_reward(uint256 _totalBlocksMined, address _sender, uint256 _blockNumber) public constant returns (uint256) { return calculate_proportional_reward(calculate_base_mining_reward(_totalBlocksMined), miningAttempts[_blockNumber][_sender].value, blockData[_blockNumber].totalMiningWei); } /** * @dev Claim the mining reward for a given block * @param _blockNumber The internal block that the user is trying to claim * @param forCreditTo When the miner account is different from the account * where we want to deliver the redeemed Bitcoineum. I.e Hard wallet. */ function claim(uint256 _blockNumber, address forCreditTo) nonReentrant blockRedeemed(_blockNumber) isBlockMature(_blockNumber) isBlockReadable(_blockNumber) userMineAttempted(_blockNumber, msg.sender) onlyWinner(_blockNumber) external returns (bool) { /* If attempt is valid, invalidate redemption * Difficulty is adjusted here * and on bidding, in case bidding stalls out for some * unusual period of time. * Do everything, then adjust supply and balance */ blockData[_blockNumber].payed = true; blockData[_blockNumber].payee = msg.sender; totalBlocksMined = totalBlocksMined + 1; uint256 proportional_reward = calculate_reward(totalBlocksMined, msg.sender, _blockNumber); balances[forCreditTo] = balances[forCreditTo].add(proportional_reward); totalSupply += proportional_reward; BlockClaimedEvent(msg.sender, forCreditTo, proportional_reward, _blockNumber); // Mining rewards should show up as ERC20 transfer events // So that ERC20 scanners will see token creation. Transfer(this, forCreditTo, proportional_reward); return true; } /** * @dev Claim the mining reward for a given block * @param _blockNum The internal block that the user is trying to claim */ function isBlockRedeemed(uint256 _blockNum) constant public returns (bool) { if (!blockData[_blockNum].isCreated) { return false; } else { return blockData[_blockNum].payed; } } /** * @dev Get the target block in the winning equation * @param _blockNum is the internal block number to get the target block for */ function targetBlockNumber(uint256 _blockNum) constant public returns (uint256) { return ((_blockNum + 1) * blockCreationRate); } /** * @dev Check whether a given block is mature * @param _blockNum is the internal block number to check */ function checkBlockMature(uint256 _blockNum, uint256 _externalblock) constant public returns (bool) { return (_externalblock >= targetBlockNumber(_blockNum)); } /** * @dev Check the redemption window for a given block * @param _blockNum is the internal block number to check */ function checkRedemptionWindow(uint256 _blockNum, uint256 _externalblock) constant public returns (bool) { uint256 _targetblock = targetBlockNumber(_blockNum); return _externalblock >= _targetblock && _externalblock < (_targetblock + 256); } /** * @dev Check whether a mining attempt was made by sender for this block * @param _blockNum is the internal block number to check */ function checkMiningAttempt(uint256 _blockNum, address _sender) constant public returns (bool) { return miningAttempts[_blockNum][_sender].isCreated; } /** * @dev Did the user win a specific block and can claim it? * @param _blockNum is the internal block number to check */ function checkWinning(uint256 _blockNum) constant public returns (bool) { if (checkMiningAttempt(_blockNum, msg.sender) && checkBlockMature(_blockNum, current_external_block())) { InternalBlock memory iBlock = blockData[_blockNum]; uint256 targetBlockNum = targetBlockNumber(iBlock.blockNumber); MiningAttempt memory attempt = miningAttempts[_blockNum][msg.sender]; uint256 difficultyAttempt = calculate_difficulty_attempt(iBlock.targetDifficultyWei, iBlock.totalMiningWei, attempt.value); uint256 beginRange; uint256 endRange; uint256 targetBlockHashInt; (beginRange, endRange) = calculate_range_attempt(difficultyAttempt, calculate_difficulty_attempt(iBlock.targetDifficultyWei, iBlock.totalMiningWei, attempt.projectedOffset)); targetBlockHashInt = uint256(keccak256(resolve_block_hash(targetBlockNum))); // This is the winning condition if ((beginRange < targetBlockHashInt) && (endRange >= targetBlockHashInt)) { return true; } } return false; } } contract Bitcoineum is ERC20Mineable, Transmutable { string public constant name = "Bitcoineum"; string public constant symbol = "BTE"; uint256 public constant decimals = 8; uint256 public constant INITIAL_SUPPLY = 0; // 21 Million coins at 8 decimal places uint256 public constant MAX_SUPPLY = 21000000 * (10**8); function Bitcoineum() { totalSupply = INITIAL_SUPPLY; maximumSupply = MAX_SUPPLY; // 0.0001 Ether per block // Difficulty is so low because it doesn't include // gas prices for execution currentDifficultyWei = 100 szabo; minimumDifficultyThresholdWei = 100 szabo; // Ethereum blocks to internal blocks // Roughly 10 minute windows blockCreationRate = 50; // Adjust difficulty x claimed internal blocks difficultyAdjustmentPeriod = 2016; // Reward adjustment rewardAdjustmentPeriod = 210000; // This is the effective block counter, since block windows are discontinuous totalBlocksMined = 0; totalWeiExpected = difficultyAdjustmentPeriod * currentDifficultyWei; // Balance of this address can be used to determine total burned value // not including fees spent. burnAddress = 0xdeaDDeADDEaDdeaDdEAddEADDEAdDeadDEADDEaD; lastDifficultyAdjustmentEthereumBlock = block.number; } /** * @dev Bitcoineum can extend proof of burn into convertable units * that have token specific properties * @param to is the address of the contract that Bitcoineum is converting into * @param value is the quantity of Bitcoineum to attempt to convert */ function transmute(address to, uint256 value) nonReentrant returns (bool, uint256) { require(value > 0); require(balances[msg.sender] >= value); require(totalSupply >= value); balances[msg.sender] = balances[msg.sender].sub(value); totalSupply = totalSupply.sub(value); TransmutableInterface target = TransmutableInterface(to); bool _result = false; uint256 _total = 0; (_result, _total) = target.transmuted(value); require (_result); Transmuted(msg.sender, this, to, value, _total); return (_result, _total); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"constant":true,"inputs":[],"name":"current_external_block","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"maximumSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_spender","type":"address"},{"name":"_value","type":"uint256"}],"name":"approve","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalWeiCommitted","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_totalBlocksMined","type":"uint256"}],"name":"calculate_base_mining_reward","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNum","type":"uint256"}],"name":"getBlockData","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"},{"name":"","type":"address"},{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"lastDifficultyAdjustmentEthereumBlock","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"minimumDifficultyThresholdWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_from","type":"address"},{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transferFrom","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_totalWeiCommitted","type":"uint256"},{"name":"_totalWeiExpected","type":"uint256"},{"name":"_minimumDifficultyThresholdWei","type":"uint256"},{"name":"_difficultyScaleMultiplierLimit","type":"uint256"}],"name":"calculate_next_expected_wei","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"INITIAL_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"MAX_SUPPLY","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNum","type":"uint256"},{"name":"_externalblock","type":"uint256"}],"name":"checkBlockMature","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNum","type":"uint256"}],"name":"targetBlockNumber","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalBlocksMined","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"difficulty","type":"uint256"},{"name":"offset","type":"uint256"}],"name":"calculate_range_attempt","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"divisible_units","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"checkMiningActive","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNum","type":"uint256"}],"name":"resolve_block_hash","outputs":[{"name":"","type":"bytes32"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_totalBlocksMined","type":"uint256"},{"name":"_sender","type":"address"},{"name":"_blockNumber","type":"uint256"}],"name":"calculate_reward","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"}],"name":"balanceOf","outputs":[{"name":"balance","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"burnAddress","outputs":[{"name":"","type":"address"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"}],"name":"blockData","outputs":[{"name":"targetDifficultyWei","type":"uint256"},{"name":"blockNumber","type":"uint256"},{"name":"totalMiningWei","type":"uint256"},{"name":"totalMiningAttempts","type":"uint256"},{"name":"currentAttemptOffset","type":"uint256"},{"name":"payed","type":"bool"},{"name":"payee","type":"address"},{"name":"isCreated","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"getContractState","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"initial_reward","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNum","type":"uint256"},{"name":"_sender","type":"address"}],"name":"checkMiningAttempt","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"targetDifficultyWei","type":"uint256"},{"name":"totalMiningWei","type":"uint256"},{"name":"value","type":"uint256"}],"name":"calculate_difficulty_attempt","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"type":"function"},{"constant":false,"inputs":[],"name":"mine","outputs":[{"name":"","type":"bool"}],"payable":true,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNum","type":"uint256"},{"name":"_who","type":"address"}],"name":"getMiningAttempt","outputs":[{"name":"","type":"uint256"},{"name":"","type":"uint256"},{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"","type":"uint256"},{"name":"","type":"address"}],"name":"miningAttempts","outputs":[{"name":"projectedOffset","type":"uint256"},{"name":"value","type":"uint256"},{"name":"isCreated","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"difficultyScaleMultiplierLimit","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_value","type":"uint256"}],"name":"transfer","outputs":[],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"blockCreationRate","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"currentDifficultyWei","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_baseReward","type":"uint256"},{"name":"_userContributionWei","type":"uint256"},{"name":"_totalCommittedWei","type":"uint256"}],"name":"calculate_proportional_reward","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNum","type":"uint256"},{"name":"_externalblock","type":"uint256"}],"name":"checkRedemptionWindow","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"totalWeiExpected","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"get_internal_block_number","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_owner","type":"address"},{"name":"_spender","type":"address"}],"name":"allowance","outputs":[{"name":"remaining","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNum","type":"uint256"}],"name":"checkWinning","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"_blockNumber","type":"uint256"},{"name":"forCreditTo","type":"address"}],"name":"claim","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"difficultyAdjustmentPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":false,"inputs":[{"name":"to","type":"address"},{"name":"value","type":"uint256"}],"name":"transmute","outputs":[{"name":"","type":"bool"},{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_blockNum","type":"uint256"}],"name":"isBlockRedeemed","outputs":[{"name":"","type":"bool"}],"payable":false,"type":"function"},{"constant":true,"inputs":[{"name":"_externalBlockNum","type":"uint256"}],"name":"external_to_internal_block_number","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"constant":true,"inputs":[],"name":"rewardAdjustmentPeriod","outputs":[{"name":"","type":"uint256"}],"payable":false,"type":"function"},{"inputs":[],"payable":false,"type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"who","type":"address"},{"indexed":false,"name":"baseContract","type":"address"},{"indexed":false,"name":"transmutedContract","type":"address"},{"indexed":false,"name":"sourceQuantity","type":"uint256"},{"indexed":false,"name":"destQuantity","type":"uint256"}],"name":"Transmuted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":false,"name":"_value","type":"uint256"},{"indexed":true,"name":"_blockNumber","type":"uint256"},{"indexed":false,"name":"_totalMinedWei","type":"uint256"},{"indexed":false,"name":"_targetDifficultyWei","type":"uint256"}],"name":"MiningAttemptEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"name":"_info","type":"string"}],"name":"LogEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"_from","type":"address"},{"indexed":true,"name":"_forCreditTo","type":"address"},{"indexed":false,"name":"_reward","type":"uint256"},{"indexed":true,"name":"_blockNumber","type":"uint256"}],"name":"BlockClaimedEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"}]
Contract Creation Code
60606040526003805460ff19169055341561001957600080fd5b5b6000808055660775f05a074000600455655af3107a4000600581905560065560326007556107e060085562033450600b55600a556702cc3a21c2b80000600d55600e8054600160a060020a03191673deaddeaddeaddeaddeaddeaddeaddeaddeaddead179055436009555b5b61211f806100956000396000f300606060405236156102405763ffffffff60e060020a600035041663014c3dbc81146102455780630480e58b1461026a57806306fdde031461028f578063095ea7b31461031a5780630f59a6381461033e57806312a00b211461036357806318160ddd1461038b5780631c9ab3ad146103b05780631f6a1bf71461041857806322b2f1781461043d57806323b872dd146104625780632b000f001461048c5780632ff2e9dc146104bd578063313ce567146104e257806332cb6b0c14610507578063333cfa141461052c57806334805e7c1461055957806350c8dbd214610581578063555aaff6146105a65780635f623e15146105d7578063608d031a146105fc5780636eadeba0146106235780636f4ebb701461064b57806370a082311461068257806370d5ae05146106b35780637e21c28b146106e25780637f4e48491461074a578063808cf58e146107c857806388537daf146107ed57806390c469851461082357806395d89b411461085157806399f4b251146108dc5780639a2457c1146108f85780639d8abff314610940578063a6ad57e614610988578063a9059cbb146109ad578063aee1d4d3146109d1578063b0c2a163146109f6578063baa3fc4814610a1b578063c3de7cbf14610a49578063c52e40d014610a76578063c539607c14610a9b578063dd62ed3e14610ac0578063dda6c3ce14610af7578063ddd5e1b214610b21578063f01551f614610b57578063f52ae24b14610b7c578063fa90693b14610bb8578063fab425e714610be2578063ff62d2cf14610c0a575b600080fd5b341561025057600080fd5b610258610c2f565b60405190815260200160405180910390f35b341561027557600080fd5b610258610c34565b60405190815260200160405180910390f35b341561029a57600080fd5b6102a2610c3a565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102df5780820151818401525b6020016102c6565b50505050905090810190601f16801561030c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561032557600080fd5b61033c600160a060020a0360043516602435610c61565b005b341561034957600080fd5b610258610cfd565b60405190815260200160405180910390f35b341561036e57600080fd5b610258600435610d03565b60405190815260200160405180910390f35b341561039657600080fd5b610258610d78565b60405190815260200160405180910390f35b34156103bb57600080fd5b6103c6600435610d7e565b604051978852602088019690965260408088019590955260608701939093526080860191909152151560a0850152600160a060020a031660c084015290151560e0830152610100909101905180910390f35b341561042357600080fd5b610258610e54565b60405190815260200160405180910390f35b341561044857600080fd5b610258610e5a565b60405190815260200160405180910390f35b341561046d57600080fd5b61033c600160a060020a0360043581169060243516604435610e60565b005b341561049757600080fd5b610258600435602435604435606435610f5a565b60405190815260200160405180910390f35b34156104c857600080fd5b610258610fb0565b60405190815260200160405180910390f35b34156104ed57600080fd5b610258610fb5565b60405190815260200160405180910390f35b341561051257600080fd5b610258610fba565b60405190815260200160405180910390f35b341561053757600080fd5b610545600435602435610fc5565b604051901515815260200160405180910390f35b341561056457600080fd5b610258600435610fdc565b60405190815260200160405180910390f35b341561058c57600080fd5b610258610fea565b60405190815260200160405180910390f35b34156105b157600080fd5b6105bf600435602435610ff0565b60405191825260208201526040908101905180910390f35b34156105e257600080fd5b610258611012565b60405190815260200160405180910390f35b341561060757600080fd5b610545611019565b604051901515815260200160405180910390f35b341561062e57600080fd5b610258600435611024565b60405190815260200160405180910390f35b341561065657600080fd5b610258600435600160a060020a036024351660443561102c565b60405190815260200160405180910390f35b341561068d57600080fd5b610258600160a060020a036004351661107e565b60405190815260200160405180910390f35b34156106be57600080fd5b6106c661109d565b604051600160a060020a03909116815260200160405180910390f35b34156106ed57600080fd5b6103c66004356110ac565b604051978852602088019690965260408088019590955260608701939093526080860191909152151560a0850152600160a060020a031660c084015290151560e0830152610100909101905180910390f35b341561075557600080fd5b61075d6110ff565b6040519c8d5260208d019b909b526040808d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e08801526101008701526101208601526101408501526101608401526101808301919091526101a0909101905180910390f35b34156107d357600080fd5b610258611274565b60405190815260200160405180910390f35b34156107f857600080fd5b610545600435600160a060020a0360243516611279565b604051901515815260200160405180910390f35b341561082e57600080fd5b6102586004356024356044356112a9565b60405190815260200160405180910390f35b341561085c57600080fd5b6102a2611303565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102df5780820151818401525b6020016102c6565b50505050905090810190601f16801561030c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610545611323565b604051901515815260200160405180910390f35b341561090357600080fd5b61091a600435600160a060020a036024351661169c565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561094b57600080fd5b61091a600435600160a060020a036024351661171d565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561099357600080fd5b61025861174c565b60405190815260200160405180910390f35b34156109b857600080fd5b61033c600160a060020a0360043516602435611751565b005b34156109dc57600080fd5b6102586117fa565b60405190815260200160405180910390f35b3415610a0157600080fd5b610258611800565b60405190815260200160405180910390f35b3415610a2657600080fd5b610258600435602435604435611806565b60405190815260200160405180910390f35b3415610a5457600080fd5b61054560043560243561186a565b604051901515815260200160405180910390f35b3415610a8157600080fd5b610258611895565b60405190815260200160405180910390f35b3415610aa657600080fd5b61025861189b565b60405190815260200160405180910390f35b3415610acb57600080fd5b610258600160a060020a03600435811690602435166118b3565b60405190815260200160405180910390f35b3415610b0257600080fd5b6105456004356118e0565b604051901515815260200160405180910390f35b3415610b2c57600080fd5b610545600435600160a060020a0360243516611a87565b604051901515815260200160405180910390f35b3415610b6257600080fd5b610258611d5c565b60405190815260200160405180910390f35b3415610b8757600080fd5b610b9e600160a060020a0360043516602435611d62565b604051911515825260208201526040908101905180910390f35b3415610bc357600080fd5b610545600435611f2e565b604051901515815260200160405180910390f35b3415610bed57600080fd5b610258600435611f79565b60405190815260200160405180910390f35b3415610c1557600080fd5b610258611f91565b60405190815260200160405180910390f35b435b90565b60045481565b60408051908101604052600a815260b060020a69426974636f696e65756d02602082015281565b8015610c9757600160a060020a0333811660009081526002602090815260408083209386168352929052205415610c9757600080fd5b5b600160a060020a03338116600081815260026020908152604080832094871680845294909152908190208490557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35b5050565b600c5481565b60008080808062033450861015610d1f57620334509350610d23565b8593505b6402540be40092506001915062033450845b049050600062033450855b061115610d4b576001015b600191505b80821015610d6b576002835b0492505b600190910190610d50565b8294505b50505050919050565b60005481565b600080600080600080600080610d92612060565b60008a8152600f60205260409081902090610100905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e08201529050805181602001518260400151836060015184608001518560a001518660c001518760e00151985098509850985098509850985098505b50919395975091939597565b60095481565b60065481565b600160a060020a038084166000908152600260209081526040808320338516845282528083205493861683526001909152902054610ea4908363ffffffff611f9716565b600160a060020a038085166000908152600160205260408082209390935590861681522054610ed9908363ffffffff611fb116565b600160a060020a038516600090815260016020526040902055610f02818363ffffffff611fb116565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206120d48339815191529085905190815260200160405180910390a35b50505050565b60008060008386811515610f6a57fe5b0491505084830281871015610f8157819550610f95565b80871115610f9157809550610f95565b8695505b5b84861015610fa2578495505b8592505b5050949350505050565b600081565b600881565b660775f05a07400081565b6000610fd083610fdc565b82101590505b92915050565b60075460018201025b919050565b600a5481565b6000808383018390101561100357600080fd5b508190508281015b9250929050565b6298968081565b600454600054105b90565b80405b919050565b600061107461103a85610d03565b6000848152601060209081526040808320600160a060020a0389168452825280832060010154878452600f90925290912060020154611806565b90505b9392505050565b600160a060020a0381166000908152600160205260409020545b919050565b600e54600160a060020a031681565b600f60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff80821691600160a060020a036101008204169160a860020a9091041688565b600080600080600080600080600080600080600061111b612060565b600061112d611128610c2f565b611f79565b6000818152600f602052604090206005015490915060a860020a900460ff16151561119c5761010060405190810160409081526005548252602082018390526000908201819052606082018190526080820181905260a0820181905260c0820152600160e0820152915061121d565b6000818152600f60205260409081902090610100905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e082015291505b60055460065482600754600854600b54600954600a54600c54600d548b600001518c604001518d608001519e509e509e509e509e509e509e509e509e509e509e509e509e505b5050909192939495969798999a9b9c565b606481565b6000828152601060209081526040808320600160a060020a038516845290915290206002015460ff165b92915050565b6000808080868611156112be578592506112c2565b8692505b826298968086028115156112d257fe5b04915060001990506298968082106112ec578093506112f8565b62989680815b04820293505b5b5050509392505050565b604080519081016040526003815260e860020a6242544502602082015281565b600354600090819060ff161561133857600080fd5b6003805460ff1916600117905560055460009062989680905b049050348190101561136257600080fd5b69d3c21bcecceda100000034111561137957600080fd5b611381611019565b151561138c57600080fd5b61139c611128610c2f565b611f79565b6113a4610c2f565b8114156113b057600080fd5b6000818152600f602052604090206005015460a860020a900460ff1615156114c3576113da611fc8565b6101006040519081016040908152600554825260208083018490526000828401819052606084018190526080840181905260a0840181905260c08401819052600160e0850152848152600f90915220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015160058201805460ff191691151591909117905560c08201518160050160016101000a815481600160a060020a030219169083600160a060020a0316021790555060e08201516005909101805491151560a860020a0260a860020a60ff0219909216919091179055505b6114d3611128610c2f565b611f79565b6114db610c2f565b8114156114e757600080fd5b6000818152600f602052604090206005015460a860020a900460ff16151561150e57600080fd5b6000818152600f602052604090206005015460ff161561152d57600080fd5b61153d611128610c2f565b611f79565b33611546610c2f565b82141561155257600080fd5b61155c8282611279565b1561156657600080fd5b611576611128610c2f565b611f79565b9550606060405190810160409081526000888152600f6020908152828220600401548452348185015260018385015289825260108152828220600160a060020a0333168352905220815181556020820151816001015560408201516002918201805460ff19169115159190911790556000888152600f60205260409081902060038101805460010190559182018054349081018255600c80548201905560048401805482019055905492548a945033600160a060020a0316937f79974ce89535ebe44946f7f7d2814356530f301d744391e2da3cb544e8415bac939091905180848152602001838152602001828152602001935050505060405180910390a361167e34612022565b600196505b5b50505b505b505b5b506003805460ff191690555b5090565b6000828152601060209081526040808320600160a060020a03851684529091528120600201548190819060ff161561170b575050506000828152601060209081526040808320600160a060020a038516845290915290208054600182015460029092015490919060ff16611715565b5060009150819050805b5b9250925092565b601060209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b600481565b600160a060020a03331660009081526001602052604090205461177a908263ffffffff611fb116565b600160a060020a0333811660009081526001602052604080822093909355908416815220546117af908263ffffffff611f9716565b600160a060020a0380841660008181526001602052604090819020939093559133909116906000805160206120d48339815191529084905190815260200160405180910390a35b5050565b60075481565b60055481565b6000808284111561181657600080fd5b6000841161182357600080fd5b6000831161183057600080fd5b8262989680850281151561184057fe5b04905062989680811061185557849150611861565b62989680855b04810291505b5b509392505050565b60008061187684610fdc565b905080831015801561188b5750806101000183105b91505b5092915050565b600d5481565b60006118ad611128610c2f565b611f79565b90505b90565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60006118ea612060565b60006118f46120b3565b6000806000806119048933611279565b801561191c575061191c89611917610c2f565b610fc5565b5b15611a75576000898152600f602052604090819020906101009051908101604090815282548252600183015460208301908152600284015491830191909152600383015460608301526004830154608083015260059092015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e082015297506119b19051610fdc565b60008a8152601060209081526040808320600160a060020a033316845290915290819020919750606090519081016040908152825482526001830154602083015260029092015460ff161515918101919091529450611a1a8751886040015187602001516112a9565b9350611a3684611a3189518a6040015189516112a9565b610ff0565b9093509150611a4486611024565b60405190815260200160405190819003902090508083108015611a675750808210155b15611a755760019750611a7b565b5b600097505b50505050505050919050565b600354600090819060ff1615611a9c57600080fd5b6003805460ff1916600117905583611ab2610c2f565b811415611abe57600080fd5b6000818152600f602052604090206005015460a860020a900460ff161515611ae557600080fd5b6000818152600f602052604090206005015460ff1615611b0457600080fd5b84611b0d610c2f565b811415611b1957600080fd5b611b2a81611917610c2f565b610fc5565b1515611b3557600080fd5b611b4681611b41610c2f565b61186a565b1515611b5157600080fd5b85611b5a612060565b6000828152600f602052604080822090610100905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e08201529150611be283610fdc565b9050611bed81611024565b1515611bf857600080fd5b8833611c048282611279565b1515611c0f57600080fd5b8a611c19816118e0565b1515611c2457600080fd5b60008c8152600f602052604090206005018054600160a060020a03339081166101000261010060a860020a031960ff1990931660019081179390931617909255600a805490910190819055611c79918e61102c565b600160a060020a038c16600090815260016020526040902054909950611ca5908a63ffffffff611f9716565b600160a060020a03808d166000818152600160205260408082209490945580548d0190558e9290913316907f02d996374be8c81683a2ac4abd51bbf94eaa161436677d4195541f2ef4cb63b8908d905190815260200160405180910390a48a600160a060020a031630600160a060020a03166000805160206120d48339815191528b60405190815260200160405180910390a3600199505b5b505b50505b5050505b505b506003805460ff191690555b5092915050565b60085481565b600354600090819081908190819060ff1615611d7d57600080fd5b6003805460ff1916600117905560008611611d9757600080fd5b600160a060020a03331660009081526001602052604090205486901015611dbd57600080fd5b60005486901015611dcd57600080fd5b600160a060020a033316600090815260016020526040902054611df6908763ffffffff611fb116565b600160a060020a03331660009081526001602052604081209190915554611e23908763ffffffff611fb116565b60009081558793509150819050600160a060020a03831663e24a504287836040516040015260405160e060020a63ffffffff841602815260048101919091526024016040805180830381600087803b1515611e7d57600080fd5b6102c65a03f11515611e8e57600080fd5b505050604051805190602001805191935090915050811515611eaf57600080fd5b33600160a060020a03167f11933e4bf668f8fb8314a699158eba5c7836ff5ece3f1bc3056c6c34ccc56e4a30898985604051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a28181945094505b6003805460ff191690555b5050509250929050565b6000818152600f602052604081206005015460a860020a900460ff161515611f5857506000610fe5565b506000818152600f602052604090206005015460ff16610fe5565b5b919050565b600060075482811515611f8857fe5b0490505b919050565b600b5481565b600082820183811015611fa657fe5b8091505b5092915050565b600082821115611fbd57fe5b508082035b92915050565b60075460085402600954611fda610c2f565b03111561201f57611ff8600c54600d54600854600654026004610f5a565b600d8190556008549081151561200a57fe5b046005556000600c5561201b610c2f565b6009555b5b565b600e54600090600160a060020a031682156108fc0283604051600060405180830381858888f193505050509050801515610cf957600080fd5b5b5050565b6101006040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000600160a060020a031681526020016000151581525090565b6060604051908101604090815260008083526020830181905290820152905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582023a5ec9c898790009860a99e7c78ae01613b6e446e79605bfbb8d51649f2cb4e0029
Deployed Bytecode
0x606060405236156102405763ffffffff60e060020a600035041663014c3dbc81146102455780630480e58b1461026a57806306fdde031461028f578063095ea7b31461031a5780630f59a6381461033e57806312a00b211461036357806318160ddd1461038b5780631c9ab3ad146103b05780631f6a1bf71461041857806322b2f1781461043d57806323b872dd146104625780632b000f001461048c5780632ff2e9dc146104bd578063313ce567146104e257806332cb6b0c14610507578063333cfa141461052c57806334805e7c1461055957806350c8dbd214610581578063555aaff6146105a65780635f623e15146105d7578063608d031a146105fc5780636eadeba0146106235780636f4ebb701461064b57806370a082311461068257806370d5ae05146106b35780637e21c28b146106e25780637f4e48491461074a578063808cf58e146107c857806388537daf146107ed57806390c469851461082357806395d89b411461085157806399f4b251146108dc5780639a2457c1146108f85780639d8abff314610940578063a6ad57e614610988578063a9059cbb146109ad578063aee1d4d3146109d1578063b0c2a163146109f6578063baa3fc4814610a1b578063c3de7cbf14610a49578063c52e40d014610a76578063c539607c14610a9b578063dd62ed3e14610ac0578063dda6c3ce14610af7578063ddd5e1b214610b21578063f01551f614610b57578063f52ae24b14610b7c578063fa90693b14610bb8578063fab425e714610be2578063ff62d2cf14610c0a575b600080fd5b341561025057600080fd5b610258610c2f565b60405190815260200160405180910390f35b341561027557600080fd5b610258610c34565b60405190815260200160405180910390f35b341561029a57600080fd5b6102a2610c3a565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102df5780820151818401525b6020016102c6565b50505050905090810190601f16801561030c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b341561032557600080fd5b61033c600160a060020a0360043516602435610c61565b005b341561034957600080fd5b610258610cfd565b60405190815260200160405180910390f35b341561036e57600080fd5b610258600435610d03565b60405190815260200160405180910390f35b341561039657600080fd5b610258610d78565b60405190815260200160405180910390f35b34156103bb57600080fd5b6103c6600435610d7e565b604051978852602088019690965260408088019590955260608701939093526080860191909152151560a0850152600160a060020a031660c084015290151560e0830152610100909101905180910390f35b341561042357600080fd5b610258610e54565b60405190815260200160405180910390f35b341561044857600080fd5b610258610e5a565b60405190815260200160405180910390f35b341561046d57600080fd5b61033c600160a060020a0360043581169060243516604435610e60565b005b341561049757600080fd5b610258600435602435604435606435610f5a565b60405190815260200160405180910390f35b34156104c857600080fd5b610258610fb0565b60405190815260200160405180910390f35b34156104ed57600080fd5b610258610fb5565b60405190815260200160405180910390f35b341561051257600080fd5b610258610fba565b60405190815260200160405180910390f35b341561053757600080fd5b610545600435602435610fc5565b604051901515815260200160405180910390f35b341561056457600080fd5b610258600435610fdc565b60405190815260200160405180910390f35b341561058c57600080fd5b610258610fea565b60405190815260200160405180910390f35b34156105b157600080fd5b6105bf600435602435610ff0565b60405191825260208201526040908101905180910390f35b34156105e257600080fd5b610258611012565b60405190815260200160405180910390f35b341561060757600080fd5b610545611019565b604051901515815260200160405180910390f35b341561062e57600080fd5b610258600435611024565b60405190815260200160405180910390f35b341561065657600080fd5b610258600435600160a060020a036024351660443561102c565b60405190815260200160405180910390f35b341561068d57600080fd5b610258600160a060020a036004351661107e565b60405190815260200160405180910390f35b34156106be57600080fd5b6106c661109d565b604051600160a060020a03909116815260200160405180910390f35b34156106ed57600080fd5b6103c66004356110ac565b604051978852602088019690965260408088019590955260608701939093526080860191909152151560a0850152600160a060020a031660c084015290151560e0830152610100909101905180910390f35b341561075557600080fd5b61075d6110ff565b6040519c8d5260208d019b909b526040808d019a909a5260608c019890985260808b019690965260a08a019490945260c089019290925260e08801526101008701526101208601526101408501526101608401526101808301919091526101a0909101905180910390f35b34156107d357600080fd5b610258611274565b60405190815260200160405180910390f35b34156107f857600080fd5b610545600435600160a060020a0360243516611279565b604051901515815260200160405180910390f35b341561082e57600080fd5b6102586004356024356044356112a9565b60405190815260200160405180910390f35b341561085c57600080fd5b6102a2611303565b60405160208082528190810183818151815260200191508051906020019080838360005b838110156102df5780820151818401525b6020016102c6565b50505050905090810190601f16801561030c5780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610545611323565b604051901515815260200160405180910390f35b341561090357600080fd5b61091a600435600160a060020a036024351661169c565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561094b57600080fd5b61091a600435600160a060020a036024351661171d565b604051928352602083019190915215156040808301919091526060909101905180910390f35b341561099357600080fd5b61025861174c565b60405190815260200160405180910390f35b34156109b857600080fd5b61033c600160a060020a0360043516602435611751565b005b34156109dc57600080fd5b6102586117fa565b60405190815260200160405180910390f35b3415610a0157600080fd5b610258611800565b60405190815260200160405180910390f35b3415610a2657600080fd5b610258600435602435604435611806565b60405190815260200160405180910390f35b3415610a5457600080fd5b61054560043560243561186a565b604051901515815260200160405180910390f35b3415610a8157600080fd5b610258611895565b60405190815260200160405180910390f35b3415610aa657600080fd5b61025861189b565b60405190815260200160405180910390f35b3415610acb57600080fd5b610258600160a060020a03600435811690602435166118b3565b60405190815260200160405180910390f35b3415610b0257600080fd5b6105456004356118e0565b604051901515815260200160405180910390f35b3415610b2c57600080fd5b610545600435600160a060020a0360243516611a87565b604051901515815260200160405180910390f35b3415610b6257600080fd5b610258611d5c565b60405190815260200160405180910390f35b3415610b8757600080fd5b610b9e600160a060020a0360043516602435611d62565b604051911515825260208201526040908101905180910390f35b3415610bc357600080fd5b610545600435611f2e565b604051901515815260200160405180910390f35b3415610bed57600080fd5b610258600435611f79565b60405190815260200160405180910390f35b3415610c1557600080fd5b610258611f91565b60405190815260200160405180910390f35b435b90565b60045481565b60408051908101604052600a815260b060020a69426974636f696e65756d02602082015281565b8015610c9757600160a060020a0333811660009081526002602090815260408083209386168352929052205415610c9757600080fd5b5b600160a060020a03338116600081815260026020908152604080832094871680845294909152908190208490557f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b9259084905190815260200160405180910390a35b5050565b600c5481565b60008080808062033450861015610d1f57620334509350610d23565b8593505b6402540be40092506001915062033450845b049050600062033450855b061115610d4b576001015b600191505b80821015610d6b576002835b0492505b600190910190610d50565b8294505b50505050919050565b60005481565b600080600080600080600080610d92612060565b60008a8152600f60205260409081902090610100905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e08201529050805181602001518260400151836060015184608001518560a001518660c001518760e00151985098509850985098509850985098505b50919395975091939597565b60095481565b60065481565b600160a060020a038084166000908152600260209081526040808320338516845282528083205493861683526001909152902054610ea4908363ffffffff611f9716565b600160a060020a038085166000908152600160205260408082209390935590861681522054610ed9908363ffffffff611fb116565b600160a060020a038516600090815260016020526040902055610f02818363ffffffff611fb116565b600160a060020a03808616600081815260026020908152604080832033861684529091529081902093909355908516916000805160206120d48339815191529085905190815260200160405180910390a35b50505050565b60008060008386811515610f6a57fe5b0491505084830281871015610f8157819550610f95565b80871115610f9157809550610f95565b8695505b5b84861015610fa2578495505b8592505b5050949350505050565b600081565b600881565b660775f05a07400081565b6000610fd083610fdc565b82101590505b92915050565b60075460018201025b919050565b600a5481565b6000808383018390101561100357600080fd5b508190508281015b9250929050565b6298968081565b600454600054105b90565b80405b919050565b600061107461103a85610d03565b6000848152601060209081526040808320600160a060020a0389168452825280832060010154878452600f90925290912060020154611806565b90505b9392505050565b600160a060020a0381166000908152600160205260409020545b919050565b600e54600160a060020a031681565b600f60205260009081526040902080546001820154600283015460038401546004850154600590950154939492939192909160ff80821691600160a060020a036101008204169160a860020a9091041688565b600080600080600080600080600080600080600061111b612060565b600061112d611128610c2f565b611f79565b6000818152600f602052604090206005015490915060a860020a900460ff16151561119c5761010060405190810160409081526005548252602082018390526000908201819052606082018190526080820181905260a0820181905260c0820152600160e0820152915061121d565b6000818152600f60205260409081902090610100905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e082015291505b60055460065482600754600854600b54600954600a54600c54600d548b600001518c604001518d608001519e509e509e509e509e509e509e509e509e509e509e509e509e505b5050909192939495969798999a9b9c565b606481565b6000828152601060209081526040808320600160a060020a038516845290915290206002015460ff165b92915050565b6000808080868611156112be578592506112c2565b8692505b826298968086028115156112d257fe5b04915060001990506298968082106112ec578093506112f8565b62989680815b04820293505b5b5050509392505050565b604080519081016040526003815260e860020a6242544502602082015281565b600354600090819060ff161561133857600080fd5b6003805460ff1916600117905560055460009062989680905b049050348190101561136257600080fd5b69d3c21bcecceda100000034111561137957600080fd5b611381611019565b151561138c57600080fd5b61139c611128610c2f565b611f79565b6113a4610c2f565b8114156113b057600080fd5b6000818152600f602052604090206005015460a860020a900460ff1615156114c3576113da611fc8565b6101006040519081016040908152600554825260208083018490526000828401819052606084018190526080840181905260a0840181905260c08401819052600160e0850152848152600f90915220815181556020820151816001015560408201518160020155606082015181600301556080820151816004015560a082015160058201805460ff191691151591909117905560c08201518160050160016101000a815481600160a060020a030219169083600160a060020a0316021790555060e08201516005909101805491151560a860020a0260a860020a60ff0219909216919091179055505b6114d3611128610c2f565b611f79565b6114db610c2f565b8114156114e757600080fd5b6000818152600f602052604090206005015460a860020a900460ff16151561150e57600080fd5b6000818152600f602052604090206005015460ff161561152d57600080fd5b61153d611128610c2f565b611f79565b33611546610c2f565b82141561155257600080fd5b61155c8282611279565b1561156657600080fd5b611576611128610c2f565b611f79565b9550606060405190810160409081526000888152600f6020908152828220600401548452348185015260018385015289825260108152828220600160a060020a0333168352905220815181556020820151816001015560408201516002918201805460ff19169115159190911790556000888152600f60205260409081902060038101805460010190559182018054349081018255600c80548201905560048401805482019055905492548a945033600160a060020a0316937f79974ce89535ebe44946f7f7d2814356530f301d744391e2da3cb544e8415bac939091905180848152602001838152602001828152602001935050505060405180910390a361167e34612022565b600196505b5b50505b505b505b5b506003805460ff191690555b5090565b6000828152601060209081526040808320600160a060020a03851684529091528120600201548190819060ff161561170b575050506000828152601060209081526040808320600160a060020a038516845290915290208054600182015460029092015490919060ff16611715565b5060009150819050805b5b9250925092565b601060209081526000928352604080842090915290825290208054600182015460029092015490919060ff1683565b600481565b600160a060020a03331660009081526001602052604090205461177a908263ffffffff611fb116565b600160a060020a0333811660009081526001602052604080822093909355908416815220546117af908263ffffffff611f9716565b600160a060020a0380841660008181526001602052604090819020939093559133909116906000805160206120d48339815191529084905190815260200160405180910390a35b5050565b60075481565b60055481565b6000808284111561181657600080fd5b6000841161182357600080fd5b6000831161183057600080fd5b8262989680850281151561184057fe5b04905062989680811061185557849150611861565b62989680855b04810291505b5b509392505050565b60008061187684610fdc565b905080831015801561188b5750806101000183105b91505b5092915050565b600d5481565b60006118ad611128610c2f565b611f79565b90505b90565b600160a060020a038083166000908152600260209081526040808320938516835292905220545b92915050565b60006118ea612060565b60006118f46120b3565b6000806000806119048933611279565b801561191c575061191c89611917610c2f565b610fc5565b5b15611a75576000898152600f602052604090819020906101009051908101604090815282548252600183015460208301908152600284015491830191909152600383015460608301526004830154608083015260059092015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e082015297506119b19051610fdc565b60008a8152601060209081526040808320600160a060020a033316845290915290819020919750606090519081016040908152825482526001830154602083015260029092015460ff161515918101919091529450611a1a8751886040015187602001516112a9565b9350611a3684611a3189518a6040015189516112a9565b610ff0565b9093509150611a4486611024565b60405190815260200160405190819003902090508083108015611a675750808210155b15611a755760019750611a7b565b5b600097505b50505050505050919050565b600354600090819060ff1615611a9c57600080fd5b6003805460ff1916600117905583611ab2610c2f565b811415611abe57600080fd5b6000818152600f602052604090206005015460a860020a900460ff161515611ae557600080fd5b6000818152600f602052604090206005015460ff1615611b0457600080fd5b84611b0d610c2f565b811415611b1957600080fd5b611b2a81611917610c2f565b610fc5565b1515611b3557600080fd5b611b4681611b41610c2f565b61186a565b1515611b5157600080fd5b85611b5a612060565b6000828152600f602052604080822090610100905190810160409081528254825260018301546020830152600283015490820152600382015460608201526004820154608082015260059091015460ff808216151560a0840152600160a060020a0361010083041660c084015260a860020a90910416151560e08201529150611be283610fdc565b9050611bed81611024565b1515611bf857600080fd5b8833611c048282611279565b1515611c0f57600080fd5b8a611c19816118e0565b1515611c2457600080fd5b60008c8152600f602052604090206005018054600160a060020a03339081166101000261010060a860020a031960ff1990931660019081179390931617909255600a805490910190819055611c79918e61102c565b600160a060020a038c16600090815260016020526040902054909950611ca5908a63ffffffff611f9716565b600160a060020a03808d166000818152600160205260408082209490945580548d0190558e9290913316907f02d996374be8c81683a2ac4abd51bbf94eaa161436677d4195541f2ef4cb63b8908d905190815260200160405180910390a48a600160a060020a031630600160a060020a03166000805160206120d48339815191528b60405190815260200160405180910390a3600199505b5b505b50505b5050505b505b506003805460ff191690555b5092915050565b60085481565b600354600090819081908190819060ff1615611d7d57600080fd5b6003805460ff1916600117905560008611611d9757600080fd5b600160a060020a03331660009081526001602052604090205486901015611dbd57600080fd5b60005486901015611dcd57600080fd5b600160a060020a033316600090815260016020526040902054611df6908763ffffffff611fb116565b600160a060020a03331660009081526001602052604081209190915554611e23908763ffffffff611fb116565b60009081558793509150819050600160a060020a03831663e24a504287836040516040015260405160e060020a63ffffffff841602815260048101919091526024016040805180830381600087803b1515611e7d57600080fd5b6102c65a03f11515611e8e57600080fd5b505050604051805190602001805191935090915050811515611eaf57600080fd5b33600160a060020a03167f11933e4bf668f8fb8314a699158eba5c7836ff5ece3f1bc3056c6c34ccc56e4a30898985604051600160a060020a0394851681529290931660208301526040808301919091526060820192909252608001905180910390a28181945094505b6003805460ff191690555b5050509250929050565b6000818152600f602052604081206005015460a860020a900460ff161515611f5857506000610fe5565b506000818152600f602052604090206005015460ff16610fe5565b5b919050565b600060075482811515611f8857fe5b0490505b919050565b600b5481565b600082820183811015611fa657fe5b8091505b5092915050565b600082821115611fbd57fe5b508082035b92915050565b60075460085402600954611fda610c2f565b03111561201f57611ff8600c54600d54600854600654026004610f5a565b600d8190556008549081151561200a57fe5b046005556000600c5561201b610c2f565b6009555b5b565b600e54600090600160a060020a031682156108fc0283604051600060405180830381858888f193505050509050801515610cf957600080fd5b5b5050565b6101006040519081016040528060008152602001600081526020016000815260200160008152602001600081526020016000151581526020016000600160a060020a031681526020016000151581525090565b6060604051908101604090815260008083526020830181905290820152905600ddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa165627a7a7230582023a5ec9c898790009860a99e7c78ae01613b6e446e79605bfbb8d51649f2cb4e0029
Swarm Source
bzzr://23a5ec9c898790009860a99e7c78ae01613b6e446e79605bfbb8d51649f2cb4e
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.